From 18c96c33e7a5162d474653b3fd411eca3f4af7ff Mon Sep 17 00:00:00 2001 From: Marte Fossum <myf@uio.no> Date: Mon, 20 Nov 2023 10:52:34 +0100 Subject: [PATCH] Add visible field to RoleType --- greg/admin.py | 2 +- greg/migrations/0031_roletype_visible.py | 17 +++++++ greg/models.py | 1 + gregui/api/views/roletypes.py | 6 +++ gregui/tests/api/views/test_roletypes.py | 28 +++++++++++ gregui/tests/conftest.py | 60 +++++++++++++++++++++++- 6 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 greg/migrations/0031_roletype_visible.py create mode 100644 gregui/tests/api/views/test_roletypes.py diff --git a/greg/admin.py b/greg/admin.py index ad5e6a56..829e807d 100644 --- a/greg/admin.py +++ b/greg/admin.py @@ -82,7 +82,7 @@ class RoleAdmin(VersionAdmin): class RoleTypeAdmin(VersionAdmin): - list_display = ("id", "identifier", "name_nb", "name_en") + list_display = ("id", "identifier", "name_nb", "name_en", "visible") readonly_fields = ("id", "created", "updated") diff --git a/greg/migrations/0031_roletype_visible.py b/greg/migrations/0031_roletype_visible.py new file mode 100644 index 00000000..8b465151 --- /dev/null +++ b/greg/migrations/0031_roletype_visible.py @@ -0,0 +1,17 @@ +# Generated by Django 4.1.4 on 2023-11-08 17:00 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("greg", "0030_remove_identity_identity_type_value_unique_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="roletype", + name="visible", + field=models.BooleanField(default=False), + ), + ] diff --git a/greg/models.py b/greg/models.py index 75ac0e72..e80e3b1d 100644 --- a/greg/models.py +++ b/greg/models.py @@ -185,6 +185,7 @@ class RoleType(BaseModel): default_duration_days = models.IntegerField(null=True) # Max days into the future this role can be assigned max_days = models.IntegerField(default=365) + visible = models.BooleanField(default=False) def __str__(self): return f"{str(self.name_en or self.name_nb)} ({self.identifier})" diff --git a/gregui/api/views/roletypes.py b/gregui/api/views/roletypes.py index 1e20cb26..21bc0576 100644 --- a/gregui/api/views/roletypes.py +++ b/gregui/api/views/roletypes.py @@ -1,5 +1,6 @@ from rest_framework import permissions from rest_framework.generics import ListAPIView +from rest_framework.response import Response from greg.models import RoleType from gregui.api.serializers.roletype import RoleTypeSerializerUi @@ -9,3 +10,8 @@ class RoleTypeViewSet(ListAPIView): queryset = RoleType.objects.all().order_by("id") permission_classes = [permissions.AllowAny] serializer_class = RoleTypeSerializerUi + + def get(self, request, *args, **kwargs): + roletypes = self.queryset.filter(visible=True) + serializer = self.serializer_class(roletypes, many=True) + return Response(serializer.data) diff --git a/gregui/tests/api/views/test_roletypes.py b/gregui/tests/api/views/test_roletypes.py new file mode 100644 index 00000000..1219a588 --- /dev/null +++ b/gregui/tests/api/views/test_roletypes.py @@ -0,0 +1,28 @@ +import pytest + +from rest_framework.reverse import reverse +from rest_framework import status + +from greg.models import RoleType + + +@pytest.mark.django_db +def test_get_roletypes( + client, + role_type_1, + role_type_2, + role_type_3, + role_type_4, + role_type_5, +): + response = client.get(reverse("gregui-v1:role-types"), data={}) + response_body = response.json() + assert response.status_code == status.HTTP_200_OK + assert len(response_body) == 5 + + RoleType.objects.filter(id=role_type_1.id).update(visible=False) + RoleType.objects.filter(id=role_type_3.id).update(visible=False) + response = client.get(reverse("gregui-v1:role-types"), data={}) + response_body = response.json() + assert response.status_code == status.HTTP_200_OK + assert len(response_body) == 3 diff --git a/gregui/tests/conftest.py b/gregui/tests/conftest.py index 27107892..2014ae53 100644 --- a/gregui/tests/conftest.py +++ b/gregui/tests/conftest.py @@ -99,7 +99,65 @@ def unit_foo3() -> OrganizationalUnit: @pytest.fixture def role_type_foo() -> RoleType: rt = RoleType.objects.create( - identifier="role_foo", name_en="Role Foo EN", name_nb="Role Foo NB" + identifier="role_foo", + name_en="Role Foo EN", + name_nb="Role Foo NB", + visible=True, + ) + return RoleType.objects.get(id=rt.id) + + +@pytest.fixture +def role_type_1() -> RoleType: + rt = RoleType.objects.create( + identifier="role1", + name_en="Role1 EN", + name_nb="Role1 NB", + visible=True, + ) + return RoleType.objects.get(id=rt.id) + + +@pytest.fixture +def role_type_2() -> RoleType: + rt = RoleType.objects.create( + identifier="role2", + name_en="Role2 EN", + name_nb="Role2 NB", + visible=True, + ) + return RoleType.objects.get(id=rt.id) + + +@pytest.fixture +def role_type_3() -> RoleType: + rt = RoleType.objects.create( + identifier="role3", + name_en="Role3 EN", + name_nb="Role3 NB", + visible=True, + ) + return RoleType.objects.get(id=rt.id) + + +@pytest.fixture +def role_type_4() -> RoleType: + rt = RoleType.objects.create( + identifier="role4", + name_en="Role4 EN", + name_nb="Role4 NB", + visible=True, + ) + return RoleType.objects.get(id=rt.id) + + +@pytest.fixture +def role_type_5() -> RoleType: + rt = RoleType.objects.create( + identifier="role5", + name_en="Role5 EN", + name_nb="Role5 NB", + visible=True, ) return RoleType.objects.get(id=rt.id) -- GitLab