113 lines
3.8 KiB
Python
113 lines
3.8 KiB
Python
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()
|