98 lines
4.0 KiB
Python
98 lines
4.0 KiB
Python
from __future__ import annotations
|
|
|
|
import unittest
|
|
|
|
from mais_humana.repository_mesh import MeshEnvironment, MeshEnvironmentKind, RepositoryTarget, build_mesh_report
|
|
from mais_humana.repository_mesh_naming import (
|
|
NamingStatus,
|
|
candidate_names,
|
|
central_folder_for_name,
|
|
decide_naming,
|
|
naming_rows,
|
|
plataform_to_platform,
|
|
platform_to_plataform,
|
|
)
|
|
from mais_humana.repository_mesh_reconciliation import ReconciliationStatus, build_reconciliation_plan
|
|
from tests.helpers import make_tmp
|
|
from tests.test_repository_mesh import FakeGit, make_repo
|
|
|
|
|
|
class RepositoryMeshNamingTests(unittest.TestCase):
|
|
def test_platform_and_plataform_helpers_are_reversible_for_suffixes(self) -> None:
|
|
self.assertEqual(platform_to_plataform("tudo-para-ia-ui-platform"), "tudo-para-ia-ui-plataform")
|
|
self.assertEqual(plataform_to_platform("tudo-para-ia-docs-plataform"), "tudo-para-ia-docs-platform")
|
|
self.assertEqual(platform_to_plataform("sem-sufixo"), "sem-sufixo")
|
|
self.assertEqual(central_folder_for_name("Tudo Para IA UI Platform", index=14), "14_repo_tudo-para-ia-ui-platform")
|
|
|
|
def test_candidate_names_include_expected_alias_canonical_and_suffix_variant(self) -> None:
|
|
target = RepositoryTarget(
|
|
"alpha-platform",
|
|
"admin/alpha-platform",
|
|
"alpha-platform",
|
|
"01_alpha",
|
|
aliases=("alpha",),
|
|
canonical_name="alpha-plataform",
|
|
requires_nominal_reconciliation=True,
|
|
)
|
|
self.assertEqual(
|
|
candidate_names(target),
|
|
("alpha-platform", "alpha-plataform", "alpha",),
|
|
)
|
|
|
|
def test_decide_naming_marks_exact_alias_missing_and_conflict(self) -> None:
|
|
root = make_tmp()
|
|
target = RepositoryTarget("alpha-new", "admin/alpha", "alpha-new", "01_alpha", aliases=("alpha-old",))
|
|
|
|
self.assertEqual(decide_naming(root, target).status, NamingStatus.MISSING)
|
|
|
|
(root / "alpha-old").mkdir()
|
|
alias = decide_naming(root, target)
|
|
self.assertEqual(alias.status, NamingStatus.ALIAS)
|
|
self.assertEqual(alias.selected_name, "alpha-old")
|
|
|
|
(root / "alpha-new").mkdir()
|
|
conflict = decide_naming(root, target)
|
|
self.assertEqual(conflict.status, NamingStatus.CONFLICT)
|
|
|
|
target = RepositoryTarget(
|
|
"beta-new",
|
|
"admin/beta",
|
|
"beta-new",
|
|
"01_beta",
|
|
aliases=("beta-old",),
|
|
canonical_name="beta-canonical",
|
|
)
|
|
(root / "beta-old").mkdir()
|
|
(root / "beta-canonical").mkdir()
|
|
conflict = decide_naming(root, target)
|
|
self.assertEqual(conflict.status, NamingStatus.CONFLICT)
|
|
self.assertIn("CONFLICT", "\n".join(",".join(row) for row in naming_rows((conflict,))).upper())
|
|
|
|
def test_reconciliation_blocks_when_two_alias_variants_exist(self) -> None:
|
|
root = make_tmp()
|
|
repo_a = make_repo(root, "alpha-old")
|
|
repo_b = make_repo(root, "alpha-canonical")
|
|
fake = FakeGit()
|
|
fake.set_repo(repo_a, remote="https://git.ami.app.br/admin/alpha.git")
|
|
fake.set_repo(repo_b, remote="https://git.ami.app.br/admin/alpha.git")
|
|
target = RepositoryTarget(
|
|
"alpha-new",
|
|
"admin/alpha",
|
|
"alpha-new",
|
|
"01_alpha",
|
|
aliases=("alpha-old",),
|
|
canonical_name="alpha-canonical",
|
|
requires_nominal_reconciliation=True,
|
|
)
|
|
env = MeshEnvironment("primary", MeshEnvironmentKind.WINDOWS_PRIMARY, str(root), "test")
|
|
report = build_mesh_report(root, targets=(target,), environments=(env,), runner=fake)
|
|
plan = build_reconciliation_plan(report)
|
|
receipt = plan.receipts[0]
|
|
self.assertEqual(receipt.status, ReconciliationStatus.MANUAL_DECISION_REQUIRED)
|
|
self.assertEqual(receipt.naming_decisions[0].status, NamingStatus.CONFLICT)
|
|
self.assertTrue(any("conflito nominal" in operation.title.lower() for operation in receipt.operations))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|