Some checks failed
Architecture Lint / Linter Tests (pull_request) Successful in 9s
PR Checklist / pr-checklist (pull_request) Failing after 1m18s
Smoke Test / smoke (pull_request) Failing after 6s
Validate Config / YAML Lint (pull_request) Failing after 6s
Validate Config / JSON Validate (pull_request) Successful in 7s
Validate Config / Python Syntax & Import Check (pull_request) Failing after 6s
Validate Config / Python Test Suite (pull_request) Has been skipped
Validate Config / Shell Script Lint (pull_request) Failing after 14s
Validate Config / Cron Syntax Check (pull_request) Successful in 5s
Validate Config / Deploy Script Dry Run (pull_request) Successful in 5s
Validate Config / Playbook Schema Validation (pull_request) Successful in 7s
Architecture Lint / Lint Repository (pull_request) Failing after 6s
44 lines
1.4 KiB
Python
44 lines
1.4 KiB
Python
import sys
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, str(Path(__file__).resolve().parent.parent / "scripts"))
|
|
|
|
from knowledge_base import KnowledgeBase
|
|
|
|
|
|
def test_ingest_python_file_extracts_ast_facts(tmp_path: Path) -> None:
|
|
source = tmp_path / "demo_module.py"
|
|
source.write_text(
|
|
"import os\n"
|
|
"from pathlib import Path\n\n"
|
|
"CONSTANT = 7\n\n"
|
|
"def helper(x):\n"
|
|
" return x + 1\n\n"
|
|
"class Demo:\n"
|
|
" def method(self):\n"
|
|
" return helper(CONSTANT)\n"
|
|
)
|
|
|
|
kb = KnowledgeBase()
|
|
facts = kb.ingest_python_file(source)
|
|
|
|
assert facts, "AST ingestion should add symbolic facts"
|
|
assert kb.query("defines_function", "demo_module", "helper") == [{}]
|
|
assert kb.query("defines_class", "demo_module", "Demo") == [{}]
|
|
assert kb.query("defines_method", "Demo", "method") == [{}]
|
|
assert kb.query("imports", "demo_module", "os") == [{}]
|
|
assert kb.query("imports", "demo_module", "pathlib.Path") == [{}]
|
|
assert kb.query("defines_constant", "demo_module", "CONSTANT") == [{}]
|
|
|
|
|
|
def test_ingest_python_file_rejects_invalid_syntax(tmp_path: Path) -> None:
|
|
broken = tmp_path / "broken.py"
|
|
broken.write_text("def nope(:\n pass\n")
|
|
|
|
kb = KnowledgeBase()
|
|
try:
|
|
kb.ingest_python_file(broken)
|
|
except SyntaxError:
|
|
return
|
|
raise AssertionError("Expected SyntaxError for invalid Python source")
|