import pytest from pydantic import TypeAdapter, ValidationError from app.models import BounceEvent, Event EventsValidator = TypeAdapter(list[Event | BounceEvent]) def test_general_event_validation_pass() -> None: event_dict = { "event": "click", "sg_event_id": "test", "sg_message_id": "test", "timestamp": 1, "email": "test@example.com", "email_id": "test", "email_type": "CAMPAIGN", "automated_email_trigger_id": "test", "batch_id": "test", "is_test": True, } events = EventsValidator.validate_python([event_dict]) assert isinstance(events[0], Event) assert events[0].trigger_id == "test" def test_general_event_validation_without_batch_id_pass() -> None: event_dict = { "event": "click", "sg_event_id": "test", "sg_message_id": "test", "timestamp": 1, "email": "test@example.com", "email_id": "test", "email_type": "CAMPAIGN", "automated_email_trigger_id": "test", "batch_id": None, "is_test": True, } events = EventsValidator.validate_python([event_dict]) assert isinstance(events[0], Event) assert events[0].trigger_id == "test" def test_bounce_event_validation_pass() -> None: event_dict = { "event": "bounce", "sg_event_id": "test", "sg_message_id": "test", "timestamp": 1, "email": "test@example.com", "email_id": "test", "email_type": "CAMPAIGN", "automated_email_trigger_id": "test", "batch_id": None, "is_test": True, } events = EventsValidator.validate_python([event_dict]) assert isinstance(events[0], Event) assert events[0].trigger_id == "test" def test_bounce_event_validation_fail() -> None: event_dict = { "event": "bounce", "sg_event_id": "test", "sg_message_id": "test", "timestamp": 1, "email_id": "test", "email_type": "CAMPAIGN", "automated_email_trigger_id": "test", "batch_id": None, "is_test": True, } with pytest.raises(ValidationError): EventsValidator.validate_python([event_dict])