diff --git a/greg/api/serializers/__init__.py b/greg/api/serializers/__init__.py index ca5bdad3c424bdcde320e7ef21107d2e4870a92f..bc90346e007873421743b9b32f181ab1a08750ce 100644 --- a/greg/api/serializers/__init__.py +++ b/greg/api/serializers/__init__.py @@ -7,5 +7,5 @@ def get_serializer(instance): return { "notification": NotificationSerializer, "person": PersonSerializer, - "role": RoleTypeSerializer, + "role type": RoleTypeSerializer, }.get(instance._meta.verbose_name) diff --git a/greg/models.py b/greg/models.py index 89b98116868821320d64c851b1708e78b8f2a596..c523f781997ce24cb3eef3e4aff35e68fb555dd2 100644 --- a/greg/models.py +++ b/greg/models.py @@ -77,7 +77,7 @@ class Person(BaseModel): # registration_completed_date is set only after accepting consents return ( self.registration_completed_date is not None - and self.registration_completed_date <= datetime.now() + and self.registration_completed_date <= date.today() ) @property @@ -184,7 +184,7 @@ class Notification(BaseModel): meta = models.JSONField(null=True, blank=True) def __repr__(self): - return "{}(id={!r}, identifier={!r}, object_type={!r}, operation={!r}, issued_at={!r}), meta={!r})".format( + return "{}(id={!r}, identifier={!r}, object_type={!r}, operation={!r}, issued_at={!r}, meta={!r})".format( self.__class__.__name__, self.pk, self.identifier, diff --git a/greg/tests/api/test_consent_type.py b/greg/tests/api/test_consent_type.py index e2eaf0f45dff1eff082604f0b554921b4574ff56..42cdb8d4894a3f1676d608895bc6186bde68742c 100644 --- a/greg/tests/api/test_consent_type.py +++ b/greg/tests/api/test_consent_type.py @@ -5,21 +5,6 @@ from rest_framework.reverse import reverse from greg.models import ConsentType -@pytest.fixture -def consent_type_foo() -> ConsentType: - return ConsentType.objects.create( - identifier="test_consent", - name_en="Test1", - name_nb="Test2", - description_en="Test description", - description_nb="Test beskrivelse", - link_en="https://example.org", - link_nb="https://example.org", - valid_from="2018-01-20", - user_allowed_to_change=True, - ) - - @pytest.mark.django_db def test_get_consent_type(client, consent_type_foo: ConsentType): resp = client.get( diff --git a/greg/tests/api/test_health.py b/greg/tests/api/test_health.py new file mode 100644 index 0000000000000000000000000000000000000000..a0de40a24731db8962ac306e5d87cd198f5eed54 --- /dev/null +++ b/greg/tests/api/test_health.py @@ -0,0 +1,8 @@ +import pytest + + +@pytest.mark.django_db +def test_health_says_ok(client): + response = client.get("/api/health/") + assert response.content == b"OK" + assert response.status_code == 200 diff --git a/greg/tests/api/test_person.py b/greg/tests/api/test_person.py index df7475e6dc9799f62d1f67c004081fe1bd44514c..c8632cea5a26b9ddfee2b19e351279b401980573 100644 --- a/greg/tests/api/test_person.py +++ b/greg/tests/api/test_person.py @@ -2,11 +2,11 @@ import datetime from typing import Dict import pytest +from django.core.exceptions import ValidationError from rest_framework import status from rest_framework.reverse import reverse from rest_framework.status import HTTP_200_OK - -from django.core.exceptions import ValidationError +from rest_framework.test import APIClient from greg.models import ( PersonIdentity, @@ -399,18 +399,18 @@ def test_remove_person( @pytest.mark.django_db -def test_add_duplicate_role_fails(client, person_foo: Person, person_foo_role: Role): +def test_add_duplicate_role_fails(client, person_foo: Person, role_person_foo): url = reverse("v1:person_role-list", kwargs={"person_id": person_foo.id}) roles_for_person = client.get(url).json()["results"] assert len(roles_for_person) == 1 role_data = { - "type": person_foo_role.type_id, - "start_date": person_foo_role.start_date, - "end_date": person_foo_role.end_date, - "registered_by": person_foo_role.registered_by, - "unit": person_foo_role.unit_id, + "type": role_person_foo.type_id, + "start_date": role_person_foo.start_date, + "end_date": role_person_foo.end_date, + "registered_by": role_person_foo.registered_by, + "unit": role_person_foo.unit_id, } response = client.post(url, role_data) # If the role cannot be create the return code is 400 @@ -427,7 +427,7 @@ def test_filter_active_includes_person_with_active_role( person_foo: Person, sponsor_guy: Sponsor, unit_foo: OrganizationalUnit, - role_type_test_guest: RoleType, + role_type_test_guest: Role, ): date_today = datetime.date.today() @@ -449,9 +449,35 @@ def test_filter_active_includes_person_with_active_role( @pytest.mark.django_db def test_filter_active_excludes_person_with_no_active_role( - client, person_foo: Person, person_foo_role: Role + client, person_foo: Person, role_person_foo: Role ): url = reverse("v1:person-list") response = client.get(url, {"active": "true"}) results = response.json()["results"] assert len(results) == 0 + + +@pytest.mark.django_db +def test_filter_active_value_false( + client: APIClient, + person_foo: Person, + role_type_test_guest: Role, + sponsor_guy: Sponsor, + unit_foo: OrganizationalUnit, +): + """Check that filter is not used when specified to False""" + date_today = datetime.date.today() + + # Inactive role + Role.objects.create( + person=person_foo, + type=role_type_test_guest, + end_date=date_today - datetime.timedelta(days=1), + registered_by=sponsor_guy, + unit=unit_foo, + ) + + url = reverse("v1:person-list") + response = client.get(url, {"active": False}) + results = response.json()["results"] + assert len(results) == 1 diff --git a/greg/tests/api/test_serializers.py b/greg/tests/api/test_serializers.py new file mode 100644 index 0000000000000000000000000000000000000000..3e3c88038867a873f61020cc7663cb4dd2cced49 --- /dev/null +++ b/greg/tests/api/test_serializers.py @@ -0,0 +1,78 @@ +from collections import OrderedDict + +import pytest + +from greg.api.serializers import ( + NotificationSerializer, + get_serializer, + PersonSerializer, + RoleTypeSerializer, +) +from greg.models import Notification, RoleType, Person + + +@pytest.mark.django_db +def test_get_serializer(): + n = Notification.objects.create( + identifier=5, object_type="foo", operation="bar", issued_at=9, meta="" + ) + p = Person.objects.create() + rt = RoleType.objects.create() + assert get_serializer(n) == NotificationSerializer + assert get_serializer(p) == PersonSerializer + assert get_serializer(rt) == RoleTypeSerializer + + +@pytest.mark.django_db +def test_notificationserializer_falsy_meta(): + ns = NotificationSerializer() + n = Notification.objects.create( + identifier=5, object_type="foo", operation="bar", issued_at=9, meta="" + ) + expected = OrderedDict( + { + "identifier": 5, + "object_type": "foo", + "operation": "bar", + "iat": 9, + } + ) + assert ns.to_representation(n) == expected + + +@pytest.mark.django_db +def test_notificationserializer_no_meta(): + ns = NotificationSerializer() + n = Notification.objects.create( + identifier=5, + object_type="foo", + operation="bar", + issued_at=9, + ) + expected = OrderedDict( + { + "identifier": 5, + "object_type": "foo", + "operation": "bar", + "iat": 9, + } + ) + assert ns.to_representation(n) == expected + + +@pytest.mark.django_db +def test_notificationserializer_meta(): + ns = NotificationSerializer() + n = Notification.objects.create( + identifier=5, object_type="foo", operation="bar", issued_at=9, meta="baz" + ) + expected = OrderedDict( + { + "identifier": 5, + "object_type": "foo", + "operation": "bar", + "meta": "baz", + "iat": 9, + } + ) + assert ns.to_representation(n) == expected diff --git a/greg/tests/api/test_sponsor.py b/greg/tests/api/test_sponsor.py index ce444dbbf5e0dbd58527895c81381a4ffcf1b635..65fed98daccf1cdf0f7cba63bfdd0b2d44dafb98 100644 --- a/greg/tests/api/test_sponsor.py +++ b/greg/tests/api/test_sponsor.py @@ -28,12 +28,12 @@ def test_add_sponsor(client): @pytest.mark.django_db -def test_sponsor_guest_list(client, sponsor_guy, person_foo_role): +def test_sponsor_guest_list(client, sponsor_guy, role_person_foo): url = reverse("v1:sponsor_guests-list", kwargs={"sponsor_id": sponsor_guy.id}) guests_for_sponsor = client.get(url).json()["results"] assert len(guests_for_sponsor) == 1 - assert guests_for_sponsor[0]["id"] == person_foo_role.person_id + assert guests_for_sponsor[0]["id"] == role_person_foo.person_id @pytest.mark.django_db diff --git a/greg/tests/conftest.py b/greg/tests/conftest.py index bf70862847668e3623708bdd7bfaf35f9bab9d5a..15c03b927e3141abc69b58216bbc283a0b4c3fe4 100644 --- a/greg/tests/conftest.py +++ b/greg/tests/conftest.py @@ -7,12 +7,16 @@ from django.contrib.auth import get_user_model import pytest from greg.models import ( + Consent, + Notification, Person, Sponsor, + SponsorOrganizationalUnit, PersonIdentity, Role, RoleType, OrganizationalUnit, + ConsentType, ) # faker spams the logs with localisation warnings @@ -29,38 +33,50 @@ def client() -> APIClient: return client +@pytest.fixture +def pcm_mock(): + class PCMMock: + def publish(self, *args, **kwargs): + return True + + return PCMMock() + + @pytest.fixture def person_foo() -> Person: - return Person.objects.create( + pe = Person.objects.create( first_name="Foo", last_name="Foo", date_of_birth="2001-01-27", email="test@example.org", mobile_phone="123456788", ) + return Person.objects.get(id=pe.id) @pytest.fixture def person_bar() -> Person: - return Person.objects.create( + pe = Person.objects.create( first_name="Bar", last_name="Bar", date_of_birth="2000-07-01", email="test2@example.org", mobile_phone="123456789", ) + return Person.objects.get(id=pe.id) @pytest.fixture def sponsor_guy() -> Sponsor: - return Sponsor.objects.create( + sp = Sponsor.objects.create( feide_id="guy@example.org", first_name="Sponsor", last_name="Guy" ) + return Sponsor.objects.get(id=sp.id) @pytest.fixture def person_foo_verified(person_foo, sponsor_guy) -> PersonIdentity: - return PersonIdentity.objects.create( + pi = PersonIdentity.objects.create( person=person_foo, type=PersonIdentity.IdentityType.PASSPORT, source="Test", @@ -69,36 +85,40 @@ def person_foo_verified(person_foo, sponsor_guy) -> PersonIdentity: verified_by=sponsor_guy, verified_when="2021-06-15", ) + return PersonIdentity.objects.get(id=pi.id) @pytest.fixture def person_foo_not_verified(person_foo) -> PersonIdentity: - return PersonIdentity.objects.create( + pi = PersonIdentity.objects.create( person=person_foo, type=PersonIdentity.IdentityType.DRIVERS_LICENSE, source="Test", value="12345", ) + return PersonIdentity.objects.get(id=pi.id) @pytest.fixture() def role_type_test_guest() -> RoleType: - return RoleType.objects.create(identifier="Test Guest") + rt = RoleType.objects.create(identifier="Test Guest") + return RoleType.objects.get(id=rt.id) @pytest.fixture def unit_foo() -> OrganizationalUnit: - return OrganizationalUnit.objects.create(orgreg_id="12345", name_en="foo_unit") + ou = OrganizationalUnit.objects.create(orgreg_id="12345", name_en="foo_unit") + return OrganizationalUnit.objects.get(id=ou.id) @pytest.fixture -def person_foo_role( +def role_person_foo( person_foo: Person, role_type_test_guest: RoleType, sponsor_guy: Sponsor, unit_foo: OrganizationalUnit, ) -> Role: - return Role.objects.create( + role = Role.objects.create( person=person_foo, type=role_type_test_guest, start_date="2021-08-02", @@ -106,3 +126,87 @@ def person_foo_role( registered_by=sponsor_guy, unit=unit_foo, ) + return Role.objects.get(id=role.id) + + +@pytest.fixture +def person() -> Person: + pe = Person.objects.create( + first_name="Test", + last_name="Tester", + date_of_birth="2000-01-27", + email="test@example.org", + mobile_phone="123456789", + ) + return Person.objects.get(id=pe.id) + + +@pytest.fixture +def consent_type() -> ConsentType: + ct = ConsentType.objects.create( + identifier="it-guidelines", + name_en="IT Guidelines", + name_nb="IT Regelverk", + description_en="IT Guidelines description", + description_nb="IT Regelverk beskrivelse", + link_en="https://example.org/it-guidelines", + link_nb="https://example.org/it-guidelines", + user_allowed_to_change=False, + ) + return ConsentType.objects.get(id=ct.id) + + +@pytest.fixture +def role_type_foo() -> RoleType: + rt = RoleType.objects.create(identifier="role_foo", name_en="Role Foo") + return RoleType.objects.get(id=rt.id) + + +@pytest.fixture +def role_type_bar() -> RoleType: + rt = RoleType.objects.create(identifier="role_bar", name_en="Role Bar") + return RoleType.objects.get(id=rt.id) + + +@pytest.fixture +def consent_fixture(person, consent_type): + consent_given_date = "2021-06-20" + Consent.objects.create( + person=person, type=consent_type, consent_given_at=consent_given_date + ) + return Consent.objects.get(id=1) + + +@pytest.fixture +def consent_type_foo() -> ConsentType: + return ConsentType.objects.create( + identifier="test_consent", + name_en="Test1", + name_nb="Test2", + description_en="Test description", + description_nb="Test beskrivelse", + link_en="https://example.org", + link_nb="https://example.org", + valid_from="2018-01-20", + user_allowed_to_change=True, + ) + + +@pytest.fixture +def sponsor_org_unit(sponsor_guy, unit_foo): + SponsorOrganizationalUnit.objects.create( + sponsor=sponsor_guy, organizational_unit=unit_foo, hierarchical_access=False + ) + return SponsorOrganizationalUnit.objects.get(id=1) + + +@pytest.fixture +def notification(): + Notification.objects.create( + identifier=5, + object_type="foo", + operation="bar", + issued_at=1234, + meta="foometa", + ) + return Notification.objects.get(id=1) diff --git a/greg/tests/management/__init__.py b/greg/tests/management/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/greg/tests/management/test_notification_publisher.py b/greg/tests/management/test_notification_publisher.py new file mode 100644 index 0000000000000000000000000000000000000000..76f937516c80fbdb8225048527235d7423b70823 --- /dev/null +++ b/greg/tests/management/test_notification_publisher.py @@ -0,0 +1,14 @@ +import pytest + +from greg.management.commands.start_notification_publisher import ( + handle_one_notification, +) +from greg.models import Notification + + +@pytest.mark.django_db +def test_handle_one_notification(notification, pcm_mock): + """Check that Notifications are deleted when published to message queue""" + assert Notification.objects.count() == 1 + handle_one_notification(notification, pcm_mock, exchange="bar") + assert Notification.objects.count() == 0 diff --git a/greg/tests/models/test_consent.py b/greg/tests/models/test_consent.py index df6c6483b70fc0db99811dfb3d79b6387cba5b87..9efa4b68ddf6c04c19fbe74c1164b66b46d7e293 100644 --- a/greg/tests/models/test_consent.py +++ b/greg/tests/models/test_consent.py @@ -9,31 +9,6 @@ from greg.models import ( ) -@pytest.fixture -def person() -> Person: - return Person.objects.create( - first_name="Test", - last_name="Tester", - date_of_birth="2000-01-27", - email="test@example.org", - mobile_phone="123456789", - ) - - -@pytest.fixture() -def consent_type() -> ConsentType: - return ConsentType.objects.create( - identifier="it-guidelines", - name_en="IT Guidelines", - name_nb="IT Regelverk", - description_en="IT Guidelines description", - description_nb="IT Regelverk beskrivelse", - link_en="https://example.org/it-guidelines", - link_nb="https://example.org/it-guidelines", - user_allowed_to_change=False, - ) - - @pytest.mark.django_db def test_add_consent_to_person(person: Person, consent_type: ConsentType): consent_given_date = "2021-06-20" @@ -58,3 +33,12 @@ def test_add_not_acknowledged_consent_to_person( assert consents[0].person_id == person.id assert consents[0].type_id == consent_type.id assert consents[0].consent_given_at is None + + +@pytest.mark.django_db +def test_consent_repr(consent_fixture): + today = datetime.date.today() + assert ( + repr(consent_fixture) + == f"Consent(id=1, person=Person(id=1, first_name='Test', last_name='Tester'), type=ConsentType(id=1, identifier='it-guidelines', name_en='IT Guidelines', valid_from={today!r}, user_allowed_to_change=False), consent_given_at=datetime.date(2021, 6, 20))" + ) diff --git a/greg/tests/models/test_consenttype.py b/greg/tests/models/test_consenttype.py new file mode 100644 index 0000000000000000000000000000000000000000..d69e340b417f95c560a9cd907c1d28f3fec47b1a --- /dev/null +++ b/greg/tests/models/test_consenttype.py @@ -0,0 +1,17 @@ +from datetime import date + +import pytest + + +@pytest.mark.django_db +def test_consenttype_repr(consent_type): + today = date.today() + assert ( + repr(consent_type) + == f"ConsentType(id=1, identifier='it-guidelines', name_en='IT Guidelines', valid_from={today!r}, user_allowed_to_change=False)" + ) + + +@pytest.mark.django_db +def test_consenttype_str(consent_type): + assert str(consent_type) == "IT Guidelines (it-guidelines)" diff --git a/greg/tests/models/test_notification.py b/greg/tests/models/test_notification.py new file mode 100644 index 0000000000000000000000000000000000000000..5f989054cfd83c247247b9bc2045440b139102b2 --- /dev/null +++ b/greg/tests/models/test_notification.py @@ -0,0 +1,9 @@ +import pytest + + +@pytest.mark.django_db +def test_notification_repr(notification): + assert ( + repr(notification) + == "Notification(id=1, identifier=5, object_type='foo', operation='bar', issued_at=1234, meta='foometa')" + ) diff --git a/greg/tests/models/test_organizational_unit.py b/greg/tests/models/test_organizational_unit.py index dd61b87e016fc572805b2cb936c96f051a87f5d2..cc318d824b87df964f095cc8f3bd43810f8e5802 100644 --- a/greg/tests/models/test_organizational_unit.py +++ b/greg/tests/models/test_organizational_unit.py @@ -8,3 +8,16 @@ def test_set_parent(): parent = OrganizationalUnit.objects.create(orgreg_id="parent") child = OrganizationalUnit.objects.create(orgreg_id="child", parent=parent) assert list(OrganizationalUnit.objects.filter(parent__id=parent.id)) == [child] + + +@pytest.mark.django_db +def test_org_repr(unit_foo): + assert ( + repr(unit_foo) + == "OrganizationalUnit(id=1, orgreg_id='12345', name_en='foo_unit', parent=None)" + ) + + +@pytest.mark.django_db +def test_org_str(unit_foo): + assert str(unit_foo) == "foo_unit (12345)" diff --git a/greg/tests/models/test_person.py b/greg/tests/models/test_person.py index 52b0fd337abf739f528bf3f61bb9eb1c6b3a6703..950820667e386cfd0c4e9cf1c23ead0ef4e3ae99 100644 --- a/greg/tests/models/test_person.py +++ b/greg/tests/models/test_person.py @@ -23,52 +23,49 @@ role_with = partial( available_in_search=True, ) - -@pytest.fixture -def role_type_foo() -> RoleType: - return RoleType.objects.create(identifier="role_foo", name_en="Role Foo") - - -@pytest.fixture -def role_type_bar() -> RoleType: - return RoleType.objects.create(identifier="role_bar", name_en="Role Bar") +_a_year_ago = (datetime.now() - timedelta(days=365)).date() +_a_year_into_future = (datetime.now() + timedelta(days=365)).date() @pytest.fixture -def person(role_type_foo: RoleType, role_type_bar: RoleType) -> Person: - person = Person.objects.create( +def person_registered_past() -> Person: + Person.objects.create( first_name="Test", last_name="Tester", date_of_birth="2000-01-27", email="test@example.org", mobile_phone="123456789", + registration_completed_date=_a_year_ago, ) - return person + return Person.objects.get(id=1) @pytest.fixture -def a_year_ago() -> datetime: - return datetime.now() - timedelta(days=365) - - -@pytest.fixture -def a_year_into_future() -> datetime: - return datetime.now() + timedelta(days=365) +def person_registered_future() -> Person: + Person.objects.create( + first_name="Test", + last_name="Tester", + date_of_birth="2000-01-27", + email="test@example.org", + mobile_phone="123456789", + registration_completed_date=_a_year_into_future, + ) + return Person.objects.get(id=1) @pytest.fixture -def feide_id(a_year_ago: datetime) -> PersonIdentity: +def feide_id() -> PersonIdentity: return PersonIdentity( type=PersonIdentity.IdentityType.FEIDE_ID, - verified_when=a_year_ago, + verified_when=_a_year_ago, ) @pytest.fixture -def passport(a_year_ago: datetime) -> PersonIdentity: +def passport() -> PersonIdentity: return PersonIdentity( type=PersonIdentity.IdentityType.PASSPORT, - verified_when=a_year_ago, + verified_when=_a_year_ago, ) @@ -78,10 +75,10 @@ def unverified_passport() -> PersonIdentity: @pytest.fixture -def future_identity(a_year_into_future: datetime) -> PersonIdentity: +def future_identity() -> PersonIdentity: return PersonIdentity( type=PersonIdentity.IdentityType.NATIONAL_ID_CARD, - verified_when=a_year_into_future, + verified_when=_a_year_into_future, ) @@ -126,39 +123,37 @@ def test_is_registered_incomplete(person): @pytest.mark.django_db -def test_is_registered_completed_in_past(person, a_year_ago): - person.registration_completed_date = a_year_ago - assert person.is_registered +def test_is_registered_completed_in_past(person_registered_past): + assert person_registered_past.is_registered @pytest.mark.django_db -def test_is_registered_completed_in_future(person, a_year_into_future): - person.registration_completed_date = a_year_into_future - assert not person.is_registered +def test_is_registered_completed_in_future(person_registered_future): + assert not person_registered_future.is_registered @pytest.mark.django_db @pytest.mark.parametrize("identity_type", PersonIdentity.IdentityType) -def test_is_verified(identity_type, a_year_ago, person): - identity = PersonIdentity(type=identity_type, verified_when=a_year_ago) +def test_is_verified(identity_type, person): + identity = PersonIdentity(type=identity_type, verified_when=_a_year_ago) person.identities.add(identity, bulk=False) assert person.is_verified @pytest.mark.django_db -def test_is_verified_multiple_identities(person, feide_id, passport): +def test_test_is_verified_multiple_identities(person, feide_id, passport): person.identities.add(feide_id, passport, bulk=False) assert person.is_verified @pytest.mark.django_db -def is_verified_when_identity_is_unverified(person, unverified_passport): +def test_is_verified_when_identity_is_unverified(person, unverified_passport): person.identities.add(unverified_passport, bulk=False) assert not person.is_verified @pytest.mark.django_db -def is_verified_mixed_verified_and_unverified_identities( +def test_is_verified_mixed_verified_and_unverified_identities( person, feide_id, unverified_passport, @@ -169,6 +164,16 @@ def is_verified_mixed_verified_and_unverified_identities( @pytest.mark.django_db -def is_verified_in_future(person, future_identity): +def test_is_verified_in_future(person, future_identity): person.identities.add(future_identity, bulk=False) assert not person.is_verified + + +@pytest.mark.django_db +def test_person_str(person: Person): + assert str(person) == "Test Tester (1)" + + +@pytest.mark.django_db +def test_person_repr(person: Person): + assert repr(person) == "Person(id=1, first_name='Test', last_name='Tester')" diff --git a/greg/tests/models/test_personidentity.py b/greg/tests/models/test_personidentity.py new file mode 100644 index 0000000000000000000000000000000000000000..e88e82a566a7fbdfb9b65a47c6fe95ea5767d50e --- /dev/null +++ b/greg/tests/models/test_personidentity.py @@ -0,0 +1,9 @@ +import pytest + + +@pytest.mark.django_db +def test_personidentity_repr(person_foo_verified): + assert ( + repr(person_foo_verified) + == "PersonIdentity(id=1, type='PASSPORT', source='Test', value='12345', verified_by=Sponsor(id=1, feide_id='guy@example.org', first_name='Sponsor', last_name='Guy'), verified_when=datetime.date(2021, 6, 15))" + ) diff --git a/greg/tests/models/test_role.py b/greg/tests/models/test_role.py new file mode 100644 index 0000000000000000000000000000000000000000..6b88a5a15bfcd81ed4d2cb215ab23c4393a04d77 --- /dev/null +++ b/greg/tests/models/test_role.py @@ -0,0 +1,9 @@ +import pytest + + +@pytest.mark.django_db +def test_role_repr(role_person_foo): + assert ( + repr(role_person_foo) + == "Role(id=1, person=Person(id=1, first_name='Foo', last_name='Foo'), type=RoleType(pk=1, identifier='Test Guest', name_nb='', name_en=''))" + ) diff --git a/greg/tests/models/test_roletype.py b/greg/tests/models/test_roletype.py new file mode 100644 index 0000000000000000000000000000000000000000..cd17ca43710256b0a098c2befb685d97d1b161ee --- /dev/null +++ b/greg/tests/models/test_roletype.py @@ -0,0 +1,14 @@ +import pytest + + +@pytest.mark.django_db +def test_roletype_str(role_type_foo): + assert str(role_type_foo) == "Role Foo (role_foo)" + + +@pytest.mark.django_db +def test_role_type_repr(role_type_foo): + assert ( + repr(role_type_foo) + == "RoleType(pk=1, identifier='role_foo', name_nb='', name_en='Role Foo')" + ) diff --git a/greg/tests/models/test_scheduletask.py b/greg/tests/models/test_scheduletask.py new file mode 100644 index 0000000000000000000000000000000000000000..37765c773be08fa322f8fa0668035eb86c01a5a1 --- /dev/null +++ b/greg/tests/models/test_scheduletask.py @@ -0,0 +1,17 @@ +import pytest + +from greg.models import ScheduleTask + + +@pytest.fixture +def scheduletask(): + ScheduleTask.objects.create(name="foo", last_completed="2020-10-15 23:04") + return ScheduleTask.objects.get(id=1) + + +@pytest.mark.django_db +def test_scheduletask_repr(scheduletask): + assert ( + repr(scheduletask) + == "ScheduleTask(id=1, name='foo', last_completed=datetime.datetime(2020, 10, 15, 23, 4, tzinfo=<UTC>))" + ) diff --git a/greg/tests/models/test_sponsor.py b/greg/tests/models/test_sponsor.py index e82ec2a29d5276bace3bf1dde8c07c4456b37729..9f6db4f60574081b3069570a5c1632daed6d1f61 100644 --- a/greg/tests/models/test_sponsor.py +++ b/greg/tests/models/test_sponsor.py @@ -50,3 +50,16 @@ def test_add_muliple_sponsors_to_unit(sponsor_foo, sponsor_bar, unit1, unit2): assert list(sponsor_bar.units.all()) == [unit1] assert list(Sponsor.objects.filter(units=unit1.id)) == [sponsor_foo, sponsor_bar] assert list(Sponsor.objects.filter(units=unit2.id)) == [] + + +@pytest.mark.django_db +def test_sponsor_repr(sponsor_guy): + assert ( + repr(sponsor_guy) + == "Sponsor(id=1, feide_id='guy@example.org', first_name='Sponsor', last_name='Guy')" + ) + + +@pytest.mark.django_db +def test_sponsor_str(sponsor_guy): + assert str(sponsor_guy) == "guy@example.org (Sponsor Guy)" diff --git a/greg/tests/models/test_sponsor_orgunit.py b/greg/tests/models/test_sponsor_orgunit.py new file mode 100644 index 0000000000000000000000000000000000000000..317815f7d696142147e17e91628d8b2ca42e3de3 --- /dev/null +++ b/greg/tests/models/test_sponsor_orgunit.py @@ -0,0 +1,9 @@ +import pytest + + +@pytest.mark.django_db +def test_sponsor_org_repr(sponsor_org_unit): + assert ( + repr(sponsor_org_unit) + == "SponsorOrganizationalUnit(id=1, sponsor=Sponsor(id=1, feide_id='guy@example.org', first_name='Sponsor', last_name='Guy'), organizational_unit=OrganizationalUnit(id=1, orgreg_id='12345', name_en='foo_unit', parent=None), hierarchical_access=False)" + ) diff --git a/greg/tests/test_expire_role.py b/greg/tests/test_expire_role.py index b1a45bd4f62b7409347ccbfecce7270681d2fd26..df240644cc9b1970e44a8b49560f6b21b816d228 100644 --- a/greg/tests/test_expire_role.py +++ b/greg/tests/test_expire_role.py @@ -23,48 +23,22 @@ def role_task(): ) -@pytest.fixture -def role_type_bar() -> RoleType: - return RoleType.objects.create(identifier="role_bar", name_en="Role Bar") - - -@pytest.fixture -def person() -> Person: - return Person.objects.create( - first_name="Test", - last_name="Tester", - date_of_birth="2000-01-27", - email="test@example.org", - mobile_phone="123456789", - ) - - -@pytest.fixture -def organizational_unit() -> OrganizationalUnit: - return OrganizationalUnit.objects.create(orgreg_id="12345", name_en="Test unit") - - -@pytest.fixture -def sponsor() -> Sponsor: - return Sponsor.objects.create(feide_id="sponsor@example.org") - - @pytest.fixture def role( person: Person, role_type_bar: RoleType, - organizational_unit: OrganizationalUnit, - sponsor: Sponsor, + unit_foo: OrganizationalUnit, + sponsor_guy: Sponsor, ) -> Role: return Role.objects.create( person=person, type=role_type_bar, - unit=organizational_unit, + unit=unit_foo, start_date="2020-03-05", end_date=datetime.today() + timedelta(days=30), contact_person_unit="Contact Person", available_in_search=True, - registered_by=sponsor, + registered_by=sponsor_guy, ) diff --git a/greg/tests/test_notifications.py b/greg/tests/test_notifications.py index 88437f6cda911e29697592aa0012ccc56e5317cb..ac4cf3d71e54704e18df2554d3fe8754371f160f 100644 --- a/greg/tests/test_notifications.py +++ b/greg/tests/test_notifications.py @@ -13,22 +13,6 @@ from greg.models import ( ) -@pytest.fixture -def person() -> Person: - return Person.objects.create( - first_name="Test", - last_name="Tester", - date_of_birth="2000-01-27", - email="test@example.org", - mobile_phone="123456789", - ) - - -@pytest.fixture -def role_type_foo() -> RoleType: - return RoleType.objects.create(identifier="role_foo", name_en="Role Foo") - - @pytest.fixture def org_unit_bar() -> OrganizationalUnit: return OrganizationalUnit.objects.create(orgreg_id="bar_unit") @@ -39,20 +23,6 @@ def sponsor() -> Sponsor: return Sponsor.objects.create(feide_id="sponsor_id") -@pytest.fixture -def consent_type() -> ConsentType: - return ConsentType.objects.create( - identifier="it-guidelines", - name_en="IT Guidelines", - name_nb="IT Regelverk", - description_en="IT Guidelines description", - description_nb="IT Regelverk beskrivelse", - link_en="https://example.org/it-guidelines", - link_nb="https://example.org/it-guidelines", - user_allowed_to_change=False, - ) - - @pytest.fixture def person_identity(person: Person) -> PersonIdentity: return PersonIdentity.objects.create( diff --git a/greg/tests/test_signals.py b/greg/tests/test_signals.py new file mode 100644 index 0000000000000000000000000000000000000000..f54eafb24d11f82bd2186bb3b29e1aa85f0cc305 --- /dev/null +++ b/greg/tests/test_signals.py @@ -0,0 +1,19 @@ +import pytest + +from greg.models import Notification + + +@pytest.mark.django_db +def test_delete_signal_person(person_foo): + """Check that a Notification is created when a Person object is deleted.""" + assert Notification.objects.count() == 1 + person_foo.delete() + assert Notification.objects.count() == 2 + + +@pytest.mark.django_db +def test_delete_signal_ou(unit_foo): + """Check that a Notification is not created when an OrganizationalUnit is deleted.""" + assert Notification.objects.count() == 0 + unit_foo.delete() + assert Notification.objects.count() == 0