airfRANS-model-exploration/tests/test_cli.py

114 lines
3.8 KiB
Python
Raw Normal View History

2026-07-21 08:32:30 +00:00
from __future__ import annotations
import json
import subprocess
import sys
import tempfile
import unittest
from pathlib import Path
def make_raw_subset(root: Path) -> tuple[Path, Path, int, int]:
data_dir = root / "OF_dataset"
sim_a_file = data_dir / "sim_a" / "field.txt"
sim_b_file = data_dir / "sim_b" / "nested" / "field.txt"
sim_a_file.parent.mkdir(parents=True)
sim_b_file.parent.mkdir(parents=True)
sim_a_file.write_text("abc")
sim_b_file.write_text("defgh")
expected_bytes = 8
expected_files = 2
manifest_path = root / "OF_dataset_subset_manifest.json"
manifest_path.write_text(
json.dumps(
{
"source_url": "https://example.invalid/OF_dataset.zip",
"source_zip_bytes": 0,
"sample_seed": 123,
"sample_method": "test sample",
"requested_simulations": 2,
"extracted_simulations": 2,
"expected_extracted_bytes": expected_bytes,
"actual_file_count_under_target": expected_files,
"target_root": str(data_dir),
"simulations": [{"name": "sim_a"}, {"name": "sim_b"}],
}
)
)
return data_dir, manifest_path, expected_bytes, expected_files
class InspectRawCliTests(unittest.TestCase):
def run_cli(self, *args: str) -> subprocess.CompletedProcess[str]:
return subprocess.run(
[sys.executable, "-m", "airfrans_frontier.cli", *args],
text=True,
capture_output=True,
check=False,
)
def test_inspect_raw_success_reports_manifest_match(self) -> None:
with tempfile.TemporaryDirectory() as tmp:
data_dir, manifest_path, _, _ = make_raw_subset(Path(tmp))
result = self.run_cli(
"inspect-raw",
"--data-dir",
str(data_dir),
"--manifest",
str(manifest_path),
"--sample-limit",
"2",
)
self.assertEqual(result.returncode, 0)
self.assertIn("status: ok", result.stdout)
self.assertIn("simulations: 2 / 2", result.stdout)
self.assertIn("files: 2 / 2", result.stdout)
self.assertIn("bytes: 8 / 8", result.stdout)
self.assertIn("- sim_a", result.stdout)
self.assertIn("- sim_b", result.stdout)
self.assertEqual(result.stderr, "")
def test_inspect_raw_missing_data_dir_is_clear_error(self) -> None:
with tempfile.TemporaryDirectory() as tmp:
_, manifest_path, _, _ = make_raw_subset(Path(tmp))
missing_dir = Path(tmp) / "missing"
result = self.run_cli(
"inspect-raw",
"--data-dir",
str(missing_dir),
"--manifest",
str(manifest_path),
)
self.assertEqual(result.returncode, 1)
self.assertEqual(result.stdout, "")
self.assertIn("error: Raw data directory not found:", result.stderr)
def test_inspect_raw_manifest_mismatch_returns_one(self) -> None:
with tempfile.TemporaryDirectory() as tmp:
data_dir, manifest_path, _, _ = make_raw_subset(Path(tmp))
unexpected_file = data_dir / "sim_c" / "field.txt"
unexpected_file.parent.mkdir(parents=True)
unexpected_file.write_text("unexpected")
result = self.run_cli(
"inspect-raw",
"--data-dir",
str(data_dir),
"--manifest",
str(manifest_path),
)
self.assertEqual(result.returncode, 1)
self.assertIn("status: mismatch", result.stdout)
self.assertIn("unexpected_simulations:", result.stdout)
self.assertEqual(result.stderr, "")
if __name__ == "__main__":
unittest.main()