import runpy from pathlib import Path from serato_doctor.crate_parser import load_library_crates from serato_doctor.models.crate import CrateKind from serato_doctor.models.library import Library from serato_doctor.scanner import scan_audio def test_generated_sample_library_has_expected_scenario(tmp_path): generator_path = ( Path(__file__).parents[1] / "samples" / "small-library" / "generate.py" ) build_sample = runpy.run_path(str(generator_path))["build_sample"] sample_root = build_sample(tmp_path / "sample") crates = load_library_crates(sample_root / "Serato" / "_Serato_") tracks = scan_audio(sample_root / "Music") library = Library.from_crates(crates, tracks) results = library.reconcile_by_filename() missing = { result.reference.filename for result in results if not result.exists_by_filename } assert len(list((sample_root / "Serato").rglob("*.crate"))) == 7 assert len(library.references) == 13 assert len(tracks) == 10 assert missing == {"Missing.mp3", "Old Name.mp3"} assert sum(crate.kind is CrateKind.STATIC for crate in crates) == 5 assert sum(crate.kind is CrateKind.SMART for crate in crates) == 2