Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 56 additions & 31 deletions api/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,18 @@ def setUp(self):
self.password = 'demo'
self.user = User.objects.create_user(username=self.username,
password=self.password)
self.otheruser = User.objects.create_user(username='other',
password=self.password)
Question.objects.create(summary='test question 1', language='python',
type='mcq', user=self.user)
Question.objects.create(summary='test question 2', language='python',
type='mcq', user=self.user)
Question.objects.create(summary='test question 3', language='python',
type='mcq', user=self.otheruser)

def test_get_all_questions_anonymous(self):
# When
response = self.client.get(reverse('api:questions'))
response = self.client.get(reverse('api:question-list'))
# Then
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)

Expand All @@ -49,7 +53,7 @@ def test_get_all_questions(self):
serializer = QuestionSerializer(questions, many=True)
# When
self.client.login(username=self.username, password=self.password)
response = self.client.get(reverse('api:questions'))
response = self.client.get(reverse('api:question-list'))
# Then
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(len(response.data), 2)
Expand All @@ -60,7 +64,7 @@ def test_create_question_invalid_data(self):
data = {'summary': 'Add test question', 'user': self.user.id}
# When
self.client.login(username=self.username, password=self.password)
response = self.client.post(reverse('api:questions'), data)
response = self.client.post(reverse('api:question-list'), data)
# Then
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
self.assertFalse(Question.objects.filter(
Expand All @@ -72,11 +76,13 @@ def test_create_question_valid_data(self):
'language': 'python', 'type': 'mcq', 'user': self.user.id}
# When
self.client.login(username=self.username, password=self.password)
response = self.client.post(reverse('api:questions'), data)
response = self.client.post(reverse('api:question-list'), data)
# Then
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertTrue(Question.objects.filter(
summary='Add test question').exists())
question = Question.objects.get(summary='Add test question')
self.assertTrue(self.user, question.user)

def tearDown(self):
self.client.logout()
Expand Down Expand Up @@ -108,7 +114,7 @@ def test_get_question_anonymous(self):
# Given
question = Question.objects.get(summary='test question')
# When
response = self.client.get(reverse('api:question',
response = self.client.get(reverse('api:question-detail',
kwargs={'pk': question.id}))
# Then
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
Expand All @@ -118,7 +124,7 @@ def test_get_question_invalid_pk(self):
invalid_pk = 3243
# When
self.client.login(username=self.username, password=self.password)
response = self.client.get(reverse('api:question',
response = self.client.get(reverse('api:question-detail',
kwargs={'pk': invalid_pk}))
# Then
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
Expand All @@ -129,7 +135,7 @@ def test_get_question(self):
serializer = QuestionSerializer(question)
# When
self.client.login(username=self.username, password=self.password)
response = self.client.get(reverse('api:question',
response = self.client.get(reverse('api:question-detail',
kwargs={'pk': question.id}))
# Then
self.assertEqual(response.status_code, status.HTTP_200_OK)
Expand All @@ -140,7 +146,7 @@ def test_get_question_not_own(self):
question = Question.objects.get(summary='Created by other user')
# When
self.client.login(username=self.username, password=self.password)
response = self.client.get(reverse('api:question',
response = self.client.get(reverse('api:question-detail',
kwargs={'pk': question.id}))
# Then
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
Expand All @@ -151,7 +157,7 @@ def test_edit_question_anonymous(self):
data = {'summary': 'Edited test question', 'description': 'test',
'language': 'python', 'type': 'mcq', 'user': self.user.id}
# When
response = self.client.put(reverse('api:question',
response = self.client.put(reverse('api:question-detail',
kwargs={'pk': question.id}), data)
# Then
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
Expand All @@ -162,7 +168,7 @@ def test_edit_question_invalid_data(self):
data = {'summary': 'Edited test question', 'user': self.user.id}
# When
self.client.login(username=self.username, password=self.password)
response = self.client.put(reverse('api:question',
response = self.client.put(reverse('api:question-detail',
kwargs={'pk': question.id}), data)
# Then
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
Expand All @@ -174,7 +180,7 @@ def test_edit_question(self):
'language': 'python', 'type': 'mcq', 'user': self.user.id}
# When
self.client.login(username=self.username, password=self.password)
response = self.client.put(reverse('api:question',
response = self.client.put(reverse('api:question-detail',
kwargs={'pk': question.id}), data)
# Then
self.assertEqual(response.status_code, status.HTTP_200_OK)
Expand All @@ -185,7 +191,7 @@ def test_delete_question_anonymous(self):
# Given
question = Question.objects.get(summary='delete question')
# When
response = self.client.delete(reverse('api:question',
response = self.client.delete(reverse('api:question-detail',
kwargs={'pk': question.id}))
# Then
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
Expand All @@ -195,7 +201,7 @@ def test_delete_question_not_own(self):
question = Question.objects.get(summary='Created by other user')
# When
self.client.login(username=self.username, password=self.password)
response = self.client.delete(reverse('api:question',
response = self.client.delete(reverse('api:question-detail',
kwargs={'pk': question.id}))
# Then
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
Expand All @@ -206,7 +212,7 @@ def test_delete_question(self):
question = Question.objects.get(summary='delete question')
# When
self.client.login(username=self.username, password=self.password)
response = self.client.delete(reverse('api:question',
response = self.client.delete(reverse('api:question-detail',
kwargs={'pk': question.id}))
# Then
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
Expand Down Expand Up @@ -307,6 +313,7 @@ def test_create_questionpaper_valid_data(self):
# Then
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertTrue(QuestionPaper.objects.filter(quiz=self.quiz4).exists())
qp = QuestionPaper.objects.get(quiz=self.quiz4)

def test_create_questionpaper_not_own_quiz(self):
# Given
Expand Down Expand Up @@ -391,6 +398,19 @@ def test_edit_questionpaper(self):
questionpaper = QuestionPaper.objects.get(pk=questionpaper.id)
self.assertEqual(questionpaper.quiz.id, self.quiz5.id)

def test_edit_questionpaper_not_own(self):
# Given
questionpaper = self.questionpaper2
data = {'quiz': self.quiz5.id,
'fixed_questions': [self.question1.id, self.question2.id],
'random_questions': [self.questionset.id]}
# When
self.client.login(username=self.otherusername, password=self.password)
response = self.client.put(reverse('api:questionpaper',
kwargs={'pk': questionpaper.id}), data)
# Then
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)

def test_delete_questionpaper(self):
# Given
questionpaper = self.questionpaper2
Expand Down Expand Up @@ -420,12 +440,15 @@ def setUp(self):
self.password = 'demo'
self.user = User.objects.create_user(username=self.username,
password=self.password)
self.other = User.objects.create_user(username='other',
password=self.password)
Quiz.objects.create(description='Test Quiz 1', creator=self.user)
Quiz.objects.create(description='Test Quiz 2', creator=self.user)
Quiz.objects.create(description='Test Quiz 2', creator=self.other)

def test_get_all_quizzes_anonymous(self):
# When
response = self.client.get(reverse('api:quizzes'))
response = self.client.get(reverse('api:quiz-list'))
# Then
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)

Expand All @@ -435,7 +458,7 @@ def test_get_all_quizzes(self):
serializer = QuizSerializer(quizzes, many=True)
# When
self.client.login(username=self.username, password=self.password)
response = self.client.get(reverse('api:quizzes'))
response = self.client.get(reverse('api:quiz-list'))
# Then
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(len(response.data), 2)
Expand All @@ -446,7 +469,7 @@ def test_create_quiz_invalid_data(self):
data = {'creator': self.user.id}
# When
self.client.login(username=self.username, password=self.password)
response = self.client.post(reverse('api:quizzes'), data)
response = self.client.post(reverse('api:quiz-list'), data)
# Then
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

Expand All @@ -455,7 +478,7 @@ def test_create_quiz_valid_data(self):
data = {'description': 'Added quiz', 'creator': self.user.id}
# When
self.client.login(username=self.username, password=self.password)
response = self.client.post(reverse('api:quizzes'), data)
response = self.client.post(reverse('api:quiz-list'), data)
# Then
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertTrue(Quiz.objects.filter(description='Added quiz').exists())
Expand Down Expand Up @@ -487,7 +510,8 @@ def test_get_quiz_anonymous(self):
# Given
quiz = Quiz.objects.get(description='Quiz1')
# When
response = self.client.get(reverse('api:quiz', kwargs={'pk': quiz.id}))
response = self.client.get(reverse('api:quiz-detail',
kwargs={'pk': quiz.id}))
# Then
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)

Expand All @@ -496,7 +520,7 @@ def test_get_quiz_invalid_pk(self):
invalid_pk = 3242
# When
self.client.login(username=self.username, password=self.password)
response = self.client.get(reverse('api:quiz',
response = self.client.get(reverse('api:quiz-detail',
kwargs={'pk': invalid_pk}))
# Then
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
Expand All @@ -507,7 +531,7 @@ def test_get_quiz(self):
serializer = QuizSerializer(quiz)
# When
self.client.login(username=self.username, password=self.password)
response = self.client.get(reverse('api:quiz',
response = self.client.get(reverse('api:quiz-detail',
kwargs={'pk': quiz.id}))
# Then
self.assertEqual(response.status_code, status.HTTP_200_OK)
Expand All @@ -518,7 +542,8 @@ def test_get_quiz_not_own(self):
quiz = Quiz.objects.get(description='Quiz3')
# When
self.client.login(username=self.username, password=self.password)
response = self.client.get(reverse('api:quiz', kwargs={'pk': quiz.id}))
response = self.client.get(reverse('api:quiz-detail',
kwargs={'pk': quiz.id}))
# Then
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)

Expand All @@ -527,8 +552,8 @@ def test_edit_quiz_anonymous(self):
quiz = Quiz.objects.get(description='Quiz1')
data = {'description': 'Quiz1 Edited', 'creator': self.user.id}
# When
response = self.client.put(reverse('api:quiz', kwargs={'pk': quiz.id}),
data)
response = self.client.put(reverse('api:quiz-detail',
kwargs={'pk': quiz.id}), data)
# Then
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)

Expand All @@ -538,8 +563,8 @@ def test_edit_quiz_invalid_data(self):
data = {'creator': self.user.id}
# When
self.client.login(username=self.username, password=self.password)
response = self.client.put(reverse('api:quiz', kwargs={'pk': quiz.id}),
data)
response = self.client.put(reverse('api:quiz-detail',
kwargs={'pk': quiz.id}), data)
# Then
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)

Expand All @@ -549,8 +574,8 @@ def test_edit_quiz(self):
data = {'description': 'Quiz2 edited', 'creator': self.user.id}
# When
self.client.login(username=self.username, password=self.password)
response = self.client.put(reverse('api:quiz', kwargs={'pk': quiz.id}),
data)
response = self.client.put(reverse('api:quiz-detail',
kwargs={'pk': quiz.id}), data)
# Then
self.assertEqual(response.status_code, status.HTTP_200_OK)
quiz = Quiz.objects.get(pk=quiz.id)
Expand All @@ -560,7 +585,7 @@ def test_delete_quiz_anonymous(self):
# Given
quiz = Quiz.objects.get(description='delete quiz')
# When
response = self.client.delete(reverse('api:quiz',
response = self.client.delete(reverse('api:quiz-detail',
kwargs={'pk': quiz.id}))
# Then
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)
Expand All @@ -570,7 +595,7 @@ def test_delete_quiz_not_own(self):
quiz = Quiz.objects.get(description='Quiz3')
# When
self.client.login(username=self.username, password=self.password)
response = self.client.delete(reverse('api:quiz',
response = self.client.delete(reverse('api:quiz-detail',
kwargs={'pk': quiz.id}))
# Then
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
Expand All @@ -581,7 +606,7 @@ def test_delete_quiz(self):
quiz = Quiz.objects.get(description='delete quiz')
# When
self.client.login(username=self.username, password=self.password)
response = self.client.delete(reverse('api:quiz',
response = self.client.delete(reverse('api:quiz-detail',
kwargs={'pk': quiz.id}))
# Then
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
Expand Down
24 changes: 14 additions & 10 deletions api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,21 @@
from rest_framework.urlpatterns import format_suffix_patterns
from api import views

from rest_framework.routers import SimpleRouter
from django.urls import path, include

app_name = 'api'

router = SimpleRouter()
router.register(r'questions', views.QuestionViewSet, basename='question')
router.register(r'quizzes', views.QuizViewSet, basename='quiz')


urlpatterns = [
url(r'questions/$', views.QuestionList.as_view(), name='questions'),
url(r'questions/(?P<pk>[0-9]+)/$', views.QuestionDetail.as_view(),
name='question'),
path('', include(router.urls)),
url(r'get_courses/$', views.CourseList.as_view(), name='get_courses'),
url(r'start_quiz/(?P<course_id>[0-9]+)/(?P<quiz_id>[0-9]+)/$', views.StartQuiz.as_view(),
name='start_quiz'),
url(r'quizzes/$', views.QuizList.as_view(), name='quizzes'),
url(r'quizzes/(?P<pk>[0-9]+)/$', views.QuizDetail.as_view(), name='quiz'),
url(r'questionpapers/$', views.QuestionPaperList.as_view(),
name='questionpapers'),
url(r'questionpapers/(?P<pk>[0-9]+)/$',
views.QuestionPaperDetail.as_view(), name='questionpaper'),
url(r'answerpapers/$', views.AnswerPaperList.as_view(),
name='answerpapers'),
url(r'validate/(?P<answerpaper_id>[0-9]+)/(?P<question_id>[0-9]+)/$',
Expand All @@ -27,7 +27,11 @@
views.GetCourse.as_view(), name='get_course'),
url(r'quit/(?P<answerpaper_id>\d+)/$', views.QuitQuiz.as_view(),
name="quit_quiz"),
url(r'login/$', views.login, name='login')
url(r'login/$', views.login, name='login'),
url(r'questionpapers/$', views.QuestionPaperList.as_view(),
name='questionpapers'),
url(r'questionpapers/(?P<pk>[0-9]+)/$',
views.QuestionPaperDetail.as_view(), name='questionpaper'),
]

urlpatterns = format_suffix_patterns(urlpatterns)
Loading