Files
ss-tools/backend/tests/test_models_git.py

164 lines
5.4 KiB
Python

# #region Test.Models.Git [C:2] [TYPE Module] [SEMANTICS test,models,git,sqlalchemy]
# @BRIEF Tests for models/git.py — GitServerConfig, GitRepository, DeploymentEnvironment,
# and enums GitProvider, GitStatus, SyncStatus.
# @RELATION BINDS_TO -> [GitModels]
# @TEST_EDGE: missing_field -> optional defaults
# @TEST_EDGE: serialization -> SQLAlchemy column attributes exist
from datetime import datetime, timezone
import pytest
class TestGitEnums:
"""Git enums — GitProvider, GitStatus, SyncStatus."""
def test_git_provider_values(self):
from src.models.git import GitProvider
assert GitProvider.GITHUB == "GITHUB"
assert GitProvider.GITLAB == "GITLAB"
assert GitProvider.GITEA == "GITEA"
def test_git_status_values(self):
from src.models.git import GitStatus
assert GitStatus.CONNECTED == "CONNECTED"
assert GitStatus.FAILED == "FAILED"
assert GitStatus.UNKNOWN == "UNKNOWN"
def test_sync_status_values(self):
from src.models.git import SyncStatus
assert SyncStatus.CLEAN == "CLEAN"
assert SyncStatus.DIRTY == "DIRTY"
assert SyncStatus.CONFLICT == "CONFLICT"
class TestGitServerConfig:
"""GitServerConfig — SQLAlchemy model for Git server connection."""
def test_table_name(self):
from src.models.git import GitServerConfig
assert GitServerConfig.__tablename__ == "git_server_configs"
def test_columns_exist(self):
from src.models.git import GitProvider, GitServerConfig, GitStatus
obj = GitServerConfig(
id="cfg-1",
name="My GitHub",
provider=GitProvider.GITHUB,
url="https://github.com/org",
pat="ghp_abc123",
status=GitStatus.UNKNOWN,
)
assert obj.name == "My GitHub"
assert obj.provider == GitProvider.GITHUB
assert obj.status == GitStatus.UNKNOWN
def test_default_branch(self):
from src.models.git import GitProvider, GitServerConfig, GitStatus
obj = GitServerConfig(
id="cfg-2", name="Test", provider=GitProvider.GITLAB,
url="https://gitlab.com/org", pat="abc",
default_branch="main", status=GitStatus.CONNECTED,
)
assert obj.default_branch == "main"
def test_with_repository(self):
from src.models.git import GitProvider, GitServerConfig, GitStatus
obj = GitServerConfig(
id="cfg-3", name="Gitea", provider=GitProvider.GITEA,
url="https://gitea.local", pat="tok",
default_repository="org/repo", status=GitStatus.CONNECTED,
)
assert obj.default_repository == "org/repo"
def test_last_validated(self):
from src.models.git import GitProvider, GitServerConfig, GitStatus
ts = datetime.now()
obj = GitServerConfig(
id="cfg-4", name="GH", provider=GitProvider.GITHUB,
url="https://github.com", pat="tok",
status=GitStatus.CONNECTED, last_validated=ts,
)
assert obj.last_validated == ts
class TestGitRepository:
"""GitRepository — SQLAlchemy model for local Git repo tracking."""
def test_table_name(self):
from src.models.git import GitRepository
assert GitRepository.__tablename__ == "git_repositories"
def test_columns_exist(self):
from src.models.git import GitRepository, SyncStatus
obj = GitRepository(
id="repo-1",
dashboard_id=42,
config_id="cfg-1",
remote_url="https://github.com/org/repo.git",
local_path="/repos/repo",
sync_status=SyncStatus.CLEAN,
)
assert obj.dashboard_id == 42
assert obj.config_id == "cfg-1"
assert obj.remote_url == "https://github.com/org/repo.git"
assert obj.local_path == "/repos/repo"
def test_current_branch(self):
from src.models.git import GitRepository, SyncStatus
obj = GitRepository(
id="repo-2", dashboard_id=99, config_id="cfg-2",
remote_url="https://example.com/repo.git",
local_path="/repos/repo",
current_branch="feature/test",
sync_status=SyncStatus.DIRTY,
)
assert obj.current_branch == "feature/test"
assert obj.sync_status == SyncStatus.DIRTY
class TestDeploymentEnvironment:
"""DeploymentEnvironment — SQLAlchemy model for Superset deployment target."""
def test_table_name(self):
from src.models.git import DeploymentEnvironment
assert DeploymentEnvironment.__tablename__ == "deployment_environments"
def test_columns_exist(self):
from src.models.git import DeploymentEnvironment
obj = DeploymentEnvironment(
id="deploy-1",
name="Production",
superset_url="https://superset.example.com",
superset_token="token123",
is_active=True,
)
assert obj.name == "Production"
assert obj.superset_url == "https://superset.example.com"
assert obj.is_active is True
def test_inactive(self):
from src.models.git import DeploymentEnvironment
obj = DeploymentEnvironment(
id="deploy-2",
name="Staging",
superset_url="https://staging.example.com",
superset_token="tok",
is_active=False,
)
assert obj.is_active is False
# #endregion Test.Models.Git