-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #4 from maykinmedia/feature/reviewers-endpoint
Endpoint to retrieve reviewers
- Loading branch information
Showing
10 changed files
with
226 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
from rest_framework import serializers | ||
|
||
from ..models import Role, User | ||
|
||
|
||
class RoleSerializer(serializers.ModelSerializer): | ||
class Meta: | ||
model = Role | ||
fields = ( | ||
"name", | ||
"can_start_destruction", | ||
"can_review_destruction", | ||
"can_view_case_details", | ||
) | ||
|
||
|
||
class UserSerializer(serializers.ModelSerializer): | ||
role = RoleSerializer() | ||
|
||
class Meta: | ||
model = User | ||
fields = ("username", "first_name", "last_name", "email", "role") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
from django.db.models import QuerySet | ||
from django.utils.translation import gettext_lazy as _ | ||
|
||
from drf_spectacular.utils import extend_schema | ||
from rest_framework.generics import ListAPIView | ||
|
||
from openarchiefbeheer.accounts.models import User | ||
|
||
from .serializers import UserSerializer | ||
|
||
|
||
@extend_schema( | ||
summary=_("Reviewers list"), | ||
description=_( | ||
"List all the users that have the permission to review destruction lists." | ||
), | ||
responses={ | ||
200: UserSerializer(many=True), | ||
}, | ||
) | ||
class ReviewersView(ListAPIView): | ||
serializer_class = UserSerializer | ||
|
||
def get_queryset(self) -> QuerySet[User]: | ||
return User.objects.reviewers() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
76 changes: 76 additions & 0 deletions
76
backend/src/openarchiefbeheer/accounts/migrations/0002_role_user_role.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
# Generated by Django 4.2.11 on 2024-04-30 12:51 | ||
|
||
from django.db import migrations, models | ||
import django.db.models.deletion | ||
|
||
|
||
class Migration(migrations.Migration): | ||
|
||
dependencies = [ | ||
("accounts", "0001_initial"), | ||
] | ||
|
||
operations = [ | ||
migrations.CreateModel( | ||
name="Role", | ||
fields=[ | ||
( | ||
"id", | ||
models.AutoField( | ||
auto_created=True, | ||
primary_key=True, | ||
serialize=False, | ||
verbose_name="ID", | ||
), | ||
), | ||
( | ||
"name", | ||
models.CharField( | ||
help_text="Name of the role", | ||
max_length=255, | ||
unique=True, | ||
verbose_name="name", | ||
), | ||
), | ||
( | ||
"can_start_destruction", | ||
models.BooleanField( | ||
default=False, | ||
help_text="Indicates whether a user can create a list of cases to be deleted.", | ||
verbose_name="can start destruction", | ||
), | ||
), | ||
( | ||
"can_review_destruction", | ||
models.BooleanField( | ||
default=False, | ||
help_text="Indicates whether a user can review a list of cases to be deleted. They can approve it, reject it or provide feedback.", | ||
verbose_name="can review destruction", | ||
), | ||
), | ||
( | ||
"can_view_case_details", | ||
models.BooleanField( | ||
default=False, | ||
help_text="Indicates whether a user can view the contents of cases in a lists.", | ||
verbose_name="can view case details", | ||
), | ||
), | ||
], | ||
options={ | ||
"verbose_name": "role", | ||
"verbose_name_plural": "roles", | ||
}, | ||
), | ||
migrations.AddField( | ||
model_name="user", | ||
name="role", | ||
field=models.ForeignKey( | ||
blank=True, | ||
null=True, | ||
on_delete=django.db.models.deletion.SET_NULL, | ||
to="accounts.role", | ||
verbose_name="role", | ||
), | ||
), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
28 changes: 28 additions & 0 deletions
28
backend/src/openarchiefbeheer/api/tests/test_role_endpoints.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
from rest_framework import status | ||
from rest_framework.reverse import reverse | ||
from rest_framework.test import APITestCase | ||
|
||
from openarchiefbeheer.accounts.tests.factories import UserFactory | ||
|
||
|
||
class RoleEndpointTests(APITestCase): | ||
def test_user_not_logged_in(self): | ||
response = self.client.get(reverse("api:reviewers")) | ||
|
||
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) | ||
|
||
def test_retrieve_reviewers(self): | ||
admin = UserFactory.create(is_superuser=True, role=None) | ||
UserFactory.create_batch(2, role__can_review_destruction=True) | ||
UserFactory.create_batch(2, role__can_review_destruction=False) | ||
|
||
self.client.force_authenticate(user=admin) | ||
response = self.client.get(reverse("api:reviewers")) | ||
|
||
self.assertEqual(response.status_code, status.HTTP_200_OK) | ||
|
||
data = response.json() | ||
|
||
self.assertEqual(len(data), 2) | ||
self.assertTrue(data[0]["role"]["canReviewDestruction"]) | ||
self.assertTrue(data[1]["role"]["canReviewDestruction"]) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters