Files
ITWorx_MCP_Hub-Public/tests/test_gitea_merge_version_compat.py

85 lines
2.7 KiB
Python

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()