Deskaid

  • tests
#!/usr/bin/env python3 import tempfile import unittest from pathlib import Path from codemcp.rules import load_rule_from_file, match_file_with_glob class TestRules(unittest.TestCase): def setUp(self): # Create a temporary directory for test files self.temp_dir = tempfile.TemporaryDirectory() self.test_dir = Path(self.temp_dir.name) def tearDown(self): # Clean up the temporary directory self.temp_dir.cleanup() def test_load_rule_from_file(self): # Create a test MDC file test_mdc_path = self.test_dir / "test_rule.mdc" with open(test_mdc_path, "w") as f: f.write( """--- description: Test rule description globs: *.js,*.ts alwaysApply: true --- This is a test rule payload """ ) # Load the rule rule = load_rule_from_file(str(test_mdc_path)) # Check that the rule was loaded correctly self.assertIsNotNone(rule) self.assertEqual(rule.description, "Test rule description") self.assertEqual(rule.globs, ["*.js", "*.ts"]) self.assertTrue(rule.always_apply) self.assertEqual(rule.payload, "This is a test rule payload") self.assertEqual(rule.file_path, str(test_mdc_path)) def test_load_rule_from_file_comma_separated_globs(self): # Create a test MDC file with comma-separated globs test_mdc_path = self.test_dir / "test_glob_rule.mdc" with open(test_mdc_path, "w") as f: f.write( """--- description: Test glob rule globs: *.js, *.ts, src/**/*.jsx alwaysApply: false --- This is a glob test rule """ ) # Load the rule rule = load_rule_from_file(str(test_mdc_path)) # Check that the globs were parsed correctly self.assertIsNotNone(rule) self.assertEqual(rule.globs, ["*.js", "*.ts", "src/**/*.jsx"]) def test_load_rule_from_file_invalid(self): # Create an invalid MDC file (missing frontmatter) test_mdc_path = self.test_dir / "invalid_rule.mdc" with open(test_mdc_path, "w") as f: f.write("This is not a valid MDC file") # Attempt to load the rule rule = load_rule_from_file(str(test_mdc_path)) # Check that the rule failed to load self.assertIsNone(rule) def test_match_file_with_glob(self): # Test basic glob matching self.assertTrue(match_file_with_glob("test.js", "*.js")) self.assertTrue(match_file_with_glob("/path/to/test.js", "*.js")) self.assertTrue(match_file_with_glob("/path/to/test.js", "**/*.js")) self.assertTrue( match_file_with_glob("/path/to/src/components/Button.jsx", "src/**/*.jsx") ) # Test non-matching paths self.assertFalse(match_file_with_glob("test.py", "*.js")) self.assertFalse(match_file_with_glob("/path/to/test.ts", "*.js")) self.assertFalse(match_file_with_glob("/path/to/lib/test.jsx", "src/**/*.jsx")) def test_match_file_with_trailing_double_star(self): # Test glob patterns ending with /** self.assertTrue(match_file_with_glob("/path/to/abc/file.txt", "abc/**")) self.assertTrue(match_file_with_glob("/path/to/abc/subdir/file.txt", "abc/**")) self.assertTrue( match_file_with_glob("/path/to/abc/deep/nested/file.js", "abc/**") ) # Test non-matching paths for trailing /** self.assertFalse(match_file_with_glob("/path/to/xyz/file.txt", "abc/**")) self.assertFalse(match_file_with_glob("/abc-other/file.txt", "abc/**")) if __name__ == "__main__": unittest.main()