114 lines
4.7 KiB
Python
114 lines
4.7 KiB
Python
from __future__ import annotations
|
|
|
|
import importlib.util
|
|
import json
|
|
import pathlib
|
|
import sys
|
|
import tempfile
|
|
import unittest
|
|
|
|
ROOT = pathlib.Path(__file__).resolve().parents[1]
|
|
SCRIPT = ROOT / 'scripts' / 'codebase_genome_status.py'
|
|
|
|
spec = importlib.util.spec_from_file_location('codebase_genome_status', str(SCRIPT))
|
|
mod = importlib.util.module_from_spec(spec)
|
|
sys.modules['codebase_genome_status'] = mod
|
|
spec.loader.exec_module(mod)
|
|
|
|
|
|
class TestCodebaseGenomeStatus(unittest.TestCase):
|
|
def test_fetch_org_repo_names_ignores_archived_and_dot_repos(self):
|
|
payloads = [
|
|
[
|
|
{'name': 'timmy-home', 'archived': False},
|
|
{'name': '.profile', 'archived': False},
|
|
{'name': 'old-repo', 'archived': True},
|
|
],
|
|
[],
|
|
]
|
|
|
|
class FakeResponse:
|
|
def __init__(self, payload):
|
|
self.payload = json.dumps(payload).encode('utf-8')
|
|
def read(self):
|
|
return self.payload
|
|
def __enter__(self):
|
|
return self
|
|
def __exit__(self, exc_type, exc, tb):
|
|
return False
|
|
|
|
def fake_urlopen(req, timeout=30):
|
|
return FakeResponse(payloads.pop(0))
|
|
|
|
with tempfile.TemporaryDirectory() as tmp:
|
|
token_file = pathlib.Path(tmp) / 'token'
|
|
token_file.write_text('demo-token')
|
|
from unittest.mock import patch
|
|
with patch('codebase_genome_status.urllib.request.urlopen', side_effect=fake_urlopen):
|
|
repos = mod.fetch_org_repo_names('Timmy_Foundation', 'https://forge.example.com', token_file)
|
|
self.assertEqual(repos, ['timmy-home'])
|
|
|
|
def test_collects_artifacts_tests_and_duplicates(self):
|
|
with tempfile.TemporaryDirectory() as tmp:
|
|
root = pathlib.Path(tmp)
|
|
(root / 'GENOME.md').write_text('# host genome\n')
|
|
(root / 'the-door-GENOME.md').write_text('# the-door\n')
|
|
(root / 'genomes' / 'the-nexus').mkdir(parents=True)
|
|
(root / 'genomes' / 'the-nexus' / 'GENOME.md').write_text('# the-nexus\n')
|
|
(root / 'genomes' / 'burn-fleet').mkdir(parents=True)
|
|
(root / 'genomes' / 'burn-fleet' / 'GENOME.md').write_text('# burn-fleet\n')
|
|
(root / 'genomes' / 'burn-fleet-GENOME.md').write_text('# burn-fleet duplicate\n')
|
|
(root / 'tests' / 'docs').mkdir(parents=True)
|
|
(root / 'tests' / 'docs' / 'test_the_door_genome.py').write_text('')
|
|
(root / 'tests' / 'test_the_nexus_genome.py').write_text('')
|
|
(root / 'tests' / 'test_codebase_genome_pipeline.py').write_text('')
|
|
|
|
summary = mod.build_status_summary(
|
|
repo_root=root,
|
|
expected_repos=['timmy-home', 'the-door', 'the-nexus', 'burn-fleet', 'wolf'],
|
|
state={'last_repo': 'the-nexus'},
|
|
)
|
|
|
|
self.assertEqual(summary['total_expected_repos'], 5)
|
|
self.assertEqual(summary['artifact_count'], 4)
|
|
self.assertEqual(summary['tested_artifact_count'], 3)
|
|
self.assertEqual(summary['next_uncovered_repo'], 'wolf')
|
|
self.assertEqual(summary['last_repo'], 'the-nexus')
|
|
self.assertEqual(summary['artifacts']['the-door']['has_test'], True)
|
|
self.assertEqual(summary['artifacts']['the-nexus']['has_test'], True)
|
|
self.assertEqual(summary['artifacts']['timmy-home']['has_test'], True)
|
|
self.assertIn('burn-fleet', summary['duplicates'])
|
|
self.assertEqual(summary['missing_repos'], ['wolf'])
|
|
|
|
def test_render_markdown_contains_required_sections(self):
|
|
summary = {
|
|
'generated_at': '2026-04-17T10:00:00Z',
|
|
'total_expected_repos': 3,
|
|
'artifact_count': 2,
|
|
'tested_artifact_count': 1,
|
|
'last_repo': 'the-door',
|
|
'next_uncovered_repo': 'wolf',
|
|
'missing_repos': ['wolf'],
|
|
'duplicates': {'burn-fleet': ['genomes/burn-fleet/GENOME.md', 'genomes/burn-fleet-GENOME.md']},
|
|
'artifacts': {
|
|
'timmy-home': {'artifact_paths': ['GENOME.md'], 'has_test': True},
|
|
'the-door': {'artifact_paths': ['the-door-GENOME.md'], 'has_test': False},
|
|
},
|
|
}
|
|
rendered = mod.render_markdown(summary)
|
|
for snippet in [
|
|
'# Codebase Genome Status',
|
|
'## Summary',
|
|
'## Coverage Matrix',
|
|
'## Missing Repo Artifacts',
|
|
'## Duplicate Artifact Paths',
|
|
'the-door-GENOME.md',
|
|
'genomes/burn-fleet/GENOME.md',
|
|
'wolf',
|
|
]:
|
|
self.assertIn(snippet, rendered)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|