Files

127 lines
4.3 KiB
Python

import csv
import sys
import tempfile
import unittest
from pathlib import Path
SCRIPTS = Path(__file__).resolve().parents[1] / 'scripts'
sys.path.insert(0, str(SCRIPTS))
from run_context import ( # noqa: E402
RunContext,
append_run_manifest,
channel_data_dir,
ensure_new_run,
promote_release_baseline,
release_series_from_version,
)
class RunContextTests(unittest.TestCase):
def test_release_series_is_derived_from_version(self):
self.assertEqual(release_series_from_version('2.39.0-rc.1'), '2.39')
self.assertEqual(release_series_from_version('2.39.0'), '2.39')
with self.assertRaisesRegex(ValueError, 'Cannot derive'):
release_series_from_version('rc-only')
def test_release_data_dir_fills_series_from_version(self):
context = RunContext(
run_id='release-abc-1',
channel='release',
commit_hash='abc123',
date='2026-08-13T12:00:00',
release_version='2.39.0-rc.1',
)
self.assertEqual(
channel_data_dir(Path('data'), context),
Path('data/desktop/releases/2.39'),
)
def test_channels_are_physically_isolated(self):
root = Path('data')
release = RunContext(
run_id='release-abc-1',
channel='release',
commit_hash='abc123',
date='2026-08-13T12:00:00',
release_series='2.39',
release_version='2.39.0-rc.1',
)
pr = RunContext(
run_id='pr-123-1',
channel='pr',
commit_hash='def456',
date='2026-08-13T12:00:00',
pr_number='123',
)
self.assertEqual(
channel_data_dir(root, release),
Path('data/desktop/releases/2.39'),
)
self.assertEqual(channel_data_dir(root, pr), Path('data/desktop/pr/123'))
def test_duplicate_run_id_is_rejected(self):
context = RunContext(
run_id='nightly-abc-1',
channel='nightly',
commit_hash='abc123',
date='2026-08-13T12:00:00',
)
with tempfile.TemporaryDirectory() as temp:
data_dir = Path(temp)
append_run_manifest(data_dir, context)
with self.assertRaisesRegex(ValueError, 'already present'):
ensure_new_run(data_dir, context.run_id)
def test_final_release_can_be_promoted_once(self):
with tempfile.TemporaryDirectory() as temp:
root = Path(temp)
release_dir = root / 'releases' / '2.39'
baseline_dir = root / 'baselines'
release_dir.mkdir(parents=True)
context = RunContext(
run_id='release-final-1',
channel='release',
commit_hash='abc123',
date='2026-08-13T12:00:00',
build_label='2.39.0',
release_series='2.39',
release_version='2.39.0',
)
append_run_manifest(release_dir, context)
self._write_csv(
release_dir / 'summary_metrics.csv',
['run_id', 'commit_hash', 'total_tests', 'passed', 'failed', 'broken'],
[['release-final-1', 'abc123', '1', '1', '0', '0']],
)
self._write_csv(
release_dir / 'performance_metrics.csv',
['run_id', 'commit_hash', 'date', 'test_name', 'avg_time'],
[['release-final-1', 'abc123', context.date, 'wallet_open', '0.5']],
)
promoted = promote_release_baseline(
release_dir,
baseline_dir,
run_id=context.run_id,
)
self.assertEqual(promoted, 'abc123')
with self.assertRaisesRegex(ValueError, 'already has'):
promote_release_baseline(
release_dir,
baseline_dir,
run_id=context.run_id,
)
@staticmethod
def _write_csv(path: Path, fields: list[str], rows: list[list[str]]) -> None:
with open(path, 'w', newline='', encoding='utf-8') as handle:
writer = csv.writer(handle)
writer.writerow(fields)
writer.writerows(rows)
if __name__ == '__main__':
unittest.main()