Beispiel #1
0
def test_infers_major_bump_correctly():
    with GitRepo() as g:
        g.commit("feat: initial commit", allow_empty=True)
        g.tag("1.1.0")
        g.commit("feat: breaking\nBREAKING CHANGE: breaking", allow_empty=True)
        assert infer_vnext(g.log()) == SemVer(2, 0, 0)
        g.tag("2.0.0")
        g.commit("feat: test\nBREAKING CHANGE: test", allow_empty=True)
        assert infer_vnext(g.log()) == SemVer(3, 0, 0)
Beispiel #2
0
def test_infers_micro_bump_correctly():
    with GitRepo() as g:
        g.commit("feat: initial commit", allow_empty=True)
        g.tag("0.1.0")
        assert infer_vnext(g.log()) == SemVer(0, 1, 1)
        g.commit("chore: test", allow_empty=True)
        g.tag("0.1.1")
        g.commit("fix: test", allow_empty=True)
        assert infer_vnext(g.log()) == SemVer(0, 1, 2)
Beispiel #3
0
def infer_vnext(log,
                suffix=None,
                suffix_dot_suffix=False,
                suffix_dash_prefix=False):
    latest_tag_index = get_latest_tag_index(log)
    if latest_tag_index is None:
        if suffix:
            return SemVer(
                0,
                1,
                0,
                suffix=suffix,
                suffix_number=1,
                suffix_dot_suffix=suffix_dot_suffix,
                suffix_dash_prefix=suffix_dash_prefix,
            )
        else:
            return SemVer(0, 1, 0)
    else:
        version = SemVer.fromstr(log[latest_tag_index]["tag"].replace("v", ""))
        if (version.isprerelease()
                and version.suffix_dash_prefix == suffix_dash_prefix
                and version.suffix == suffix
                and version.suffix_dot_suffix == suffix_dot_suffix):
            version.increment_suffix_number()
            return version
        if latest_tag_index == len(log) - 1:
            version.increment_micro()
            return version
        major_bump, minor_bump = False, False
        for commit in log[latest_tag_index + 1:]:
            try:
                cc_msg_type = ConventionalCommitMsg(commit["message"]).msg_type
                if cc_msg_type == "BREAKING CHANGE":
                    major_bump = True
                elif cc_msg_type == "feat":
                    minor_bump = True
            except Exception as e:
                print(
                    f"WARNING: Commit '{commit['hash']}' did not have a Conventional Commits-compliant message.",
                    file=sys.stderr,
                )
                print(e, file=sys.stderr)
        if major_bump:
            version.increment_major()
        elif minor_bump:
            version.increment_minor()
        else:
            version.increment_micro()
        return version
Beispiel #4
0
def test_fromstr_parses_correctly(
    param,
    major,
    minor,
    micro,
    suffix_dash_prefix,
    suffix,
    suffix_dot_suffix,
    suffix_number,
):
    s = SemVer.fromstr(param)
    assert s.major == major
    assert s.minor == minor
    assert s.micro == micro
    assert s.suffix_dash_prefix == suffix_dash_prefix
    assert s.suffix == suffix
    assert s.suffix_dot_suffix == suffix_dot_suffix
    assert s.suffix_number == suffix_number
    assert s == param
Beispiel #5
0
def test_floats_raise_valueerror(params):
    with pytest.raises(ValueError):
        SemVer(params[0], params[1], params[2])
Beispiel #6
0
def test_repr_gives_properly_formatted_string():
    assert repr(SemVer()) == "0.1.0"
Beispiel #7
0
def test_increment_suffix_number():
    s = SemVer(0, 1, 0, suffix="test", suffix_number=1)
    assert s == "0.1.0test1"
    s.increment_suffix_number()
    assert s == "0.1.0test2"
Beispiel #8
0
def test_increment_suffix_number_raises_typeerror_when_none():
    with pytest.raises(TypeError):
        SemVer().increment_suffix_number()
Beispiel #9
0
def test_isvalid_method(subject, isvalid):
    assert SemVer.isvalid(subject) == isvalid
Beispiel #10
0
def test_isprelease(version, isprerelease):
    assert SemVer.fromstr(version).isprerelease() == isprerelease
Beispiel #11
0
def test_default_semver_is_0_1_0():
    s = SemVer()
    assert s == "0.1.0"
Beispiel #12
0
def test_passing_version_flag_prints_version_and_exits(args, capsys):
    with pytest.raises(SystemExit):
        main(args)
    c = capsys.readouterr()
    assert SemVer.isvalid(c.out)
Beispiel #13
0
def test_string_parameters():
    s = SemVer("1", "1", "1")
    assert s == "1.1.1"
Beispiel #14
0
def test_fromstr(param):
    assert SemVer.fromstr(param) == param
Beispiel #15
0
def test_incrementting_micro_leaves_major_and_minor():
    s = SemVer(1, 1, 1)
    s.increment_micro()
    assert s == "1.1.2"
Beispiel #16
0
def test_incrementing_minor_resets_micro_leaves_major():
    s = SemVer(1, 1, 1)
    s.increment_minor()
    assert s == "1.2.0"
Beispiel #17
0
        (1.0, 0, 1.0),
    ],
)
def test_floats_raise_valueerror(params):
    with pytest.raises(ValueError):
        SemVer(params[0], params[1], params[2])


def test_repr_gives_properly_formatted_string():
    assert repr(SemVer()) == "0.1.0"


@pytest.mark.parametrize(
    "p1,p2,p3",
    [
        (SemVer(), SemVer(), "0.1.0"),
        (
            SemVer(13, 24, 24, False, suffix="rc", suffix_number="24"),
            SemVer(13, 24, 24, False, suffix="rc", suffix_number="24"),
            "13.24.24rc24",
        ),
    ],
)
def test_equality(p1, p2, p3):
    assert p1 == p2 == p3


@pytest.mark.parametrize(
    "p1,p2",
    [
        (SemVer(), SemVer(0, 1, 2)),
Beispiel #18
0
def test_mixed_string_and_numeric_params(params, semver):
    assert SemVer(params[0], params[1], params[2]) == semver
Beispiel #19
0
def test_negative_numbers_raise_valueerror(params):
    with pytest.raises(ValueError):
        SemVer(params[0], params[1], params[2])
Beispiel #20
0
def test_incrementing_major_resets_minor_and_micro():
    s = SemVer()
    s.increment_major()
    assert s == "1.0.0"
Beispiel #21
0
def test_bad_param_in_fromstr_raises_valueerror(param):
    with pytest.raises(ValueError):
        SemVer.fromstr(param)