test(FN-011): complete Step 7 — tests for provider, credentials, and operations
Fusion-Task-Id: FN-011 Fusion-Task-Lineage: 4a9aca6f-9d91-43aa-8d2a-d59657c1541a
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
"""Tests for Git provider abstraction and types."""
|
||||
|
||||
from typing import Any
|
||||
|
||||
import pytest
|
||||
|
||||
from app.git.provider import GitProvider
|
||||
from app.git.types import ConnectionStatus, CredentialKind, ProviderKind, SshKeyStatus
|
||||
|
||||
|
||||
class MinimalGitProvider(GitProvider):
|
||||
"""Concrete subclass for testing."""
|
||||
|
||||
def get_kind(self) -> ProviderKind:
|
||||
return ProviderKind.generic
|
||||
|
||||
def validate_connection(self, git_url: str, credential_id: str) -> ConnectionStatus:
|
||||
return ConnectionStatus.connected
|
||||
|
||||
def list_repositories(self, credential_id: str) -> list[dict[str, Any]]:
|
||||
return []
|
||||
|
||||
def create_deploy_key(self, git_url: str, public_key: str) -> str:
|
||||
return "key-id"
|
||||
|
||||
def delete_deploy_key(self, git_url: str, deploy_key_id: str) -> None:
|
||||
return None
|
||||
|
||||
def get_default_branch(self, git_url: str, credential_id: str) -> str:
|
||||
return "main"
|
||||
|
||||
|
||||
def test_git_provider_cannot_be_instantiated_directly() -> None:
|
||||
with pytest.raises(TypeError):
|
||||
GitProvider() # type: ignore[abstract]
|
||||
|
||||
|
||||
def test_minimal_git_provider_implements_all_methods() -> None:
|
||||
provider = MinimalGitProvider()
|
||||
assert provider.get_kind() == ProviderKind.generic
|
||||
status = provider.validate_connection("https://example.com/repo.git", "cred-id")
|
||||
assert status == ConnectionStatus.connected
|
||||
assert provider.list_repositories("cred-id") == []
|
||||
assert provider.create_deploy_key("https://example.com/repo.git", "ssh-rsa AAAA") == "key-id"
|
||||
provider.delete_deploy_key("https://example.com/repo.git", "key-id")
|
||||
assert provider.get_default_branch("https://example.com/repo.git", "cred-id") == "main"
|
||||
|
||||
|
||||
@pytest.mark.parametrize("member", ["github", "gitlab", "gitea", "forgejo", "generic"])
|
||||
def test_provider_kind_membership(member: str) -> None:
|
||||
assert member in ProviderKind
|
||||
|
||||
|
||||
@pytest.mark.parametrize("member", ["ssh_key", "access_token"])
|
||||
def test_credential_kind_membership(member: str) -> None:
|
||||
assert member in CredentialKind
|
||||
|
||||
|
||||
@pytest.mark.parametrize("member", ["pending", "connected", "disconnected", "error"])
|
||||
def test_connection_status_membership(member: str) -> None:
|
||||
assert member in ConnectionStatus
|
||||
|
||||
|
||||
@pytest.mark.parametrize("member", ["generated", "registered", "rotating", "revoked"])
|
||||
def test_ssh_key_status_membership(member: str) -> None:
|
||||
assert member in SshKeyStatus
|
||||
Reference in New Issue
Block a user