Skip to content
Snippets Groups Projects
Commit e53b6255 authored by Tore.Brede's avatar Tore.Brede
Browse files

Merge branch 'add_sponsor_guest_endpoint' into 'master'

Add sponsor guest endpoint

See merge request !20
parents a33be00e 15b2c113
No related branches found
No related tags found
1 merge request!20Add sponsor guest endpoint
Pipeline #89702 passed
......@@ -17,7 +17,7 @@ from greg.api.views.person import (
)
from greg.api.views.role import RoleViewSet
from greg.api.views.health import Health
from greg.api.views.sponsor import SponsorViewSet
from greg.api.views.sponsor import SponsorViewSet, SponsorGuestsViewSet
router = DefaultRouter()
router.register(r"persons", PersonViewSet, basename="person")
......@@ -59,4 +59,9 @@ urlpatterns += [
PersonIdentityViewSet.as_view({"delete": "destroy", "patch": "partial_update"}),
name="person_identity-detail",
),
re_path(
r"^sponsors/(?P<sponsor_id>[0-9]+)/guests/$",
SponsorGuestsViewSet.as_view({"get": "list"}),
name="sponsor_guests-list",
),
]
from rest_framework.viewsets import ReadOnlyModelViewSet
from drf_spectacular.utils import extend_schema, OpenApiParameter
from rest_framework import mixins
from rest_framework.viewsets import ReadOnlyModelViewSet, GenericViewSet
from greg.api.pagination import PrimaryKeyCursorPagination
from greg.api.serializers import PersonSerializer
from greg.api.serializers.sponsor import SponsorSerializer
from greg.models import Sponsor
from greg.models import Sponsor, Person
class SponsorViewSet(ReadOnlyModelViewSet):
......@@ -12,3 +15,29 @@ class SponsorViewSet(ReadOnlyModelViewSet):
serializer_class = SponsorSerializer
pagination_class = PrimaryKeyCursorPagination
lookup_field = "id"
@extend_schema(
parameters=[
OpenApiParameter(
name="sponsor_id",
description="Sponsor ID",
location=OpenApiParameter.PATH,
required=True,
type=int,
)
]
)
class SponsorGuestsViewSet(mixins.ListModelMixin, GenericViewSet):
queryset = Person.objects.all().order_by("id")
serializer_class = PersonSerializer
pagination_class = PrimaryKeyCursorPagination
lookup_field = "id"
def get_queryset(self):
qs = self.queryset
if not self.kwargs:
return qs.none()
sponsor_id = self.kwargs["sponsor_id"]
qs = qs.filter(person_roles__registered_by=sponsor_id).order_by("id")
return qs
......@@ -6,7 +6,6 @@ from rest_framework.reverse import reverse
from rest_framework.status import HTTP_200_OK
from greg.models import (
Person,
PersonIdentity,
Sponsor,
Role,
......@@ -15,56 +14,6 @@ from greg.models import (
)
@pytest.fixture
def person_foo() -> Person:
return Person.objects.create(
first_name="Foo",
last_name="Foo",
date_of_birth="2001-01-27",
email="test@example.org",
mobile_phone="123456788",
)
@pytest.fixture
def person_bar() -> Person:
return Person.objects.create(
first_name="Bar",
last_name="Bar",
date_of_birth="2000-07-01",
email="test2@example.org",
mobile_phone="123456789",
)
@pytest.fixture
def sponsor_guy() -> Sponsor:
return Sponsor.objects.create(feide_id="guy@example.org")
@pytest.fixture
def person_foo_verified(person_foo, sponsor_guy) -> PersonIdentity:
return PersonIdentity.objects.create(
person=person_foo,
type=PersonIdentity.IdentityType.PASSPORT,
source="Test",
value="12345",
verified=PersonIdentity.Verified.MANUAL,
verified_by=sponsor_guy,
verified_when="2021-06-15",
)
@pytest.fixture
def person_foo_not_verified(person_foo) -> PersonIdentity:
return PersonIdentity.objects.create(
person=person_foo,
type=PersonIdentity.IdentityType.DRIVERS_LICENSE,
source="Test",
value="12345",
)
@pytest.fixture
def role_visiting_professor() -> Role:
return Role.objects.create(
......@@ -84,21 +33,11 @@ def unit_human_resources() -> OrganizationalUnit:
)
@pytest.fixture()
def role_test_guest() -> Role:
return Role.objects.create(type="Test Guest")
@pytest.fixture()
def sponsor_bar() -> Sponsor:
return Sponsor.objects.create(feide_id="bar")
@pytest.fixture
def unit_foo() -> OrganizationalUnit:
return OrganizationalUnit.objects.create(orgreg_id="12345", name_en="foo_unit")
@pytest.fixture
def role_data_guest(
role_test_guest: Role, sponsor_bar: Sponsor, unit_foo: OrganizationalUnit
......
import pytest
from rest_framework.reverse import reverse
from greg.models import Role, Sponsor, OrganizationalUnit, PersonRole, Person
@pytest.fixture
def person_foo_role(
person_foo: Person,
role_test_guest: Role,
sponsor_guy: Sponsor,
unit_foo: OrganizationalUnit,
) -> PersonRole:
return PersonRole.objects.create(
person=person_foo,
role=role_test_guest,
start_date="2021-08-02",
end_date="2021-08-06",
registered_by=sponsor_guy,
unit=unit_foo,
)
@pytest.mark.django_db
def test_sponsor_guest_list(client, sponsor_guy, person_foo_role):
url = reverse("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
@pytest.mark.django_db
def test_sponsor_empty_guest_list(client, sponsor_guy):
url = reverse("sponsor_guests-list", kwargs={"sponsor_id": sponsor_guy.id})
guests_for_sponsor = client.get(url).json()["results"]
assert len(guests_for_sponsor) == 0
......@@ -4,11 +4,12 @@ from rest_framework.authtoken.models import Token
from rest_framework.test import APIClient
from django.contrib.auth import get_user_model
import pytest
from greg.models import Person, Sponsor, PersonIdentity, Role, OrganizationalUnit
# faker spams the logs with localisation warnings
# see https://github.com/joke2k/faker/issues/753
import pytest
logging.getLogger("faker").setLevel(logging.ERROR)
......@@ -19,3 +20,63 @@ def client() -> APIClient:
client = APIClient()
client.credentials(HTTP_AUTHORIZATION=f"Token {token.key}")
return client
@pytest.fixture
def person_foo() -> Person:
return Person.objects.create(
first_name="Foo",
last_name="Foo",
date_of_birth="2001-01-27",
email="test@example.org",
mobile_phone="123456788",
)
@pytest.fixture
def person_bar() -> Person:
return Person.objects.create(
first_name="Bar",
last_name="Bar",
date_of_birth="2000-07-01",
email="test2@example.org",
mobile_phone="123456789",
)
@pytest.fixture
def sponsor_guy() -> Sponsor:
return Sponsor.objects.create(feide_id="guy@example.org")
@pytest.fixture
def person_foo_verified(person_foo, sponsor_guy) -> PersonIdentity:
return PersonIdentity.objects.create(
person=person_foo,
type=PersonIdentity.IdentityType.PASSPORT,
source="Test",
value="12345",
verified=PersonIdentity.Verified.MANUAL,
verified_by=sponsor_guy,
verified_when="2021-06-15",
)
@pytest.fixture
def person_foo_not_verified(person_foo) -> PersonIdentity:
return PersonIdentity.objects.create(
person=person_foo,
type=PersonIdentity.IdentityType.DRIVERS_LICENSE,
source="Test",
value="12345",
)
@pytest.fixture()
def role_test_guest() -> Role:
return Role.objects.create(type="Test Guest")
@pytest.fixture
def unit_foo() -> OrganizationalUnit:
return OrganizationalUnit.objects.create(orgreg_id="12345", name_en="foo_unit")
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