Skip to content
Snippets Groups Projects
Commit 2be8c20a authored by tkm's avatar tkm
Browse files

Merge branch 'GREG-378' into 'master'

Add API endpoint for identities

See merge request !435
parents 354dd014 d8f42397
No related branches found
No related tags found
1 merge request!435Add API endpoint for identities
Pipeline #237917 passed
......@@ -65,7 +65,11 @@ class PersonFilter(FilterSet):
class IdentityFilter(FilterSet):
class Meta:
model = Identity
fields = ["type", "verified_by_id"]
fields = {
"type": ["exact"],
"verified_by_id": ["exact"],
"value": ["exact", "startswith"],
}
class PersonConsentFilter(FilterSet):
......
......@@ -5,11 +5,12 @@ from rest_framework.routers import DefaultRouter
from greg.api.views.consent_type import ConsentTypeViewSet
from greg.api.views.invitation import InvitationViewSet
from greg.api.views.identity import IdentityViewSet
from greg.api.views.organizational_unit import OrganizationalUnitViewSet
from greg.api.views.person import (
RoleViewSet,
PersonViewSet,
IdentityViewSet,
PersonIdentityViewSet,
ConsentViewSet,
)
from greg.api.views.role_type import RoleTypeViewSet
......@@ -45,12 +46,12 @@ urlpatterns += [
),
re_path(
r"^persons/(?P<person_id>[0-9]+)/identities$",
IdentityViewSet.as_view({"get": "list", "post": "create"}),
PersonIdentityViewSet.as_view({"get": "list", "post": "create"}),
name="person_identity-list",
),
re_path(
r"^persons/(?P<person_id>[0-9]+)/identities/(?P<id>[0-9]+)$",
IdentityViewSet.as_view(
PersonIdentityViewSet.as_view(
{"get": "retrieve", "delete": "destroy", "patch": "partial_update"}
),
name="person_identity-detail",
......@@ -89,4 +90,9 @@ urlpatterns += [
PersonSearchSet.as_view({"get": "list"}),
name="person_search-list",
),
re_path(
"identities/",
IdentityViewSet.as_view({"get": "list"}),
name="identities-list",
),
]
from django_filters import rest_framework as filters
from rest_framework import viewsets, permissions
from greg.api.filters import IdentityFilter
from greg.api.pagination import PrimaryKeyCursorPagination
from greg.api.serializers.identity import IdentitySerializer
from greg.models import Identity
class IdentityViewSet(viewsets.ModelViewSet):
"""
Identity API
"""
queryset = Identity.objects.all().order_by("id")
serializer_class = IdentitySerializer
pagination_class = PrimaryKeyCursorPagination
permission_classes = (permissions.IsAdminUser,)
filter_backends = (filters.DjangoFilterBackend,)
filterset_class = IdentityFilter
......@@ -133,7 +133,7 @@ class RoleViewSet(viewsets.ModelViewSet):
serializer.save(person_id=person_id)
class IdentityViewSet(viewsets.ModelViewSet):
class PersonIdentityViewSet(viewsets.ModelViewSet):
"""
Person identity API
"""
......
import pytest
from rest_framework.reverse import reverse
from greg.models import Identity
@pytest.mark.django_db
def test_get_identity(client, identity_norwegian_national_id_number, person):
response = client.get(
reverse(
"v1:identities-list",
),
data={
"type": identity_norwegian_national_id_number.type,
"value": identity_norwegian_national_id_number.value,
},
)
data = response.json()["results"][0]
assert data["type"] == identity_norwegian_national_id_number.type
assert data["value"] == identity_norwegian_national_id_number.value
assert data["person"] == person.id
@pytest.mark.django_db
def test_get_identity_value_startswith(
client, identity_us_passport_1, identity_us_passport_2
):
response = client.get(
reverse(
"v1:identities-list",
),
data={"type": Identity.IdentityType.PASSPORT_NUMBER, "value_startswith": "US-"},
)
data = response.json()["results"]
assert len(data) == 2
......@@ -61,6 +61,39 @@ def pcm_mock():
return PCMMock()
@pytest.fixture
def identity_norwegian_national_id_number(person) -> Identity:
pi = Identity.objects.create(
person=person,
type=Identity.IdentityType.NORWEGIAN_NATIONAL_ID_NUMBER,
source="Test",
value="12345",
)
return Identity.objects.get(id=pi.id)
@pytest.fixture
def identity_us_passport_1(person) -> Identity:
pi = Identity.objects.create(
person=person,
type=Identity.IdentityType.PASSPORT_NUMBER,
source="Test",
value="US-12345",
)
return Identity.objects.get(id=pi.id)
@pytest.fixture
def identity_us_passport_2(person) -> Identity:
pi = Identity.objects.create(
person=person,
type=Identity.IdentityType.PASSPORT_NUMBER,
source="Test",
value="US-67890",
)
return Identity.objects.get(id=pi.id)
@pytest.fixture
def person() -> Person:
pe = Person.objects.create(
......
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