diff --git a/greg/api/serializers/consent.py b/greg/api/serializers/consent.py new file mode 100644 index 0000000000000000000000000000000000000000..5c1663f2da723d94f477a82e3fb97d9351892e35 --- /dev/null +++ b/greg/api/serializers/consent.py @@ -0,0 +1,9 @@ +from rest_framework.serializers import ModelSerializer + +from greg.models import Consent + + +class ConsentSerializer(ModelSerializer): + class Meta: + model = Consent + fields = "__all__" diff --git a/greg/api/serializers/organizational_unit.py b/greg/api/serializers/organizational_unit.py new file mode 100644 index 0000000000000000000000000000000000000000..12251bffff79f9119d76e9e1f7ddcc58c2984b68 --- /dev/null +++ b/greg/api/serializers/organizational_unit.py @@ -0,0 +1,9 @@ +from rest_framework.serializers import ModelSerializer + +from greg.models import OrganizationalUnit + + +class OrganizationalUnitSerializer(ModelSerializer): + class Meta: + model = OrganizationalUnit + fields = "__all__" diff --git a/greg/api/serializers/sponsor.py b/greg/api/serializers/sponsor.py new file mode 100644 index 0000000000000000000000000000000000000000..57326558e9999d307412bed70d79665ae63c8821 --- /dev/null +++ b/greg/api/serializers/sponsor.py @@ -0,0 +1,9 @@ +from rest_framework import serializers + +from greg.models import Sponsor + + +class SponsorSerializer(serializers.ModelSerializer): + class Meta: + model = Sponsor + fields = ["id", "feide_id"] diff --git a/greg/api/urls.py b/greg/api/urls.py index 9fa175b7c1dfec87d8e93a328cc2294961415350..69743c28704421b8128bbe25b19f66d3e7412a42 100644 --- a/greg/api/urls.py +++ b/greg/api/urls.py @@ -8,17 +8,23 @@ from drf_spectacular.views import ( SpectacularSwaggerView, ) +from greg.api.views.consent import ConsentViewSet +from greg.api.views.organizational_unit import OrganizationalUnitViewSet from greg.api.views.person import ( PersonRoleViewSet, PersonViewSet, ) from greg.api.views.role import RoleViewSet from greg.api.views.health import Health - +from greg.api.views.sponsor import SponsorViewSet router = DefaultRouter() router.register(r"persons", PersonViewSet, basename="person") router.register(r"roles", RoleViewSet, basename="role") +router.register(r"consents", ConsentViewSet, basename="consent") +router.register(r"sponsors", SponsorViewSet, basename="sponsor") +router.register(r"orgunit", OrganizationalUnitViewSet, basename="orgunit") + urlpatterns = router.urls diff --git a/greg/api/views/consent.py b/greg/api/views/consent.py new file mode 100644 index 0000000000000000000000000000000000000000..4996325e7cb9b40ffb64fde25a8d6b374e81d3e6 --- /dev/null +++ b/greg/api/views/consent.py @@ -0,0 +1,14 @@ +from rest_framework import viewsets + +from greg.api.pagination import PrimaryKeyCursorPagination +from greg.api.serializers.consent import ConsentSerializer +from greg.models import Consent + + +class ConsentViewSet(viewsets.ModelViewSet): + """Consent API""" + + queryset = Consent.objects.all().order_by("id") + serializer_class = ConsentSerializer + pagination_class = PrimaryKeyCursorPagination + lookup_field = "id" diff --git a/greg/api/views/organizational_unit.py b/greg/api/views/organizational_unit.py new file mode 100644 index 0000000000000000000000000000000000000000..c6d2236cd68f3318629a4595f4ee6d3f1755918e --- /dev/null +++ b/greg/api/views/organizational_unit.py @@ -0,0 +1,14 @@ +from rest_framework import viewsets + +from greg.api.pagination import PrimaryKeyCursorPagination +from greg.api.serializers.organizational_unit import OrganizationalUnitSerializer +from greg.models import OrganizationalUnit + + +class OrganizationalUnitViewSet(viewsets.ModelViewSet): + """OrganizationalUnit API""" + + queryset = OrganizationalUnit.objects.all().order_by("id") + serializer_class = OrganizationalUnitSerializer + pagination_class = PrimaryKeyCursorPagination + lookup_field = "id" diff --git a/greg/api/views/sponsor.py b/greg/api/views/sponsor.py new file mode 100644 index 0000000000000000000000000000000000000000..0251a2e86274d368d61508c2c937b1205e8ea6e3 --- /dev/null +++ b/greg/api/views/sponsor.py @@ -0,0 +1,14 @@ +from rest_framework.viewsets import ReadOnlyModelViewSet + +from greg.api.pagination import PrimaryKeyCursorPagination +from greg.api.serializers.sponsor import SponsorSerializer +from greg.models import Sponsor + + +class SponsorViewSet(ReadOnlyModelViewSet): + """Sponsor API""" + + queryset = Sponsor.objects.all().order_by("id") + serializer_class = SponsorSerializer + pagination_class = PrimaryKeyCursorPagination + lookup_field = "id" diff --git a/greg/tests/api/test_consent.py b/greg/tests/api/test_consent.py new file mode 100644 index 0000000000000000000000000000000000000000..24ae8c837c73054d8edcad98abcefa1f39624e59 --- /dev/null +++ b/greg/tests/api/test_consent.py @@ -0,0 +1,30 @@ +import pytest +from rest_framework import status +from rest_framework.reverse import reverse + +from greg.models import Consent + + +@pytest.fixture +def consent_foo() -> Consent: + return Consent.objects.create( + type="test_consent", + consent_name_en="Test1", + consent_name_nb="Test2", + consent_description_en="Test description", + consent_description_nb="Test beskrivelse", + consent_link_en="https://example.org", + consent_link_nb="https://example.org", + valid_from="2018-01-20", + user_allowed_to_change=True, + ) + + +@pytest.mark.django_db +def test_get_consent(client, consent_foo): + resp = client.get(reverse("consent-detail", kwargs={"id": consent_foo.id})) + assert resp.status_code == status.HTTP_200_OK + data = resp.json() + assert data.get("id") == consent_foo.id + assert data.get("type") == consent_foo.type + assert data.get("consent_name_en") == consent_foo.consent_name_en diff --git a/greg/tests/api/test_person.py b/greg/tests/api/test_person.py index 1f40ad5f4cd4210fc5768d9ceaf88fad286fc0b3..f79d9d26a2475b542cc22dda4c9dbb7ed7104ce4 100644 --- a/greg/tests/api/test_person.py +++ b/greg/tests/api/test_person.py @@ -1,24 +1,12 @@ import pytest -from django.contrib.auth import get_user_model from rest_framework import status -from rest_framework.authtoken.models import Token from rest_framework.reverse import reverse from rest_framework.status import HTTP_200_OK -from rest_framework.test import APIClient from greg.models import Person -@pytest.fixture -def client() -> APIClient: - user, _ = get_user_model().objects.get_or_create(username="test") - token, _ = Token.objects.get_or_create(user=user) - client = APIClient() - client.credentials(HTTP_AUTHORIZATION=f"Token {token.key}") - return client - - @pytest.fixture def person_foo() -> Person: return Person.objects.create( diff --git a/greg/tests/conftest.py b/greg/tests/conftest.py index 290c0a14a871798caed88c5157ac86b2d20a7122..bbdf24d3973f2d452e7e45e22ae1a81e2bcda7b5 100644 --- a/greg/tests/conftest.py +++ b/greg/tests/conftest.py @@ -1,5 +1,9 @@ import logging +from rest_framework.authtoken.models import Token +from rest_framework.test import APIClient +from django.contrib.auth import get_user_model + # faker spams the logs with localisation warnings # see https://github.com/joke2k/faker/issues/753 @@ -19,3 +23,12 @@ def setup_db_test_data(django_db_setup, django_db_blocker): with django_db_blocker.unblock(): database_seeder = DatabasePopulation() database_seeder.populate_database() + + +@pytest.fixture +def client() -> APIClient: + user, _ = get_user_model().objects.get_or_create(username="test") + token, _ = Token.objects.get_or_create(user=user) + client = APIClient() + client.credentials(HTTP_AUTHORIZATION=f"Token {token.key}") + return client