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

GREG-5: Add post role for person

parent 78545934
No related branches found
No related tags found
1 merge request!10GREG-5: Add post role for person
Pipeline #88183 failed
...@@ -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",
......
...@@ -23,7 +23,7 @@ urlpatterns += [ ...@@ -23,7 +23,7 @@ urlpatterns += [
path("health/", Health.as_view()), path("health/", Health.as_view()),
url( url(
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",
), ),
url( url(
......
from django.core.exceptions import BadRequest
from django_filters import rest_framework as filters from django_filters import rest_framework as filters
from rest_framework import viewsets from rest_framework import viewsets
...@@ -38,3 +39,12 @@ class PersonRoleViewSet(viewsets.ModelViewSet): ...@@ -38,3 +39,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 BadRequest("No person id")
serializer.save(person_id=person_id)
...@@ -8,6 +8,7 @@ from rest_framework.test import ( ...@@ -8,6 +8,7 @@ from rest_framework.test import (
) )
from greg.models import Person from greg.models import Person
from greg.tests.populate_database import DatabasePopulation
class GregAPITestCase(APITestCase): class GregAPITestCase(APITestCase):
...@@ -44,6 +45,11 @@ class PersonTestData(GregAPITestCase): ...@@ -44,6 +45,11 @@ class PersonTestData(GregAPITestCase):
class PersonAPITestCase(PersonTestData): class PersonAPITestCase(PersonTestData):
def setUp(self):
super().setUp()
database_populater = DatabasePopulation()
database_populater.populate_database()
def test_get_person(self): def test_get_person(self):
url = reverse("person-detail", kwargs={"id": self.person_foo.id}) url = reverse("person-detail", kwargs={"id": self.person_foo.id})
response = self.client.get(url) response = self.client.get(url)
...@@ -58,4 +64,30 @@ class PersonAPITestCase(PersonTestData): ...@@ -58,4 +64,30 @@ class PersonAPITestCase(PersonTestData):
response = self.client.get(url) response = self.client.get(url)
data = response.json() data = response.json()
self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(2, len(data["results"])) # The DatabasePopulation class will add 10 persons and then there 2 added by the
# test class, so there should be 12 persons in total
self.assertEqual(12, len(data["results"]))
def test_add_role(self):
url = reverse("person_role-list", kwargs={"person_id": self.person_foo.id})
roles_for_person = self.client.get(url).json()["results"]
# Check that there are no roles for the person, and then add one
self.assertEqual(0, len(roles_for_person))
role_data = {
"role": "Visiting Professor",
"start_date": "2021-06-10",
"end_date": "2021-08-10",
"registered_by": "1",
"unit": "1",
}
response = self.client.post(url, role_data)
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
response_data = response.json()
roles_for_person = self.client.get(url).json()["results"]
# Check that the role shows up when listing roles for the person now
self.assertEqual(1, len(roles_for_person))
self.assertEqual(response_data["id"], roles_for_person[0]["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