diff --git a/tests/test_query_ingestion.py b/tests/test_query_ingestion.py index 616fd6b1..a2db6882 100644 --- a/tests/test_query_ingestion.py +++ b/tests/test_query_ingestion.py @@ -77,14 +77,90 @@ def test_include_txt_pattern(temp_directory: Path, sample_query: dict[str, Any]) assert not any(path.endswith(".py") for path in file_paths), "Should not include .py files" -# TODO: test with wrong include patterns: ['*.qwerty'] +def test_include_nonexistent_extension(temp_directory: Path, sample_query: dict[str, Any]) -> None: + sample_query["local_path"] = temp_directory + sample_query["include_patterns"] = ["*.query"] # Is a Non existant extension ? + + result = _scan_directory(temp_directory, query=sample_query) + assert result is not None, "Result should not be None" + + # Extract the files content & set file limit cap + files = _extract_files_content(query=sample_query, node=result, max_file_size=1_000_000) + # Verify no file processed with wrong extension + assert len(files) == 0, "Should not find any files with .qwerty extension" + + assert result["type"] == "directory" + assert result["file_count"] == 0 + assert result["dir_count"] == 0 + assert len(result["children"]) == 0 # single folder patterns -# TODO: test with include patterns: ['src/*'] -# TODO: test with include patterns: ['/src/*'] -# TODO: test with include patterns: ['/src/'] -# TODO: test with include patterns: ['/src*'] +def test_include_src_star_pattern(temp_directory: Path, sample_query: dict[str, Any]) -> None: + + sample_query["local_path"] = temp_directory + sample_query["include_patterns"] = ["src/*"] # Without leading slash + + result = _scan_directory(temp_directory, query=sample_query) + assert result is not None, "Result should not be None" + + files = _extract_files_content(query=sample_query, node=result, max_file_size=1_000_000) + assert len(files) == 4, "Should find all files under src directory" + + # Normalize paths to use platform-specific separator + file_paths = {str(Path(f["path"])) for f in files} # Using set and Path for normalization + expected_paths = { + str(Path("src/subfile1.txt")), + str(Path("src/subfile2.py")), + str(Path("src/subdir/file_subdir.txt")), + str(Path("src/subdir/file_subdir.py")), + } + assert file_paths == expected_paths, "Missing or unexpected files in result" + + +def test_include_src_recursive(temp_directory: Path, sample_query: dict[str, Any]) -> None: + + sample_query["local_path"] = temp_directory + sample_query["include_patterns"] = ["src/**"] # Use ** for recursive matching + + result = _scan_directory(temp_directory, query=sample_query) + assert result is not None, "Result should not be None" + + files = _extract_files_content(query=sample_query, node=result, max_file_size=1_000_000) + assert len(files) == 4, "Should find all files under src/" + + # Normalize paths to use platform-specific separator + file_paths = {str(Path(f["path"])) for f in files} + expected_paths = { + str(Path("src/subfile1.txt")), + str(Path("src/subfile2.py")), + str(Path("src/subdir/file_subdir.txt")), + str(Path("src/subdir/file_subdir.py")), + } + assert file_paths == expected_paths, "Missing or unexpected files in result" + + +def test_include_src_wildcard_prefix(temp_directory: Path, sample_query: dict[str, Any]) -> None: + + sample_query["local_path"] = temp_directory + sample_query["include_patterns"] = ["src*"] # Without leading slash + + result = _scan_directory(temp_directory, query=sample_query) + assert result is not None, "Result should not be None" + + files = _extract_files_content(query=sample_query, node=result, max_file_size=1_000_000) + assert len(files) == 4, "Should find all files under paths starting with src" + + # Normalize paths to use platform-specific separator + file_paths = {str(Path(f["path"])) for f in files} + expected_paths = { + str(Path("src/subfile1.txt")), + str(Path("src/subfile2.py")), + str(Path("src/subdir/file_subdir.txt")), + str(Path("src/subdir/file_subdir.py")), + } + assert file_paths == expected_paths, "Missing or unexpected files in result" + # multiple patterns # TODO: test with multiple include patterns: ['*.txt', '*.py']