from django.core.exceptions import ValidationError from django.test import TestCase from apps.events.services import event_type_update from apps.events.tests.helpers import make_event_type class EventTypeModelTest(TestCase): def test_create_event_type(self) -> None: et = make_event_type(name="page_view", display_name="Page View") self.assertEqual(et.name, "page_view") self.assertEqual(et.display_name, "Page View") self.assertFalse(et.requires_exposure) self.assertTrue(et.is_active) def test_create_event_type_with_required_fields(self) -> None: et = make_event_type( name="click", display_name="Click", required_fields=["screen", "element"], ) self.assertEqual(et.required_fields, ["screen", "element"]) def test_unique_name_constraint(self) -> None: make_event_type(name="unique_evt") with self.assertRaises((ValidationError, Exception)): make_event_type(name="unique_evt") def test_invalid_name_rejected(self) -> None: with self.assertRaises(ValidationError): make_event_type(name="Invalid Name!") def test_update_event_type(self) -> None: et = make_event_type(name="updatable") updated = event_type_update( event_type=et, display_name="Updated Name", requires_exposure=True, ) self.assertEqual(updated.display_name, "Updated Name") self.assertTrue(updated.requires_exposure) def test_update_disallowed_field(self) -> None: et = make_event_type(name="no_rename") with self.assertRaises(ValidationError): event_type_update(event_type=et, name="renamed") def test_archive_event_type(self) -> None: et = make_event_type(name="archivable") updated = event_type_update(event_type=et, is_active=False) self.assertFalse(updated.is_active)