Files
AFFAANhandClaude Opus 5 19e1e84fb7 Initial commit: MaskanX backend
Independent FastAPI backend for the MaskanX agentic growth platform.

Includes the agent runtime, MCP client integrations (Meta Ads, LinkedIn,
HubSpot, Tavily, Exa, xAI, Citedy, image generation), PostgreSQL storage
for chats and cron jobs, provider and secret management, and the CLI.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-01 10:28:22 +05:30

86 lines
2.9 KiB
Python

import pytest
import json
from pathlib import Path
from adclaw.agents.skill_scanner import Finding, ScanResult
def test_compute_score_clean():
from adclaw.agents.skill_security import compute_security_score
scan = ScanResult(safe=True, skill_name="test", findings=[], files_scanned=3)
assert compute_security_score(scan) == 100
def test_compute_score_critical():
from adclaw.agents.skill_security import compute_security_score
findings = [Finding(severity="critical", description="exec found")]
scan = ScanResult(safe=False, skill_name="test", findings=findings, files_scanned=1)
assert compute_security_score(scan) == 75
def test_compute_score_multiple():
from adclaw.agents.skill_security import compute_security_score
findings = [
Finding(severity="critical", description="a"),
Finding(severity="high", description="b"),
Finding(severity="medium", description="c"),
Finding(severity="low", description="d"),
]
scan = ScanResult(safe=False, skill_name="test", findings=findings, files_scanned=2)
assert compute_security_score(scan) == 49
def test_compute_score_floor_zero():
from adclaw.agents.skill_security import compute_security_score
findings = [Finding(severity="critical", description="x")] * 5
scan = ScanResult(safe=False, skill_name="test", findings=findings, files_scanned=1)
assert compute_security_score(scan) == 0
def test_cache_write_and_read(tmp_path):
from adclaw.agents.skill_security import write_scan_cache, read_scan_cache
skill_dir = tmp_path / "test-skill"
skill_dir.mkdir()
(skill_dir / "SKILL.md").write_text("---\nname: test\n---\n# Test")
data = {
"score": 100,
"pattern_scan": "pass",
"llm_audit": "pending",
"auto_healed": False,
"findings": [],
}
write_scan_cache(skill_dir, data)
cached = read_scan_cache(skill_dir)
assert cached is not None
assert cached["score"] == 100
def test_cache_invalidated_on_change(tmp_path):
from adclaw.agents.skill_security import write_scan_cache, read_scan_cache
skill_dir = tmp_path / "test-skill"
skill_dir.mkdir()
(skill_dir / "SKILL.md").write_text("---\nname: test\n---\n# V1")
write_scan_cache(skill_dir, {"score": 100})
(skill_dir / "SKILL.md").write_text("---\nname: test\n---\n# V2")
cached = read_scan_cache(skill_dir)
assert cached is None
def test_scan_and_cache_integration(tmp_path):
from adclaw.agents.skill_security import scan_and_cache
skill_dir = tmp_path / "safe-skill"
skill_dir.mkdir()
(skill_dir / "SKILL.md").write_text("---\nname: safe-skill\ndescription: Safe.\n---\n# Safe")
result = scan_and_cache(skill_dir, "safe-skill")
assert result["score"] == 100
assert result["pattern_scan"] == "pass"
result2 = scan_and_cache(skill_dir, "safe-skill")
assert result2["score"] == 100