feat: fundar plataforma mais humana
This commit is contained in:
86
tests/test_scanner_matrix.py
Normal file
86
tests/test_scanner_matrix.py
Normal file
@@ -0,0 +1,86 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
from mais_humana.catalog import HUMAN_PROFILES, get_platform
|
||||
from mais_humana.matrix import build_matrix, build_platform_report, score_cell
|
||||
from mais_humana.models import EvidenceKind
|
||||
from mais_humana.scanner import ScanOptions, scan_platform
|
||||
from tests.helpers import make_tmp
|
||||
|
||||
|
||||
class ScannerMatrixTests(unittest.TestCase):
|
||||
def make_repo(self, root: Path, repo_name: str) -> Path:
|
||||
repo = root / repo_name
|
||||
repo.mkdir()
|
||||
(repo / "src").mkdir()
|
||||
(repo / "tests").mkdir()
|
||||
(repo / "README.md").write_text(
|
||||
"# Identity\n\nhealth readiness openapi RBAC credentialRef audit trace panelReady sameSource",
|
||||
encoding="utf-8",
|
||||
)
|
||||
(repo / "package.json").write_text(
|
||||
json.dumps(
|
||||
{
|
||||
"scripts": {
|
||||
"test": "node --test",
|
||||
"build": "tsc",
|
||||
"smoke:local": "node src/index.js",
|
||||
}
|
||||
}
|
||||
),
|
||||
encoding="utf-8",
|
||||
)
|
||||
(repo / "src" / "index.ts").write_text(
|
||||
"""
|
||||
export function health() { return { ok: true, readiness: "ready" }; }
|
||||
export const openapi = { path: "/openapi" };
|
||||
export const routes = [{ path: "/identity/health" }, { path: "/identity/contracts" }];
|
||||
export const security = { rbac: true, credentialRef: "safe" };
|
||||
""",
|
||||
encoding="utf-8",
|
||||
)
|
||||
(repo / "tests" / "identity.test.ts").write_text("test('health', () => true)\n", encoding="utf-8")
|
||||
return repo
|
||||
|
||||
def test_scan_platform_collects_scripts_metrics_and_evidence(self) -> None:
|
||||
root = make_tmp()
|
||||
self.make_repo(root, "tudo-para-ia-identity-platform")
|
||||
scan = scan_platform(root, get_platform("identity"), ScanOptions(max_file_bytes=50_000))
|
||||
self.assertTrue(scan.exists)
|
||||
self.assertFalse(scan.git_present)
|
||||
self.assertGreater(scan.code_lines, 0)
|
||||
self.assertGreaterEqual(len(scan.scripts), 3)
|
||||
kinds = {evidence.kind for evidence in scan.evidence}
|
||||
self.assertIn(EvidenceKind.TEST, kinds)
|
||||
self.assertIn(EvidenceKind.OPENAPI, kinds)
|
||||
self.assertIn(EvidenceKind.SECURITY, kinds)
|
||||
self.assertIn(EvidenceKind.OBSERVABILITY, kinds)
|
||||
|
||||
def test_matrix_scores_expected_profile_above_unrelated_baseline(self) -> None:
|
||||
root = make_tmp()
|
||||
self.make_repo(root, "tudo-para-ia-identity-platform")
|
||||
scan = scan_platform(root, get_platform("identity"))
|
||||
admin = next(profile for profile in HUMAN_PROFILES if profile.profile_id == "administrador_empresa")
|
||||
financeiro = next(profile for profile in HUMAN_PROFILES if profile.profile_id == "financeiro")
|
||||
admin_cell = score_cell(scan, admin)
|
||||
finance_cell = score_cell(scan, financeiro)
|
||||
self.assertGreater(admin_cell.score, finance_cell.score)
|
||||
self.assertTrue(admin_cell.strengths)
|
||||
self.assertTrue(admin_cell.gaps)
|
||||
|
||||
def test_platform_report_contains_recommendations_for_missing_git(self) -> None:
|
||||
root = make_tmp()
|
||||
self.make_repo(root, "tudo-para-ia-identity-platform")
|
||||
scan = scan_platform(root, get_platform("identity"))
|
||||
cells = build_matrix((scan,))
|
||||
report = build_platform_report(scan, cells)
|
||||
titles = [item.title for item in report.recommendations]
|
||||
self.assertIn("Inicializar Git e configurar origin correto", titles)
|
||||
self.assertGreater(report.average_score, 0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user