feat: initial commit
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user