test: 7 agents — plugins ~158 tests, extractor 98-100%, dashboard routes 99-100%, git services 94-100%, services 94-100%, dataset_review 100%. Fix test_api_key_routes.py sys.modules pollution
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
# #region Test.Git.RemoteProviders.Coverage [C:3] [TYPE Module] [SEMANTICS test, git, remote, coverage, error, json]
|
||||
# @BRIEF Additional edge coverage for GitServiceRemoteMixin — JSON parse exception branches in GitLab create/mr.
|
||||
# @RELATION BINDS_TO -> [GitServiceRemoteMixin]
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent.parent.parent / "src"))
|
||||
|
||||
from unittest.mock import AsyncMock, MagicMock
|
||||
|
||||
import pytest
|
||||
from fastapi import HTTPException
|
||||
|
||||
from src.services.git._remote_providers import GitServiceGitlabMixin
|
||||
|
||||
|
||||
class TestableGitGitlab(GitServiceGitlabMixin):
|
||||
def __init__(self):
|
||||
self._http_client = AsyncMock()
|
||||
|
||||
def _normalize_git_server_url(self, raw_url):
|
||||
return (raw_url or "").strip().rstrip("/")
|
||||
|
||||
def _parse_remote_repo_identity(self, remote_url):
|
||||
from urllib.parse import urlparse
|
||||
normalized = str(remote_url or "").strip()
|
||||
path = urlparse(normalized).path.strip("/")
|
||||
if path.endswith(".git"):
|
||||
path = path[:-4]
|
||||
parts = [s for s in path.split("/") if s]
|
||||
owner, repo = parts[0], parts[-1]
|
||||
namespace = "/".join(parts[:-1])
|
||||
return {"owner": owner, "repo": repo, "namespace": namespace, "full_name": f"{namespace}/{repo}"}
|
||||
|
||||
|
||||
class TestGitLabCreateRepoCoverage:
|
||||
"""Cover JSON parse exception in create_gitlab_repository."""
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_error_response_json_parse_raises(self):
|
||||
"""API error, JSON parse fails → uses raw text."""
|
||||
svc = TestableGitGitlab()
|
||||
resp = MagicMock()
|
||||
resp.status_code = 400
|
||||
resp.text = "Bad Request"
|
||||
resp.json.side_effect = ValueError("no json")
|
||||
svc._http_client.post.return_value = resp
|
||||
|
||||
with pytest.raises(HTTPException, match="Bad Request"):
|
||||
await svc.create_gitlab_repository("https://gitlab.com", "pat", "repo")
|
||||
|
||||
|
||||
class TestGitLabCreateMRCoverage:
|
||||
"""Cover JSON parse exception in create_gitlab_merge_request."""
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_error_response_json_parse_raises(self):
|
||||
"""API error, JSON parse fails → uses raw text."""
|
||||
svc = TestableGitGitlab()
|
||||
resp = MagicMock()
|
||||
resp.status_code = 400
|
||||
resp.text = "Bad Request"
|
||||
resp.json.side_effect = ValueError("no json")
|
||||
svc._http_client.post.return_value = resp
|
||||
|
||||
with pytest.raises(HTTPException, match="Bad Request"):
|
||||
await svc.create_gitlab_merge_request(
|
||||
"https://gitlab.com", "pat",
|
||||
"https://gitlab.com/org/repo.git",
|
||||
"feature", "main", "Title",
|
||||
)
|
||||
# #endregion Test.Git.RemoteProviders.Coverage
|
||||
Reference in New Issue
Block a user