50 lines
2.1 KiB
Python
50 lines
2.1 KiB
Python
"""Reguły codemod z pakietu APM - deterministyczna część migracji."""
|
|
|
|
from agentic_codemod.apm.loader import load_apm_context
|
|
from agentic_codemod.workflow.codemod import apply_ruleset, load_rulesets
|
|
|
|
|
|
def _ruleset(repo_root):
|
|
ctx = load_apm_context(repo_root)
|
|
rulesets = load_rulesets([ref.path for ref in ctx.skills.values()], "acme-sdk")
|
|
assert rulesets, "pakiet APM musi dostarczać reguły dla acme-sdk"
|
|
return rulesets[0]
|
|
|
|
|
|
def test_reguly_sa_ladowane_z_referencji_skilla(repo_root):
|
|
ruleset = _ruleset(repo_root)
|
|
assert ruleset.package == "acme-sdk"
|
|
assert {rule.id for rule in ruleset.rules} >= {"import-client", "constructor", "send-message"}
|
|
|
|
|
|
def test_dry_run_nie_zmienia_plikow(repo_root, acme_app):
|
|
before = (acme_app / "src/acme_app/notifier.py").read_text(encoding="utf-8")
|
|
result = apply_ruleset(acme_app, _ruleset(repo_root), dry_run=True)
|
|
assert result.changed_files == ["src/acme_app/notifier.py"]
|
|
assert (acme_app / "src/acme_app/notifier.py").read_text(encoding="utf-8") == before
|
|
|
|
|
|
def test_migracja_usuwa_stare_api(repo_root, acme_app):
|
|
apply_ruleset(acme_app, _ruleset(repo_root))
|
|
content = (acme_app / "src/acme_app/notifier.py").read_text(encoding="utf-8")
|
|
assert "AcmeClient(api_key=api_key, base_url=endpoint)" in content
|
|
assert "client.messages.create(recipient=" in content
|
|
assert "client.send(" not in content
|
|
assert ".close()" not in content
|
|
assert 'result["id"]' not in content
|
|
|
|
|
|
def test_reguly_nie_dotykaja_vendorowanego_sdk(repo_root, acme_app):
|
|
before = (acme_app / "stubs/acme/__init__.py").read_text(encoding="utf-8")
|
|
apply_ruleset(acme_app, _ruleset(repo_root))
|
|
assert (acme_app / "stubs/acme/__init__.py").read_text(encoding="utf-8") == before
|
|
|
|
|
|
def test_ponowne_uruchomienie_jest_idempotentne(repo_root, acme_app):
|
|
ruleset = _ruleset(repo_root)
|
|
apply_ruleset(acme_app, ruleset)
|
|
after_first = (acme_app / "src/acme_app/notifier.py").read_text(encoding="utf-8")
|
|
second = apply_ruleset(acme_app, ruleset)
|
|
assert second.changed_files == []
|
|
assert (acme_app / "src/acme_app/notifier.py").read_text(encoding="utf-8") == after_first
|