| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- """Test suite for Python package structure.
- Tests that the package structure is correct and imports work properly.
- This ensures modern Python packaging (src/ layout, pyproject.toml) is successful.
- """
- import pytest
- import sys
- from pathlib import Path
- class TestCliPackage:
- """Test skill_seekers.cli package structure and imports."""
- def test_cli_package_exists(self):
- """Test that skill_seekers.cli package can be imported."""
- import skill_seekers.cli
- assert skill_seekers.cli is not None
- def test_cli_has_version(self):
- """Test that skill_seekers.cli package has __version__."""
- import skill_seekers.cli
- assert hasattr(skill_seekers.cli, '__version__')
- assert skill_seekers.cli.__version__ == '2.0.0'
- def test_cli_has_all(self):
- """Test that skill_seekers.cli package has __all__ export list."""
- import skill_seekers.cli
- assert hasattr(skill_seekers.cli, '__all__')
- assert isinstance(skill_seekers.cli.__all__, list)
- assert len(skill_seekers.cli.__all__) > 0
- def test_llms_txt_detector_import(self):
- """Test that LlmsTxtDetector can be imported from skill_seekers.cli."""
- from skill_seekers.cli import LlmsTxtDetector
- assert LlmsTxtDetector is not None
- def test_llms_txt_downloader_import(self):
- """Test that LlmsTxtDownloader can be imported from skill_seekers.cli."""
- from skill_seekers.cli import LlmsTxtDownloader
- assert LlmsTxtDownloader is not None
- def test_llms_txt_parser_import(self):
- """Test that LlmsTxtParser can be imported from skill_seekers.cli."""
- from skill_seekers.cli import LlmsTxtParser
- assert LlmsTxtParser is not None
- def test_open_folder_import(self):
- """Test that open_folder can be imported from skill_seekers.cli (if utils exists)."""
- try:
- from skill_seekers.cli import open_folder
- # If import succeeds, function should not be None
- assert open_folder is not None
- except ImportError:
- # If utils.py doesn't exist, that's okay for now
- pytest.skip("utils.py not found, skipping open_folder test")
- def test_cli_exports_match_all(self):
- """Test that exported items in __all__ can actually be imported."""
- import skill_seekers.cli as cli
- for item_name in cli.__all__:
- if item_name == 'open_folder' and cli.open_folder is None:
- # open_folder might be None if utils doesn't exist
- continue
- assert hasattr(cli, item_name), f"{item_name} not found in cli package"
- class TestMcpPackage:
- """Test skill_seekers.mcp package structure and imports."""
- def test_mcp_package_exists(self):
- """Test that skill_seekers.mcp package can be imported."""
- import skill_seekers.mcp
- assert skill_seekers.mcp is not None
- def test_mcp_has_version(self):
- """Test that skill_seekers.mcp package has __version__."""
- import skill_seekers.mcp
- assert hasattr(skill_seekers.mcp, '__version__')
- assert skill_seekers.mcp.__version__ == '2.0.0'
- def test_mcp_has_all(self):
- """Test that skill_seekers.mcp package has __all__ export list."""
- import skill_seekers.mcp
- assert hasattr(skill_seekers.mcp, '__all__')
- assert isinstance(skill_seekers.mcp.__all__, list)
- def test_mcp_tools_package_exists(self):
- """Test that skill_seekers.mcp.tools subpackage can be imported."""
- import skill_seekers.mcp.tools
- assert skill_seekers.mcp.tools is not None
- def test_mcp_tools_has_version(self):
- """Test that skill_seekers.mcp.tools has __version__."""
- import skill_seekers.mcp.tools
- assert hasattr(skill_seekers.mcp.tools, '__version__')
- assert skill_seekers.mcp.tools.__version__ == '2.0.0'
- class TestPackageStructure:
- """Test overall package structure integrity (src/ layout)."""
- def test_cli_init_file_exists(self):
- """Test that src/skill_seekers/cli/__init__.py exists."""
- init_file = Path(__file__).parent.parent / 'src' / 'skill_seekers' / 'cli' / '__init__.py'
- assert init_file.exists(), "src/skill_seekers/cli/__init__.py not found"
- def test_mcp_init_file_exists(self):
- """Test that src/skill_seekers/mcp/__init__.py exists."""
- init_file = Path(__file__).parent.parent / 'src' / 'skill_seekers' / 'mcp' / '__init__.py'
- assert init_file.exists(), "src/skill_seekers/mcp/__init__.py not found"
- def test_mcp_tools_init_file_exists(self):
- """Test that src/skill_seekers/mcp/tools/__init__.py exists."""
- init_file = Path(__file__).parent.parent / 'src' / 'skill_seekers' / 'mcp' / 'tools' / '__init__.py'
- assert init_file.exists(), "src/skill_seekers/mcp/tools/__init__.py not found"
- def test_cli_init_has_docstring(self):
- """Test that skill_seekers.cli/__init__.py has a module docstring."""
- import skill_seekers.cli
- assert skill_seekers.cli.__doc__ is not None
- assert len(skill_seekers.cli.__doc__) > 50 # Should have substantial documentation
- def test_mcp_init_has_docstring(self):
- """Test that skill_seekers.mcp/__init__.py has a module docstring."""
- import skill_seekers.mcp
- assert skill_seekers.mcp.__doc__ is not None
- assert len(skill_seekers.mcp.__doc__) > 50 # Should have substantial documentation
- class TestImportPatterns:
- """Test that various import patterns work correctly."""
- def test_direct_module_import(self):
- """Test importing modules directly."""
- from skill_seekers.cli import llms_txt_detector
- from skill_seekers.cli import llms_txt_downloader
- from skill_seekers.cli import llms_txt_parser
- assert llms_txt_detector is not None
- assert llms_txt_downloader is not None
- assert llms_txt_parser is not None
- def test_class_import_from_package(self):
- """Test importing classes from package."""
- from skill_seekers.cli import LlmsTxtDetector, LlmsTxtDownloader, LlmsTxtParser
- assert LlmsTxtDetector.__name__ == 'LlmsTxtDetector'
- assert LlmsTxtDownloader.__name__ == 'LlmsTxtDownloader'
- assert LlmsTxtParser.__name__ == 'LlmsTxtParser'
- def test_package_level_import(self):
- """Test importing entire packages."""
- import skill_seekers
- import skill_seekers.cli
- import skill_seekers.mcp
- import skill_seekers.mcp.tools
- assert 'skill_seekers' in sys.modules
- assert 'skill_seekers.cli' in sys.modules
- assert 'skill_seekers.mcp' in sys.modules
- assert 'skill_seekers.mcp.tools' in sys.modules
- class TestBackwardsCompatibility:
- """Test that existing code patterns still work."""
- def test_direct_file_import_still_works(self):
- """Test that direct file imports still work (backwards compatible)."""
- # This ensures we didn't break existing code
- from skill_seekers.cli.llms_txt_detector import LlmsTxtDetector
- from skill_seekers.cli.llms_txt_downloader import LlmsTxtDownloader
- from skill_seekers.cli.llms_txt_parser import LlmsTxtParser
- assert LlmsTxtDetector is not None
- assert LlmsTxtDownloader is not None
- assert LlmsTxtParser is not None
- def test_module_path_import_still_works(self):
- """Test that full module path imports still work."""
- import skill_seekers.cli.llms_txt_detector
- import skill_seekers.cli.llms_txt_downloader
- import skill_seekers.cli.llms_txt_parser
- assert skill_seekers.cli.llms_txt_detector is not None
- assert skill_seekers.cli.llms_txt_downloader is not None
- assert skill_seekers.cli.llms_txt_parser is not None
- class TestRootPackage:
- """Test root skill_seekers package."""
- def test_root_package_exists(self):
- """Test that skill_seekers root package can be imported."""
- import skill_seekers
- assert skill_seekers is not None
- def test_root_has_version(self):
- """Test that skill_seekers root package has __version__."""
- import skill_seekers
- assert hasattr(skill_seekers, '__version__')
- assert skill_seekers.__version__ == '2.0.0'
- def test_root_has_metadata(self):
- """Test that skill_seekers root package has metadata."""
- import skill_seekers
- assert hasattr(skill_seekers, '__author__')
- assert hasattr(skill_seekers, '__license__')
- assert skill_seekers.__license__ == 'MIT'
- class TestCLIEntryPoints:
- """Test that CLI entry points are properly configured."""
- def test_main_cli_module_exists(self):
- """Test that main.py module exists and can be imported."""
- from skill_seekers.cli import main
- assert main is not None
- assert hasattr(main, 'main')
- assert callable(main.main)
- def test_main_cli_has_parser(self):
- """Test that main.py has parser creation function."""
- from skill_seekers.cli.main import create_parser
- parser = create_parser()
- assert parser is not None
- # Test that main subcommands are configured
- assert parser.prog == 'skill-seekers'
|