Skip to main content
Glama
test_file_discovery.py6.61 kB
"""Unit tests for File Discovery component. Tests discovery of markdown checklist files in the configured directory. """ from __future__ import annotations from typing import TYPE_CHECKING if TYPE_CHECKING: from pathlib import Path class TestFileDiscovery: """Tests for File Discovery functionality.""" def test_discover_markdown_files(self, temp_dir: Path) -> None: """Test discovering .md files in directory.""" from sso_mcp_server.checklists.discovery import discover_checklists # Create test files (temp_dir / "checklist1.md").write_text("# Checklist 1") (temp_dir / "checklist2.md").write_text("# Checklist 2") files = discover_checklists(temp_dir) assert len(files) == 2 filenames = {f.name for f in files} assert "checklist1.md" in filenames assert "checklist2.md" in filenames def test_discover_ignores_non_markdown_files(self, temp_dir: Path) -> None: """Test that discovery ignores non-.md files.""" from sso_mcp_server.checklists.discovery import discover_checklists # Create mixed files (temp_dir / "checklist.md").write_text("# Valid") (temp_dir / "readme.txt").write_text("Invalid") (temp_dir / "config.json").write_text("{}") (temp_dir / "script.py").write_text("# Python") files = discover_checklists(temp_dir) assert len(files) == 1 assert files[0].name == "checklist.md" def test_discover_returns_empty_for_missing_directory(self, temp_dir: Path) -> None: """Test that discovery returns empty list for missing directory.""" from sso_mcp_server.checklists.discovery import discover_checklists missing_dir = temp_dir / "nonexistent" files = discover_checklists(missing_dir) assert files == [] def test_discover_returns_empty_for_empty_directory(self, temp_dir: Path) -> None: """Test that discovery returns empty list for empty directory.""" from sso_mcp_server.checklists.discovery import discover_checklists empty_dir = temp_dir / "empty" empty_dir.mkdir() files = discover_checklists(empty_dir) assert files == [] def test_discover_does_not_recurse_subdirectories(self, temp_dir: Path) -> None: """Test that discovery does not recurse into subdirectories by default.""" from sso_mcp_server.checklists.discovery import discover_checklists # Create files in root and subdirectory (temp_dir / "root.md").write_text("# Root") subdir = temp_dir / "subdir" subdir.mkdir() (subdir / "nested.md").write_text("# Nested") files = discover_checklists(temp_dir) # Should only find root-level files assert len(files) == 1 assert files[0].name == "root.md" def test_discover_returns_paths(self, temp_dir: Path) -> None: """Test that discovery returns Path objects.""" from pathlib import Path as PathType from sso_mcp_server.checklists.discovery import discover_checklists (temp_dir / "test.md").write_text("# Test") files = discover_checklists(temp_dir) assert len(files) == 1 assert isinstance(files[0], PathType) assert files[0].is_absolute() def test_discover_is_dynamic(self, temp_dir: Path) -> None: """Test that discovery picks up newly added files.""" from sso_mcp_server.checklists.discovery import discover_checklists # Initial discovery (temp_dir / "first.md").write_text("# First") files1 = discover_checklists(temp_dir) assert len(files1) == 1 # Add new file (temp_dir / "second.md").write_text("# Second") files2 = discover_checklists(temp_dir) # Should see new file assert len(files2) == 2 def test_discover_handles_hidden_files(self, temp_dir: Path) -> None: """Test that discovery ignores hidden files (starting with .).""" from sso_mcp_server.checklists.discovery import discover_checklists (temp_dir / "visible.md").write_text("# Visible") (temp_dir / ".hidden.md").write_text("# Hidden") files = discover_checklists(temp_dir) assert len(files) == 1 assert files[0].name == "visible.md" class TestFileDiscoveryEdgeCases: """Edge case tests for File Discovery.""" def test_discover_handles_files_with_spaces(self, temp_dir: Path) -> None: """Test discovering files with spaces in names.""" from sso_mcp_server.checklists.discovery import discover_checklists (temp_dir / "file with spaces.md").write_text("# Spaces") files = discover_checklists(temp_dir) assert len(files) == 1 assert files[0].name == "file with spaces.md" def test_discover_handles_unicode_filenames(self, temp_dir: Path) -> None: """Test discovering files with unicode in names.""" from sso_mcp_server.checklists.discovery import discover_checklists (temp_dir / "日本語.md").write_text("# Japanese") (temp_dir / "émoji-🎉.md").write_text("# Emoji") files = discover_checklists(temp_dir) assert len(files) == 2 def test_discover_handles_symlinks(self, temp_dir: Path) -> None: """Test that discovery can read files through symlinks.""" from sso_mcp_server.checklists.discovery import discover_checklists # Create original file original = temp_dir / "original.md" original.write_text("# Original") # Create symlink using Path.symlink_to link = temp_dir / "link.md" try: link.symlink_to(original) except OSError: # Symlinks may not be supported on all systems return files = discover_checklists(temp_dir) # Symlink resolves to same file as original, so deduplication removes it # At minimum, we should find the original file assert len(files) >= 1 assert any(f.name == "original.md" for f in files) def test_discover_case_sensitivity(self, temp_dir: Path) -> None: """Test that discovery handles different case extensions.""" from sso_mcp_server.checklists.discovery import discover_checklists (temp_dir / "lowercase.md").write_text("# Lower") (temp_dir / "uppercase.MD").write_text("# Upper") (temp_dir / "mixed.Md").write_text("# Mixed") files = discover_checklists(temp_dir) # All markdown files should be discovered assert len(files) == 3

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DauQuangThanh/sso-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server