diff options
author | Matthew Lemon <lemon@matthewlemon.com> | 2020-10-16 11:05:42 +0100 |
---|---|---|
committer | Matthew Lemon <lemon@matthewlemon.com> | 2020-10-16 11:05:42 +0100 |
commit | eb8497dcd3758d20447d4de977780c2c78a38613 (patch) | |
tree | f5c188ad01ac8db9156db587c821706396671100 /ctrack/register/tests/test_models.py | |
parent | c0067e3dd35f56ad0cf9452f9ef1e8532b6378b4 (diff) |
Improvements to simple event form.
Diffstat (limited to 'ctrack/register/tests/test_models.py')
-rw-r--r-- | ctrack/register/tests/test_models.py | 234 |
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 |