Files
xinmi/scripts/test_weknora_resource_version_etl.py
T
yawan f7fc992f57
Anydoc / anydoc parser engine (push) Canceled after 0s
App / Format, vet, test, and build (push) Canceled after 0s
CLI / test (macos-latest / go 1.26) (push) Canceled after 0s
CLI / test (ubuntu-latest / go 1.26) (push) Canceled after 0s
CLI / test (windows-latest / go 1.26) (push) Canceled after 0s
Build and Push Docker Image / build-ui (push) Canceled after 0s
Build and Push Docker Image / build-docreader (push) Canceled after 0s
Build and Push Docker Image / build-sandbox (push) Canceled after 0s
Build and Push Docker Image / build-app (amd64, linux/amd64, ubuntu-latest) (push) Canceled after 0s
Build and Push Docker Image / build-app (arm64, linux/arm64, ubuntu-24.04-arm) (push) Canceled after 0s
DocReader / Python tests and Go client tests (push) Canceled after 0s
Build & Publish (dsh-weknora) / Typecheck, test, pack (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (pinned) (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (latest, advisory) (push) Canceled after 0s
Frontend / Test, type-check, and build (push) Canceled after 0s
Go Lint Cache / warm lint cache (.) (push) Canceled after 0s
Go Lint Cache / warm lint cache (cli) (push) Canceled after 0s
Go Lint Cache / warm lint cache (client) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.10) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.11) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.12) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.13) (push) Canceled after 0s
Build and Push Docker Image / merge (push) Canceled after 0s
Build & Publish (dsh-weknora) / Publish to npm (push) Canceled after 0s
Build & Publish (mcp-server) / Build sdist + wheel (push) Canceled after 0s
Build & Publish (mcp-server) / Publish to PyPI (push) Canceled after 0s
WeKnora deployment source with the reviewed wiki identity, summary and recovery fixes
2026-09-22 16:19:06 +08:00

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