diff --git a/greg/api/filters.py b/greg/api/filters.py index 86465b1d1a7290dbd3dc9ed816d827e47ff0b3d4..c7af546c6b456316345e0f4977fc2a1675cec7e9 100644 --- a/greg/api/filters.py +++ b/greg/api/filters.py @@ -21,7 +21,7 @@ class PersonRoleFilter(FilterSet): class PersonFilter(FilterSet): verified = BooleanFilter( - field_name="person__verified_by_id", lookup_expr="isnull", exclude=True + field_name="identities__verified_by_id", lookup_expr="isnull", exclude=True ) class Meta: diff --git a/greg/models.py b/greg/models.py index 065104b772ba7a0d870eef57b8e46e410420872b..f50a6e030269233f0064962c269df8f06482a433 100644 --- a/greg/models.py +++ b/greg/models.py @@ -153,7 +153,7 @@ class PersonIdentity(BaseModel): MANUAL = "MANUAL" person = models.ForeignKey( - "Person", on_delete=models.CASCADE, related_name="person" + "Person", on_delete=models.CASCADE, related_name="identities" ) type = models.CharField(max_length=16, choices=IdentityType.choices) source = models.CharField(max_length=256) diff --git a/greg/tests/models/test_person.py b/greg/tests/models/test_person.py index f4aeba5820a90b2ce592f87e6cf1e124b81c2d12..f2417f181e8fa98ef4bda1b84f04e9bfcd666c0c 100644 --- a/greg/tests/models/test_person.py +++ b/greg/tests/models/test_person.py @@ -1,3 +1,7 @@ +from datetime import ( + datetime, + timedelta, +) from functools import partial import pytest @@ -5,6 +9,7 @@ import pytest from greg.models import ( OrganizationalUnit, Person, + PersonIdentity, PersonRole, Role, Sponsor, @@ -30,7 +35,7 @@ def role_bar() -> Role: @pytest.fixture -def person(role_foo, role_bar) -> Person: +def person(role_foo: Role, role_bar: Role) -> Person: person = Person.objects.create( first_name="Test", last_name="Tester", @@ -56,9 +61,44 @@ def person(role_foo, role_bar) -> Person: return person +@pytest.fixture +def a_year_ago() -> datetime: + return datetime.now() - timedelta(days=365) + + +@pytest.fixture +def feide_id(a_year_ago: datetime) -> PersonIdentity: + return PersonIdentity( + type=PersonIdentity.IdentityType.FEIDE_ID, + verified_when=a_year_ago, + ) + + +@pytest.fixture +def passport(a_year_ago: datetime) -> PersonIdentity: + return PersonIdentity( + type=PersonIdentity.IdentityType.PASSPORT, + verified_when=a_year_ago, + ) + + +@pytest.fixture +def feide_verified(person: Person, feide_id: PersonIdentity) -> Person: + person.identities.add(feide_id, bulk=False) + return person + + @pytest.mark.django_db def test_add_multiple_roles_to_person(person, role_foo, role_bar): person_roles = person.roles.all() assert len(person_roles) == 2 assert role_foo in person_roles assert role_bar in person_roles + + +@pytest.mark.django_db +def test_identities(person: Person, feide_id: PersonIdentity, passport: PersonIdentity): + person.identities.add(feide_id, bulk=False) + assert list(person.identities.all()) == [feide_id] + person.identities.add(passport, bulk=False) + assert list(person.identities.all()) == [feide_id, passport]