"""Test the release semver computation logic (D-057)."""

import pytest


def compute_next_version(latest_tag, is_milestone_complete):
    """Compute the next semver tag from the latest tag + milestone flag."""
    parts = latest_tag.lstrip("v").split(".")
    major, minor, patch = int(parts[0]), int(parts[1]), int(parts[2])
    if is_milestone_complete:
        minor += 1
        patch = 0
    else:
        patch += 1
    new_tag = f"v{major}.{minor}.{patch}"
    major_minor_tag = f"v{major}.{minor}"
    major_tag = f"v{major}"
    return new_tag, major_minor_tag, major_tag


class TestComputeNextVersion:
    def test_regular_phase_bumps_patch(self):
        assert compute_next_version("v1.6.0", False) == ("v1.6.1", "v1.6", "v1")

    def test_milestone_complete_bumps_minor(self):
        assert compute_next_version("v1.6.5", True) == ("v1.7.0", "v1.7", "v1")

    def test_milestone_complete_resets_patch(self):
        assert compute_next_version("v1.6.0", True) == ("v1.7.0", "v1.7", "v1")

    def test_major_bump(self):
        # Not implemented yet (major milestones are manual), but test the tag format
        tag, mj, m = compute_next_version("v2.3.4", True)
        assert tag == "v2.4.0"
        assert mj == "v2.4"
        assert m == "v2"

    def test_floating_tags_match_major_minor(self):
        tag, mj, m = compute_next_version("v1.7.3", False)
        assert mj == "v1.7"
        assert m == "v1"
        assert tag == "v1.7.4"

    def test_v1_tag_advances_with_minor(self):
        # When minor bumps, v1 tag still points at the latest (force-moved)
        tag, mj, m = compute_next_version("v1.6.5", True)
        assert m == "v1"
        assert tag == "v1.7.0"