164 lines
5.4 KiB
Python
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
|