You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
2.7 KiB
Python
50 lines
2.7 KiB
Python
import unittest
|
|
|
|
from admin_app.db.models import ToolMetadata
|
|
from shared.contracts import ToolLifecycleStatus
|
|
|
|
|
|
class ToolMetadataModelTests(unittest.TestCase):
|
|
def test_tool_metadata_declares_expected_table_and_columns(self):
|
|
self.assertEqual(ToolMetadata.__tablename__, "tool_metadata")
|
|
self.assertIn("metadata_id", ToolMetadata.__table__.columns)
|
|
self.assertIn("draft_id", ToolMetadata.__table__.columns)
|
|
self.assertIn("tool_version_id", ToolMetadata.__table__.columns)
|
|
self.assertIn("tool_name", ToolMetadata.__table__.columns)
|
|
self.assertIn("display_name", ToolMetadata.__table__.columns)
|
|
self.assertIn("domain", ToolMetadata.__table__.columns)
|
|
self.assertIn("description", ToolMetadata.__table__.columns)
|
|
self.assertIn("parameters_json", ToolMetadata.__table__.columns)
|
|
self.assertIn("version_number", ToolMetadata.__table__.columns)
|
|
self.assertIn("status", ToolMetadata.__table__.columns)
|
|
self.assertIn("author_staff_account_id", ToolMetadata.__table__.columns)
|
|
self.assertIn("author_display_name", ToolMetadata.__table__.columns)
|
|
self.assertIn("created_at", ToolMetadata.__table__.columns)
|
|
self.assertIn("updated_at", ToolMetadata.__table__.columns)
|
|
|
|
def test_tool_metadata_uses_expected_constraints_and_defaults(self):
|
|
draft_foreign_keys = list(ToolMetadata.__table__.columns["draft_id"].foreign_keys)
|
|
self.assertEqual(len(draft_foreign_keys), 1)
|
|
self.assertEqual(str(draft_foreign_keys[0].target_fullname), "tool_drafts.id")
|
|
|
|
version_foreign_keys = list(ToolMetadata.__table__.columns["tool_version_id"].foreign_keys)
|
|
self.assertEqual(len(version_foreign_keys), 1)
|
|
self.assertEqual(str(version_foreign_keys[0].target_fullname), "tool_versions.id")
|
|
|
|
author_foreign_keys = list(ToolMetadata.__table__.columns["author_staff_account_id"].foreign_keys)
|
|
self.assertEqual(len(author_foreign_keys), 1)
|
|
self.assertEqual(str(author_foreign_keys[0].target_fullname), "staff_accounts.id")
|
|
|
|
status_column = ToolMetadata.__table__.columns["status"]
|
|
self.assertEqual(status_column.default.arg, ToolLifecycleStatus.DRAFT)
|
|
self.assertEqual(status_column.type.process_bind_param("archived", None), "archived")
|
|
self.assertEqual(status_column.type.process_result_value("draft", None), ToolLifecycleStatus.DRAFT)
|
|
|
|
unique_constraints = {constraint.name for constraint in ToolMetadata.__table__.constraints}
|
|
self.assertIn("uq_tool_metadata_tool_name_version_number", unique_constraints)
|
|
self.assertTrue(ToolMetadata.__table__.columns["tool_version_id"].unique)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|