95 lines
3.9 KiB
Python
95 lines
3.9 KiB
Python
from __future__ import annotations
|
|
|
|
import json
|
|
import unittest
|
|
|
|
from mais_humana.canonical_identity import (
|
|
CANONICAL_PROJECT_ID,
|
|
CURRENT_PROJECT_ID,
|
|
LEGACY_PLATAFORM_ALIAS,
|
|
IdentityIssueSeverity,
|
|
build_identity_graph,
|
|
identity_acceptance_rows,
|
|
identity_graph_markdown,
|
|
identity_graph_payload,
|
|
validate_identity_payload,
|
|
)
|
|
from mais_humana.cli import main
|
|
from tests.helpers import make_tmp
|
|
|
|
|
|
class CanonicalIdentityTests(unittest.TestCase):
|
|
def test_graph_accepts_canonical_current_and_plataform_alias(self) -> None:
|
|
graph = build_identity_graph(use_generated=False)
|
|
|
|
self.assertEqual(graph.canonicalize(CURRENT_PROJECT_ID), CANONICAL_PROJECT_ID)
|
|
self.assertEqual(graph.canonicalize(LEGACY_PLATAFORM_ALIAS), CANONICAL_PROJECT_ID)
|
|
self.assertEqual(graph.canonicalize(CANONICAL_PROJECT_ID), CANONICAL_PROJECT_ID)
|
|
|
|
record = graph.record_for(CURRENT_PROJECT_ID)
|
|
self.assertIsNotNone(record)
|
|
self.assertEqual(record.canonical_project_id if record else "", CANONICAL_PROJECT_ID)
|
|
self.assertIn("Canonical Identity Graph", identity_graph_markdown(graph))
|
|
|
|
def test_payload_validation_warns_for_alias_in_canonical_field(self) -> None:
|
|
graph = build_identity_graph(use_generated=False)
|
|
result = validate_identity_payload(
|
|
{
|
|
"ownerPlatformId": CURRENT_PROJECT_ID,
|
|
"projectId": LEGACY_PLATAFORM_ALIAS,
|
|
"canonicalProjectId": CANONICAL_PROJECT_ID,
|
|
},
|
|
graph=graph,
|
|
)
|
|
|
|
self.assertTrue(result.ok)
|
|
self.assertIn(CANONICAL_PROJECT_ID, result.canonical_project_ids)
|
|
self.assertIn(CURRENT_PROJECT_ID, result.accepted_aliases)
|
|
self.assertTrue(any(issue.severity == IdentityIssueSeverity.WARNING for issue in result.issues))
|
|
|
|
def test_payload_validation_blocks_unknown_identifier(self) -> None:
|
|
result = validate_identity_payload({"ownerPlatformId": "repo-inexistente"}, graph=build_identity_graph(use_generated=False))
|
|
|
|
self.assertFalse(result.ok)
|
|
self.assertEqual(result.blockers[0].severity, IdentityIssueSeverity.BLOCKER)
|
|
|
|
def test_generated_registry_has_mcp_acceptance_cases(self) -> None:
|
|
graph = build_identity_graph(use_generated=True)
|
|
rows = identity_acceptance_rows(graph)
|
|
payload = identity_graph_payload(graph, limit_cases=3)
|
|
|
|
self.assertGreaterEqual(graph.records_count, 15)
|
|
self.assertGreaterEqual(len(graph.acceptance_cases), 4000)
|
|
self.assertEqual(payload["maisHumanaCanonicalProjectId"], CANONICAL_PROJECT_ID)
|
|
self.assertIn("ownerPlatformId", {row[4] for row in rows[1:100]})
|
|
|
|
def test_cli_writes_identity_graph_artifacts(self) -> None:
|
|
root = make_tmp()
|
|
project = root / "tudo-para-ia-mais-humana"
|
|
central = root / "central" / "15_repo_tudo-para-ia-mais-humana-platform"
|
|
|
|
code = main(
|
|
[
|
|
"canonical-identity",
|
|
"--project-root",
|
|
str(project),
|
|
"--central-platform-folder",
|
|
str(central),
|
|
"--no-generated",
|
|
]
|
|
)
|
|
|
|
self.assertEqual(code, 0)
|
|
graph_json = project / "dados" / "canonical-identity-graph.json"
|
|
self.assertTrue(graph_json.exists())
|
|
self.assertTrue((project / "matrizes" / "canonical-identity-graph.csv").exists())
|
|
self.assertTrue((project / "matrizes" / "canonical-identity-acceptance-cases.csv").exists())
|
|
self.assertTrue((project / "ecossistema" / "CANONICAL-IDENTITY-GRAPH.md").exists())
|
|
self.assertTrue((central / "reports" / "EXECUTADO__canonical-identity-graph.md").exists())
|
|
payload = json.loads(graph_json.read_text(encoding="utf-8"))
|
|
self.assertEqual(payload["maisHumanaCanonicalProjectId"], CANONICAL_PROJECT_ID)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|