import unittest from admin_app.db.models import ToolVersion from shared.contracts import ToolLifecycleStatus class ToolVersionModelTests(unittest.TestCase): def test_tool_version_declares_expected_table_and_columns(self): self.assertEqual(ToolVersion.__tablename__, "tool_versions") self.assertIn("version_id", ToolVersion.__table__.columns) self.assertIn("draft_id", ToolVersion.__table__.columns) self.assertIn("tool_name", ToolVersion.__table__.columns) self.assertIn("version_number", ToolVersion.__table__.columns) self.assertIn("status", ToolVersion.__table__.columns) self.assertIn("summary", ToolVersion.__table__.columns) self.assertIn("description", ToolVersion.__table__.columns) self.assertIn("business_goal", ToolVersion.__table__.columns) self.assertIn("parameters_json", ToolVersion.__table__.columns) self.assertIn("required_parameter_count", ToolVersion.__table__.columns) self.assertIn("requires_director_approval", ToolVersion.__table__.columns) self.assertIn("owner_staff_account_id", ToolVersion.__table__.columns) self.assertIn("owner_display_name", ToolVersion.__table__.columns) def test_tool_version_uses_expected_constraints_and_defaults(self): foreign_keys = list(ToolVersion.__table__.columns["draft_id"].foreign_keys) self.assertEqual(len(foreign_keys), 1) self.assertEqual(str(foreign_keys[0].target_fullname), "tool_drafts.id") owner_foreign_keys = list(ToolVersion.__table__.columns["owner_staff_account_id"].foreign_keys) self.assertEqual(len(owner_foreign_keys), 1) self.assertEqual(str(owner_foreign_keys[0].target_fullname), "staff_accounts.id") status_column = ToolVersion.__table__.columns["status"] self.assertEqual(status_column.default.arg, ToolLifecycleStatus.DRAFT) self.assertEqual(status_column.type.process_bind_param("validated", None), "validated") self.assertEqual(status_column.type.process_result_value("draft", None), ToolLifecycleStatus.DRAFT) unique_constraints = {constraint.name for constraint in ToolVersion.__table__.constraints} self.assertIn("uq_tool_versions_tool_name_version_number", unique_constraints) if __name__ == "__main__": unittest.main()