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

Merge branch 'GREG-5_role_assignment' into 'master'

GREG-5: Add post role for person

See merge request !10
parents 3c4f345c 640dda4f
No related branches found
No related tags found
1 merge request!10GREG-5: Add post role for person
Pipeline #88345 passed
...@@ -6,7 +6,14 @@ from greg.models import Person, PersonRole, Role ...@@ -6,7 +6,14 @@ from greg.models import Person, PersonRole, Role
class PersonSerializer(serializers.ModelSerializer): class PersonSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Person model = Person
fields = ("id", "first_name", "last_name") fields = [
"id",
"first_name",
"last_name",
"date_of_birth",
"email",
"mobile_phone",
]
class PersonRoleSerializer(serializers.ModelSerializer): class PersonRoleSerializer(serializers.ModelSerializer):
...@@ -16,6 +23,10 @@ class PersonRoleSerializer(serializers.ModelSerializer): ...@@ -16,6 +23,10 @@ class PersonRoleSerializer(serializers.ModelSerializer):
model = PersonRole model = PersonRole
fields = [ fields = [
"id", "id",
"start_date",
"end_date",
"registered_by",
"unit",
"created", "created",
"updated", "updated",
"role", "role",
......
...@@ -32,7 +32,7 @@ urlpatterns += [ ...@@ -32,7 +32,7 @@ urlpatterns += [
path("health/", Health.as_view()), path("health/", Health.as_view()),
re_path( re_path(
r"^persons/(?P<person_id>[0-9]+)/roles/$", r"^persons/(?P<person_id>[0-9]+)/roles/$",
PersonRoleViewSet.as_view({"get": "list"}), PersonRoleViewSet.as_view({"get": "list", "post": "create"}),
name="person_role-list", name="person_role-list",
), ),
re_path( re_path(
......
from django.core.exceptions import ValidationError
from django_filters import rest_framework as filters from django_filters import rest_framework as filters
from drf_spectacular.utils import extend_schema, OpenApiParameter from drf_spectacular.utils import extend_schema, OpenApiParameter
from rest_framework import viewsets from rest_framework import viewsets
...@@ -52,3 +53,12 @@ class PersonRoleViewSet(viewsets.ModelViewSet): ...@@ -52,3 +53,12 @@ class PersonRoleViewSet(viewsets.ModelViewSet):
if person_role_id: if person_role_id:
qs = qs.filter(id=person_role_id) qs = qs.filter(id=person_role_id)
return qs return qs
def perform_create(self, serializer):
person_id = self.kwargs["person_id"]
if person_id is None:
# Should not happen, the person ID is part of the API path
raise ValidationError("No person id")
serializer.save(person_id=person_id)
import pytest import pytest
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from rest_framework import status
from rest_framework.authtoken.models import Token from rest_framework.authtoken.models import Token
from rest_framework.reverse import reverse from rest_framework.reverse import reverse
from rest_framework.status import HTTP_200_OK from rest_framework.status import HTTP_200_OK
...@@ -78,3 +79,30 @@ def test_persons_verified_filter_exclude(client, setup_db_test_data): ...@@ -78,3 +79,30 @@ def test_persons_verified_filter_exclude(client, setup_db_test_data):
names = [(result["first_name"], result["last_name"]) for result in results] names = [(result["first_name"], result["last_name"]) for result in results]
assert len(results) == 9 assert len(results) == 9
assert ("Christopher", "Flores") not in names assert ("Christopher", "Flores") not in names
@pytest.mark.django_db
def test_add_role(client, person_foo):
url = reverse("person_role-list", kwargs={"person_id": person_foo.id})
roles_for_person = client.get(url).json()["results"]
# Check that there are no roles for the person, and then add one
assert len(roles_for_person) == 0
role_data = {
"role": "Visiting Professor",
"start_date": "2021-06-10",
"end_date": "2021-08-10",
"registered_by": "1",
"unit": "1",
}
response = client.post(url, role_data)
assert response.status_code == status.HTTP_201_CREATED
response_data = response.json()
roles_for_person = client.get(url).json()["results"]
# Check that the role shows up when listing roles for the person now
assert len(roles_for_person) == 1
assert roles_for_person[0]["id"] == response_data["id"]
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