43 lines
1.9 KiB
Python
43 lines
1.9 KiB
Python
import unittest
|
|||
|
|
from weknora_resource_version_etl import make_plan, transaction, TARGET_DATABASE
|
||
|
|
|
||
|
|
|
||
|
|
class ResourceVersionMigrationTests(unittest.TestCase):
|
||
|
|
def setUp(self):
|
||
|
|
self.row = {"id": 1, "resource_type": "agent", "resource_id": 14, "owner_user_id": 3,
|
||
|
|
"organization_id": 1, "status": "rejected", "payload": {"name": "Old version", "rules": "kept"},
|
||
|
|
"review_note": "copy deleted", "created_at": "2026-09-10T01:00:00Z", "reviewed_at": ""}
|
||
|
|
self.source = {"forks": [], "reviews": [self.row], "source_sha256": "a" * 64}
|
||
|
|
self.target = {"database": TARGET_DATABASE, "agents": {"14": "agent-id"}, "identities": {"3": "owner-id"}}
|
||
|
|
|
||
|
|
def test_terminal_history_preserves_payload_without_restoring_copy(self):
|
||
|
|
first = make_plan(self.source, self.target)
|
||
|
|
self.assertEqual(first, make_plan(self.source, self.target))
|
||
|
|
self.assertEqual(first["rows"][0]["proposed_snapshot"]["rules"], "kept")
|
||
|
|
sql = transaction(first)
|
||
|
|
self.assertIn("ROLLBACK", sql)
|
||
|
|
self.assertNotIn("INSERT INTO custom_agents", sql)
|
||
|
|
self.assertNotIn("INSERT INTO users", sql)
|
||
|
|
|
||
|
|
def test_active_forks_and_pending_reviews_require_real_migration(self):
|
||
|
|
self.source["forks"] = [{"id": 1}]
|
||
|
|
with self.assertRaises(ValueError):
|
||
|
|
make_plan(self.source, self.target)
|
||
|
|
self.source["forks"] = []
|
||
|
|
self.row["status"] = "pending"
|
||
|
|
with self.assertRaises(ValueError):
|
||
|
|
make_plan(self.source, self.target)
|
||
|
|
|
||
|
|
def test_missing_owner_and_foreign_scope_rejected(self):
|
||
|
|
self.target["identities"] = {}
|
||
|
|
with self.assertRaises(ValueError):
|
||
|
|
make_plan(self.source, self.target)
|
||
|
|
self.target["identities"] = {"3": "owner-id"}
|
||
|
|
self.row["organization_id"] = 2
|
||
|
|
with self.assertRaises(ValueError):
|
||
|
|
make_plan(self.source, self.target)
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
unittest.main()
|