Skip to content
Snippets Groups Projects
Commit e7d11b0d authored by Deaktivert bruker's avatar Deaktivert bruker
Browse files

greg.models: fix PersonIdentities link to Person

A Person may have multiple associated PersonIdentities.  The object
relation link between these data structures was previously introduced
as "person", but is renamed "identities" with this patch.

This changes the access pattern from:

	person.person.all() -> QuerySet[PersonIdentity]

To:

	person.identities.all() -> QuerySet[PersonIdentity]

Fixes: GREG-20
parent 4526cbe4
No related branches found
No related tags found
1 merge request!26Heuristic for telling if guest is registered and verified
...@@ -21,7 +21,7 @@ class PersonRoleFilter(FilterSet): ...@@ -21,7 +21,7 @@ class PersonRoleFilter(FilterSet):
class PersonFilter(FilterSet): class PersonFilter(FilterSet):
verified = BooleanFilter( 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: class Meta:
......
...@@ -153,7 +153,7 @@ class PersonIdentity(BaseModel): ...@@ -153,7 +153,7 @@ class PersonIdentity(BaseModel):
MANUAL = "MANUAL" MANUAL = "MANUAL"
person = models.ForeignKey( 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) type = models.CharField(max_length=16, choices=IdentityType.choices)
source = models.CharField(max_length=256) source = models.CharField(max_length=256)
......
from datetime import (
datetime,
timedelta,
)
from functools import partial from functools import partial
import pytest import pytest
...@@ -5,6 +9,7 @@ import pytest ...@@ -5,6 +9,7 @@ import pytest
from greg.models import ( from greg.models import (
OrganizationalUnit, OrganizationalUnit,
Person, Person,
PersonIdentity,
PersonRole, PersonRole,
Role, Role,
Sponsor, Sponsor,
...@@ -30,7 +35,7 @@ def role_bar() -> Role: ...@@ -30,7 +35,7 @@ def role_bar() -> Role:
@pytest.fixture @pytest.fixture
def person(role_foo, role_bar) -> Person: def person(role_foo: Role, role_bar: Role) -> Person:
person = Person.objects.create( person = Person.objects.create(
first_name="Test", first_name="Test",
last_name="Tester", last_name="Tester",
...@@ -56,9 +61,44 @@ def person(role_foo, role_bar) -> Person: ...@@ -56,9 +61,44 @@ def person(role_foo, role_bar) -> Person:
return 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 @pytest.mark.django_db
def test_add_multiple_roles_to_person(person, role_foo, role_bar): def test_add_multiple_roles_to_person(person, role_foo, role_bar):
person_roles = person.roles.all() person_roles = person.roles.all()
assert len(person_roles) == 2 assert len(person_roles) == 2
assert role_foo in person_roles assert role_foo in person_roles
assert role_bar 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]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment