from __future__ import annotations from uuid import UUID import pytest from connectors.gitea import FakeGiteaServer from packages.connector_kit import ( GiteaClient, GiteaError, GiteaSettings, RegisteredRepository, StaticTokenProvider, ) PROJECT_ID = UUID("11111111-1111-1111-1111-111111111111") def _client(version: str) -> tuple[GiteaClient, FakeGiteaServer, RegisteredRepository]: fixture = FakeGiteaServer(gitea_version=version) client = GiteaClient( GiteaSettings( base_url="http://gitea.test", token_reference="docker-secret://gitea_mcp_token", # noqa: S106 allow_insecure_http_for_tests=True, ), StaticTokenProvider("fixture-token"), transport=fixture.transport(), ) repository = RegisteredRepository( repository_ref="hub-repository", project_id=PROJECT_ID, owner="acme", name="hub", source_uri="itworx-git://hub/hub-repository", private=True, ) return client, fixture, repository @pytest.mark.parametrize( ("version", "expected_key"), [ ("1.14.0", "Do"), ("1.14.7", "Do"), ("1.25.5", "Do"), ("1.26.4", "do"), ("1.27.0", "do"), ("1.27.2", "do"), ("28.0.0", "do"), ("28.1.3", "do"), ], ) def test_supported_merge_versions_use_one_version_probe_and_one_write( version: str, expected_key: str ) -> None: client, fixture, repository = _client(version) try: client.merge_pull_request(repository, 7, method="squash", head_commit_id="e" * 40) assert fixture.recorded_paths.count("/api/v1/version") == 1 assert fixture.recorded_paths.count("/api/v1/repos/acme/hub/pulls/7/merge") == 1 merge_body = next( body for body in fixture.recorded_bodies if body.get(expected_key) == "squash" ) assert merge_body["force_merge"] is False assert merge_body["merge_when_checks_succeed"] is False assert merge_body["delete_branch_after_merge"] is False assert ("Do" if expected_key == "do" else "do") not in merge_body finally: client.close() def test_unknown_future_version_fails_before_merge_write() -> None: client, fixture, repository = _client("29.0.0") try: with pytest.raises( GiteaError, match="1.14, 1.25, 1.26, 1.27, or 28.x", ) as raised: client.merge_pull_request(repository, 7, method="squash", head_commit_id="e" * 40) assert raised.value.code == "GITEA_VERSION_UNSUPPORTED" assert "/api/v1/repos/acme/hub/pulls/7/merge" not in fixture.recorded_paths finally: client.close()