aboutsummaryrefslogtreecommitdiffstats
path: root/ctrack/register/tests/test_models.py
diff options
context:
space:
mode:
Diffstat (limited to 'ctrack/register/tests/test_models.py')
-rw-r--r--ctrack/register/tests/test_models.py234
1 files changed, 234 insertions, 0 deletions
diff --git a/ctrack/register/tests/test_models.py b/ctrack/register/tests/test_models.py
new file mode 100644
index 0000000..1f8923b
--- /dev/null
+++ b/ctrack/register/tests/test_models.py
@@ -0,0 +1,234 @@
+import datetime
+
+import pytest
+from django.db import IntegrityError
+
+from ctrack.register.models import (
+ EventType,
+ SingleDateTimeEvent,
+ CAFSingleDateEvent,
+ CAFTwinDateEvent,
+)
+
+pytestmark = pytest.mark.django_db
+
+
+@pytest.mark.parametrize(
+ "allowed_type",
+ [
+ "CAF_INITIAL_CAF_RECEIVED",
+ "CAF_FEEDBACK_EMAILED_OES",
+ "CAF_RECEIVED",
+ "CAF_EMAILED_ROSA",
+ "CAF_VALIDATION_SIGN_OFF",
+ "CAF_VALIDATION_RECORD_EMAILED_TO_OES",
+ ],
+)
+def test_caf_single_date_events(allowed_type, user, caf):
+ now = datetime.datetime.now()
+ e = CAFSingleDateEvent.objects.create(
+ type_descriptor=allowed_type,
+ related_caf=caf,
+ short_description="CAF received for X Company",
+ date="2020-10-10",
+ comments="Nice comments for this event",
+ user=user,
+ )
+ assert e.created_date.day == now.day
+ assert e.type_descriptor == allowed_type
+
+
+@pytest.mark.parametrize(
+ "allowed_type", ["CAF_PEER_REVIEW_PERIOD", "CAF_VALIDATION_PERIOD"]
+)
+def test_caf_twin_date_events(allowed_type, user, caf):
+ now = datetime.datetime.now()
+ e = CAFTwinDateEvent.objects.create(
+ type_descriptor=allowed_type,
+ related_caf=caf,
+ short_description="CAF received for X Company",
+ start_date="2020-10-10",
+ end_date="2020-10-25",
+ comments="Nice comments for this event",
+ user=user,
+ )
+ assert e.created_date.day == now.day
+ assert e.type_descriptor == allowed_type
+
+
+@pytest.mark.parametrize(
+ "allowed_type", ["CAF_PEER_REVIEW_PERIOD", "CAF_VALIDATION_PERIOD"]
+)
+def test_caf_twin_date_event_no_end_date(allowed_type, user, caf):
+ e = CAFTwinDateEvent.objects.create(
+ type_descriptor=allowed_type,
+ related_caf=caf,
+ short_description="CAF received for X Company",
+ start_date="2020-10-10",
+ comments="Nice comments for this event",
+ user=user,
+ )
+ assert e.end_date is None
+
+
+@pytest.mark.parametrize(
+ "allowed_type", ["CAF_PEER_REVIEW_PERIOD", "CAF_VALIDATION_PERIOD"]
+)
+def test_caf_twin_date_event_no_start_date_not_allowed(allowed_type, user, caf):
+ with pytest.raises(IntegrityError):
+ CAFTwinDateEvent.objects.create(
+ type_descriptor=allowed_type,
+ related_caf=caf,
+ short_description="CAF received for X Company",
+ end_date="2020-10-10",
+ comments="Nice comments for this event",
+ user=user,
+ )
+
+
+def test_cannot_add_two_caf_initial_caf_received_events_on_same_date(user, caf):
+ CAFSingleDateEvent.objects.create(
+ type_descriptor="CAF_INITIAL_CAF_RECEIVED",
+ related_caf=caf,
+ short_description="CAF received for X Company",
+ date="2020-10-10",
+ comments="Nice comments for this event",
+ user=user,
+ )
+ with pytest.raises(IntegrityError):
+ CAFSingleDateEvent.objects.create(
+ type_descriptor="CAF_INITIAL_CAF_RECEIVED",
+ related_caf=caf,
+ short_description="CAF received for X Company",
+ date="2020-10-10",
+ comments="Nice comments for this event",
+ user=user,
+ )
+
+
+def test_can_email_two_caf_on_same_date(user, caf):
+ CAFSingleDateEvent.objects.create(
+ type_descriptor="CAF_EMAILED_ROSA",
+ related_caf=caf,
+ short_description="CAF sent to Rosa for X Company",
+ date="2020-10-10",
+ comments="Nice comments for this event",
+ user=user,
+ )
+ CAFSingleDateEvent.objects.create(
+ type_descriptor="CAF_EMAILED_ROSA",
+ related_caf=caf,
+ short_description="CAF sent to Rosa for X Company",
+ date="2020-10-10",
+ comments="Nice comments for this event",
+ user=user,
+ )
+
+
+def test_cannot_receive_the_same_caf_on_the_same_day(user, caf):
+ CAFSingleDateEvent.objects.create(
+ type_descriptor="CAF_RECEIVED",
+ related_caf=caf,
+ short_description="CAF received to Rosa for X Company",
+ date="2020-10-10",
+ comments="Nice comments for this event",
+ user=user,
+ )
+ with pytest.raises(IntegrityError):
+ CAFSingleDateEvent.objects.create(
+ type_descriptor="CAF_RECEIVED",
+ related_caf=caf,
+ short_description="CAF received to Rosa for X Company",
+ date="2020-10-10",
+ comments="Nice comments for this event",
+ user=user,
+ )
+
+
+def test_event_type_enum():
+ assert EventType.MEETING.name == "MEETING"
+ assert EventType.PHONE_CALL.name == "PHONE_CALL"
+ assert EventType.VIDEO_CALL.name == "VIDEO_CALL"
+ assert EventType.EMAIL.name == "EMAIL"
+ assert EventType.NOTE.name == "NOTE"
+ assert EventType.CAF_INITIAL_CAF_RECEIVED.name == "CAF_INITIAL_CAF_RECEIVED"
+ assert EventType.CAF_FEEDBACK_EMAILED_OES.name == "CAF_FEEDBACK_EMAILED_OES"
+ assert EventType.CAF_RECEIVED.name == "CAF_RECEIVED"
+ assert EventType.CAF_EMAILED_ROSA.name == "CAF_EMAILED_ROSA"
+ assert EventType.CAF_PEER_REVIEW_PERIOD.name == "CAF_PEER_REVIEW_PERIOD"
+ assert EventType.CAF_VALIDATION_PERIOD.name == "CAF_VALIDATION_PERIOD"
+ assert EventType.CAF_VALIDATION_SIGN_OFF.name == "CAF_VALIDATION_SIGN_OFF"
+ assert (
+ EventType.CAF_VALIDATION_RECORD_EMAILED_TO_OES.name
+ == "CAF_VALIDATION_RECORD_EMAILED_TO_OES"
+ )
+
+
+@pytest.mark.parametrize("allowed_type", ["PHONE_CALL", "MEETING", "VIDEO_CALL", "EMAIL"])
+def test_single_datetime_event(person, user, allowed_type):
+ """This tests for phone call, video call and email events"""
+ now = datetime.datetime.now()
+ event = SingleDateTimeEvent.objects.create(
+ type_descriptor=allowed_type,
+ short_description="Important event",
+ url = "http://fake.url.com",
+ requested_response_date="2021-01-24",
+ response_received_date=None,
+ datetime="2020-10-10T15:00",
+ comments="Comments on important event",
+ # location is optional
+ user=user,
+ )
+ event.participants.add(person)
+ assert event.type_descriptor == allowed_type
+ assert person in event.participants.all()
+ assert event.created_date.day == now.day
+
+
+@pytest.mark.parametrize(
+ "allowed_type", ["CAF_PEER_REVIEW_PERIOD", "CAF_VALIDATION_PERIOD", "VIDEO_CALL"]
+)
+def test_cannot_create_twin_date_event_model_end_date_precedes_start(allowed_type, user, caf):
+ with pytest.raises(IntegrityError):
+ CAFTwinDateEvent.objects.create(
+ type_descriptor=allowed_type,
+ related_caf=caf,
+ start_date="2010-10-10",
+ end_date="2010-01-01",
+ short_description="Bobbins",
+ user=user,
+ )
+
+
+def test_meeting_event(user, person):
+ uname = user.name
+ now = datetime.datetime.now()
+ e = SingleDateTimeEvent.objects.create(
+ type_descriptor="Meeting",
+ short_description="Big Important Meeting",
+ datetime="2020-10-10T15:00",
+ comments="Nice comments",
+ location="Harvey's House",
+ user=user,
+ )
+ e.participants.add(person)
+ assert len(e.participants.all()) == 1
+ assert e.type_descriptor == "Meeting"
+ assert person in e.participants.all()
+ assert e.user.name == uname
+ assert e.created_date.day == now.day
+ assert e.modified_date.day == now.day
+
+
+@pytest.mark.parametrize("allowed_type", ["NOTE"])
+def test_note_event(user, allowed_type):
+ e = SingleDateTimeEvent.objects.create(
+ type_descriptor=allowed_type,
+ short_description="Test short description",
+ datetime="2020-10-10 10:30",
+ comments="The guy I deal with at X Co Ltd is made of cheese,",
+ url="https://evidenceofcheese.com",
+ private=True,
+ user=user
+ )
+ assert e.type_descriptor == allowed_type