import pytest from giant.data.loader import find_parquet_files def _touch(path): path.parent.mkdir(parents=True, exist_ok=True) path.touch() return path def test_find_parquet_files_single_file(tmp_path): f = _touch(tmp_path / "shard-000.parquet") assert find_parquet_files(f) == [f] def test_find_parquet_files_directory_glob(tmp_path): a = _touch(tmp_path / "shard-000.parquet") b = _touch(tmp_path / "shard-001.parquet") _touch(tmp_path / "not_a_parquet.root") assert find_parquet_files(tmp_path) == sorted([a, b]) def test_find_parquet_files_empty_directory_raises(tmp_path): with pytest.raises(FileNotFoundError): find_parquet_files(tmp_path) def test_manifest_resolves_relative_to_its_own_directory(tmp_path): target = _touch(tmp_path / "processed" / "pbwo4" / "shard-000.parquet") manifest_dir = tmp_path / "pools" / "pbwo4" manifest_dir.mkdir(parents=True) manifest = manifest_dir / "full.manifest" manifest.write_text("../../processed/pbwo4/shard-000.parquet\n") assert find_parquet_files(manifest) == [target.resolve()] def test_manifest_skips_blank_lines_and_comments(tmp_path): target = _touch(tmp_path / "shard-000.parquet") manifest = tmp_path / "full.manifest" manifest.write_text("\n# a comment\nshard-000.parquet\n\n") assert find_parquet_files(manifest) == [target.resolve()] def test_manifest_missing_file_raises(tmp_path): manifest = tmp_path / "full.manifest" manifest.write_text("does_not_exist.parquet\n") with pytest.raises(FileNotFoundError): find_parquet_files(manifest) def test_manifest_with_no_entries_raises(tmp_path): manifest = tmp_path / "full.manifest" manifest.write_text("# only comments\n") with pytest.raises(FileNotFoundError): find_parquet_files(manifest)