Files
xinmi/scripts/test_weknora_resource_version_etl.py
T

43 lines
1.9 KiB
Python
Raw Normal View History

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()