test_constants.py 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. #!/usr/bin/env python3
  2. """Test suite for cli/constants.py module."""
  3. import unittest
  4. import sys
  5. from pathlib import Path
  6. # Add parent directory to path
  7. sys.path.insert(0, str(Path(__file__).parent.parent))
  8. from skill_seekers.cli.constants import (
  9. DEFAULT_RATE_LIMIT,
  10. DEFAULT_MAX_PAGES,
  11. DEFAULT_CHECKPOINT_INTERVAL,
  12. CONTENT_PREVIEW_LENGTH,
  13. MAX_PAGES_WARNING_THRESHOLD,
  14. MIN_CATEGORIZATION_SCORE,
  15. URL_MATCH_POINTS,
  16. TITLE_MATCH_POINTS,
  17. CONTENT_MATCH_POINTS,
  18. API_CONTENT_LIMIT,
  19. API_PREVIEW_LIMIT,
  20. LOCAL_CONTENT_LIMIT,
  21. LOCAL_PREVIEW_LIMIT,
  22. DEFAULT_MAX_DISCOVERY,
  23. DISCOVERY_THRESHOLD,
  24. MAX_REFERENCE_FILES,
  25. MAX_CODE_BLOCKS_PER_PAGE,
  26. )
  27. class TestConstants(unittest.TestCase):
  28. """Test that all constants are defined and have sensible values."""
  29. def test_scraping_constants_exist(self):
  30. """Test that scraping constants are defined."""
  31. self.assertIsNotNone(DEFAULT_RATE_LIMIT)
  32. self.assertIsNotNone(DEFAULT_MAX_PAGES)
  33. self.assertIsNotNone(DEFAULT_CHECKPOINT_INTERVAL)
  34. def test_scraping_constants_types(self):
  35. """Test that scraping constants have correct types."""
  36. self.assertIsInstance(DEFAULT_RATE_LIMIT, (int, float))
  37. self.assertIsInstance(DEFAULT_MAX_PAGES, int)
  38. self.assertIsInstance(DEFAULT_CHECKPOINT_INTERVAL, int)
  39. def test_scraping_constants_ranges(self):
  40. """Test that scraping constants have sensible values."""
  41. self.assertGreater(DEFAULT_RATE_LIMIT, 0)
  42. self.assertGreater(DEFAULT_MAX_PAGES, 0)
  43. self.assertGreater(DEFAULT_CHECKPOINT_INTERVAL, 0)
  44. self.assertEqual(DEFAULT_RATE_LIMIT, 0.5)
  45. self.assertEqual(DEFAULT_MAX_PAGES, 500)
  46. self.assertEqual(DEFAULT_CHECKPOINT_INTERVAL, 1000)
  47. def test_content_analysis_constants(self):
  48. """Test content analysis constants."""
  49. self.assertEqual(CONTENT_PREVIEW_LENGTH, 500)
  50. self.assertEqual(MAX_PAGES_WARNING_THRESHOLD, 10000)
  51. self.assertGreater(MAX_PAGES_WARNING_THRESHOLD, DEFAULT_MAX_PAGES)
  52. def test_categorization_constants(self):
  53. """Test categorization scoring constants."""
  54. self.assertEqual(MIN_CATEGORIZATION_SCORE, 2)
  55. self.assertEqual(URL_MATCH_POINTS, 3)
  56. self.assertEqual(TITLE_MATCH_POINTS, 2)
  57. self.assertEqual(CONTENT_MATCH_POINTS, 1)
  58. # Verify scoring hierarchy
  59. self.assertGreater(URL_MATCH_POINTS, TITLE_MATCH_POINTS)
  60. self.assertGreater(TITLE_MATCH_POINTS, CONTENT_MATCH_POINTS)
  61. def test_enhancement_constants_exist(self):
  62. """Test that enhancement constants are defined."""
  63. self.assertIsNotNone(API_CONTENT_LIMIT)
  64. self.assertIsNotNone(API_PREVIEW_LIMIT)
  65. self.assertIsNotNone(LOCAL_CONTENT_LIMIT)
  66. self.assertIsNotNone(LOCAL_PREVIEW_LIMIT)
  67. def test_enhancement_constants_values(self):
  68. """Test enhancement constants have expected values."""
  69. self.assertEqual(API_CONTENT_LIMIT, 100000)
  70. self.assertEqual(API_PREVIEW_LIMIT, 40000)
  71. self.assertEqual(LOCAL_CONTENT_LIMIT, 50000)
  72. self.assertEqual(LOCAL_PREVIEW_LIMIT, 20000)
  73. def test_enhancement_limits_hierarchy(self):
  74. """Test that API limits are higher than local limits."""
  75. self.assertGreater(API_CONTENT_LIMIT, LOCAL_CONTENT_LIMIT)
  76. self.assertGreater(API_PREVIEW_LIMIT, LOCAL_PREVIEW_LIMIT)
  77. self.assertGreater(API_CONTENT_LIMIT, API_PREVIEW_LIMIT)
  78. self.assertGreater(LOCAL_CONTENT_LIMIT, LOCAL_PREVIEW_LIMIT)
  79. def test_estimation_constants(self):
  80. """Test page estimation constants."""
  81. self.assertEqual(DEFAULT_MAX_DISCOVERY, 1000)
  82. self.assertEqual(DISCOVERY_THRESHOLD, 10000)
  83. self.assertGreater(DISCOVERY_THRESHOLD, DEFAULT_MAX_DISCOVERY)
  84. def test_file_limit_constants(self):
  85. """Test file limit constants."""
  86. self.assertEqual(MAX_REFERENCE_FILES, 100)
  87. self.assertEqual(MAX_CODE_BLOCKS_PER_PAGE, 5)
  88. self.assertGreater(MAX_REFERENCE_FILES, 0)
  89. self.assertGreater(MAX_CODE_BLOCKS_PER_PAGE, 0)
  90. class TestConstantsUsage(unittest.TestCase):
  91. """Test that constants are properly used in other modules."""
  92. def test_doc_scraper_imports_constants(self):
  93. """Test that doc_scraper imports and uses constants."""
  94. from skill_seekers.cli import doc_scraper
  95. # Check that doc_scraper can access the constants
  96. self.assertTrue(hasattr(doc_scraper, 'DEFAULT_RATE_LIMIT'))
  97. self.assertTrue(hasattr(doc_scraper, 'DEFAULT_MAX_PAGES'))
  98. def test_estimate_pages_imports_constants(self):
  99. """Test that estimate_pages imports and uses constants."""
  100. from skill_seekers.cli import estimate_pages
  101. # Verify function signature uses constants
  102. import inspect
  103. sig = inspect.signature(estimate_pages.estimate_pages)
  104. self.assertIn('max_discovery', sig.parameters)
  105. def test_enhance_skill_imports_constants(self):
  106. """Test that enhance_skill imports constants."""
  107. try:
  108. from skill_seekers.cli import enhance_skill
  109. # Check module loads without errors
  110. self.assertIsNotNone(enhance_skill)
  111. except (ImportError, SystemExit) as e:
  112. # anthropic package may not be installed or module exits on import
  113. # This is acceptable - we're just checking the constants import works
  114. pass
  115. def test_enhance_skill_local_imports_constants(self):
  116. """Test that enhance_skill_local imports constants."""
  117. from skill_seekers.cli import enhance_skill_local
  118. self.assertIsNotNone(enhance_skill_local)
  119. class TestConstantsExports(unittest.TestCase):
  120. """Test that constants module exports are correct."""
  121. def test_all_exports_exist(self):
  122. """Test that all items in __all__ exist."""
  123. from skill_seekers.cli import constants
  124. self.assertTrue(hasattr(constants, '__all__'))
  125. for name in constants.__all__:
  126. self.assertTrue(
  127. hasattr(constants, name),
  128. f"Constant '{name}' in __all__ but not defined"
  129. )
  130. def test_all_exports_count(self):
  131. """Test that __all__ has expected number of exports."""
  132. from skill_seekers.cli import constants
  133. # We defined 18 constants (added DEFAULT_ASYNC_MODE)
  134. self.assertEqual(len(constants.__all__), 18)
  135. if __name__ == '__main__':
  136. unittest.main()