85 lines
2.7 KiB
Python
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()
|