Skip to content
Snippets Groups Projects
Commit 90e99bdc authored by robinwilliam.hundt's avatar robinwilliam.hundt
Browse files

Added more tests for studen-page endpoint

parent 05350895
No related branches found
No related tags found
1 merge request!16Backend tests
Pipeline #
...@@ -60,4 +60,5 @@ def make_feedback(of_tutor, of_submission=None, text='Very bad!', score=3): ...@@ -60,4 +60,5 @@ def make_feedback(of_tutor, of_submission=None, text='Very bad!', score=3):
def make_minimal_exam(): def make_minimal_exam():
submission = make_submission() # also creates default examType, submissionType and student submission = make_submission() # also creates default examType, submissionType and student
tutor = make_tutor(user=make_user(username='tutor01')) tutor = make_tutor(user=make_user(username='tutor01'))
make_feedback(of_tutor=tutor, of_submission=submission) feedback = make_feedback(of_tutor=tutor, of_submission=submission)
return submission, tutor, feedback
from rest_framework.test import APIClient, APITestCase from rest_framework.test import APITestCase, APIRequestFactory, force_authenticate
from util.factories import GradyUserFactory from rest_framework import status
from core.models import Reviewer
from core.tests import data_factories
from django.urls import reverse
from core.views import StudentApiView
class StudentPageTests(APITestCase): class StudentPageTests(APITestCase):
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
cls.factory = GradyUserFactory() cls.factory = APIRequestFactory()
cls.student = cls.factory.make_student(username='student01', matrikel_no='12345',
exam='Exam01') def setUp(self):
cls.tutor = cls.factory.make_tutor(username='tutor01') self.submission, self.tutor, self.feedback = data_factories.make_minimal_exam()
cls.reviewer = cls.factory.make_reviewer(username='reviewer01') self.student = self.submission.student
self.reviewer = Reviewer.objects.create(user=data_factories.make_user(username='reviewer'))
self.request = self.factory.get(reverse('student-page'))
self.view = StudentApiView.as_view()
def test_unauthorized_access_denied(self):
response = self.view(self.request)
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
def test_tutor_has_no_access(self):
force_authenticate(self.request, user=self.tutor.user)
response = self.view(self.request)
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
def test_reviewer_has_no_access(self):
force_authenticate(self.request, user=self.reviewer.user)
response = self.view(self.request)
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
def test_student_is_authorized(self):
force_authenticate(self.request, user=self.student.user)
response = self.view(self.request)
self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_contains_student_information(self):
force_authenticate(self.request, user=self.student.user)
response = self.view(self.request)
self.assertEqual(response.data['name'], self.student.user.fullname)
self.assertEqual(response.data['user'], self.student.user.username)
...@@ -5,12 +5,11 @@ from rest_framework_jwt.views import obtain_jwt_token, refresh_jwt_token ...@@ -5,12 +5,11 @@ from rest_framework_jwt.views import obtain_jwt_token, refresh_jwt_token
from core import views from core import views
urlpatterns = [ urlpatterns = [
url(r'^api/student/$', views.StudentApiView.as_view()), url(r'^api/student/$', views.StudentApiView.as_view(), name='student-page'),
url(r'^api/student/submission/(?P<pk>[0-9]+)$', views.SubmissionApiView.as_view()),
url(r'^api/student/submission/(?P<pk>[0-9]+)/feedback/$', views.FeedbackApiView.as_view()),
url(r'^api-token-auth/', obtain_jwt_token), url(r'^api-token-auth/', obtain_jwt_token),
url(r'api-token-refresh', refresh_jwt_token), url(r'^api-token-refresh', refresh_jwt_token),
] ]
urlpatterns += staticfiles_urlpatterns() urlpatterns += staticfiles_urlpatterns()
...@@ -3,8 +3,7 @@ import logging ...@@ -3,8 +3,7 @@ import logging
from rest_framework.generics import RetrieveAPIView from rest_framework.generics import RetrieveAPIView
from core.permissions import IsStudent from core.permissions import IsStudent
from core.serializers import (FeedbackSerializer, StudentSerializer, from core.serializers import StudentSerializer
SubmissionSerializer)
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
...@@ -16,19 +15,3 @@ class StudentApiView(RetrieveAPIView): ...@@ -16,19 +15,3 @@ class StudentApiView(RetrieveAPIView):
log.debug("Serializing student of user '%s'", self.request.user.username) log.debug("Serializing student of user '%s'", self.request.user.username)
return self.request.user.student return self.request.user.student
serializer_class = StudentSerializer serializer_class = StudentSerializer
class SubmissionApiView(RetrieveAPIView):
permission_classes = (IsStudent,)
def get_queryset(self):
return self.request.user.student.submissions
serializer_class = SubmissionSerializer
class FeedbackApiView(RetrieveAPIView):
permission_classes = (IsStudent,)
def get_queryset(self):
return [submission.feedback for submission in self.request.user.submissions]
serializer_class = FeedbackSerializer
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