def test_delete(self): headers = get_auth_headers(self.client, **self.CREDENTIALS) headers_admin = get_auth_headers(self.client, **self.CREDENTIALS_ADMIN) resp = self.client.get( reverse('tests-detail', kwargs={'hash': self.hash})) test_before = self.assertResp(resp) question_id = choice(test_before["questions"]) resp = self.client.delete( reverse('questions-detail', kwargs={ 'test_hash': self.hash, 'pk': question_id }), **headers_admin) self.assertWrongResp(resp, 403) resp = self.client.delete( reverse('questions-detail', kwargs={ 'test_hash': self.hash, 'pk': question_id }), **headers) self.assertResp(resp) resp = self.client.get( reverse('questions-detail', kwargs={ 'test_hash': self.hash, 'pk': question_id })) self.assertWrongResp(resp, 404)
def test_update(self): payload = get_test_payload(is_private=True) headers = get_auth_headers(self.client, **self.CREDENTIALS) headers_admin = get_auth_headers(self.client, **self.CREDENTIALS_ADMIN) resp = self.client.post(reverse('tests-list'), data=payload, **headers) test = self.assertResp(resp) test_hash = test["hash"] other_payload = get_test_payload() del other_payload["questions"] resp = self.client.put(reverse('tests-detail', kwargs={'hash': test_hash}), data=other_payload, **headers_admin) self.assertWrongResp(resp, 403) resp = self.client.put(reverse('tests-detail', kwargs={'hash': test_hash}), data=other_payload, **headers) new_test = self.assertResp(resp) self.assertEqual(new_test["title"], other_payload["title"]) resp = self.client.get( reverse('tests-detail', kwargs={'hash': test_hash})) new_test = self.assertResp(resp) self.assertEqual(new_test["title"], other_payload["title"])
def test_create(self): payload = get_test_payload()["questions"][0] headers = get_auth_headers(self.client, **self.CREDENTIALS) headers_admin = get_auth_headers(self.client, **self.CREDENTIALS_ADMIN) resp = self.client.get( reverse('tests-detail', kwargs={'hash': self.hash})) test_before = self.assertResp(resp) resp = self.client.post(reverse('questions-list', kwargs={'test_hash': self.hash}), data=payload, **headers_admin) self.assertWrongResp(resp, 403) resp = self.client.post(reverse('questions-list', kwargs={'test_hash': self.hash}), data=payload, **headers) question = self.assertResp(resp) self.assertTrue( 0 < len(question["answers"]) == len(payload["answers"])) resp = self.client.get( reverse('tests-detail', kwargs={'hash': self.hash})) test_after = self.assertResp(resp) self.assertTrue( len(test_after["questions"]) - len(test_before["questions"]) == 1)
def test_give_multiple_answers_and_change(self): headers = get_auth_headers(self.client, **self.CREDENTIALS) test = models.Test.objects.first() for question in test.questions.iterator(): answer = question.answers.first() resp = self.client.post( reverse('answers-give', kwargs={ 'test_hash': test.hash, 'question_pk': question.id, 'pk': answer.id }), **headers) self.assertResp(resp) for question in list(test.questions.all())[::-1]: answer = question.answers.last() resp = self.client.post( reverse('answers-give', kwargs={ 'test_hash': test.hash, 'question_pk': question.id, 'pk': answer.id }), **headers) self.assertResp(resp) self.assertEqual( test.questions.count(), models.UserAnswers.objects.get( user__username=self.CREDENTIALS["username"], test=test).choices.count())
def setUp(self): payload = get_test_payload() headers = get_auth_headers(self.client, **self.CREDENTIALS) resp = self.client.post(reverse('tests-list'), data=payload, **headers) test = self.assertResp(resp) self.hash = test["hash"] self.question_id = choice(test["questions"])["id"] self.params_n = len(test["params"])
def test_update(self): headers = get_auth_headers(self.client, **self.CREDENTIALS) headers_admin = get_auth_headers(self.client, **self.CREDENTIALS_ADMIN) resp = self.client.get( reverse('questions-detail', kwargs={ 'test_hash': self.hash, 'pk': self.question_id })) question_before = self.assertResp(resp) answer_id = choice(question_before["answers"])["id"] payload = self.get_payload(self.params_n) resp = self.client.put(reverse('answers-detail', kwargs={ 'test_hash': self.hash, 'question_pk': self.question_id, 'pk': answer_id }), data=payload, **headers_admin) self.assertWrongResp(resp, 403) resp = self.client.put(reverse('answers-detail', kwargs={ 'test_hash': self.hash, 'question_pk': self.question_id, 'pk': answer_id }), data=payload, **headers) self.assertResp(resp) resp = self.client.get( reverse('answers-detail', kwargs={ 'test_hash': self.hash, 'question_pk': self.question_id, 'pk': answer_id })) new_answer = self.assertResp(resp) self.assertEqual(new_answer["text"], payload["text"])
def test_create(self): headers = get_auth_headers(self.client, **self.CREDENTIALS) headers_admin = get_auth_headers(self.client, **self.CREDENTIALS_ADMIN) resp = self.client.get( reverse('questions-detail', kwargs={ 'test_hash': self.hash, 'pk': self.question_id })) question_before = self.assertResp(resp) payload = self.get_payload(self.params_n) resp = self.client.post(reverse('answers-list', kwargs={ 'test_hash': self.hash, 'question_pk': self.question_id }), data=payload, **headers_admin) self.assertWrongResp(resp, 403) resp = self.client.post(reverse('answers-list', kwargs={ 'test_hash': self.hash, 'question_pk': self.question_id }), data=payload, **headers) self.assertResp(resp) resp = self.client.get( reverse('questions-detail', kwargs={ 'test_hash': self.hash, 'pk': self.question_id })) question_after = self.assertResp(resp) self.assertTrue( len(question_after["answers"]) - len(question_before["answers"]) == 1)
def test_delete(self): payload = get_test_payload(is_private=True) headers = get_auth_headers(self.client, **self.CREDENTIALS) headers_admin = get_auth_headers(self.client, **self.CREDENTIALS_ADMIN) resp = self.client.post(reverse('tests-list'), data=payload, **headers) test = self.assertResp(resp) test_hash = test["hash"] resp = self.client.delete( reverse('tests-detail', kwargs={'hash': test_hash}), **headers_admin) self.assertWrongResp(resp, 403) resp = self.client.delete( reverse('tests-detail', kwargs={'hash': test_hash}), **headers) self.assertResp(resp) resp = self.client.get( reverse('tests-detail', kwargs={'hash': test_hash})) self.assertWrongResp(resp, 404)
def test_list(self): resp = self.client.get(reverse('tests-list')) tests = self.assertResp(resp)["results"] self.assertEqual(len(tests), 1) self.assertEqual(tests[0]["title"], "public_test") headers = get_auth_headers(self.client, **self.CREDENTIALS) resp = self.client.get(reverse('tests-list'), **headers) tests = self.assertResp(resp)["results"] self.assertGreater(len(tests), 1) self.assertTrue( "private_test" in map(operator.itemgetter('title'), tests))
def test_delete(self): headers = get_auth_headers(self.client, **self.CREDENTIALS) headers_admin = get_auth_headers(self.client, **self.CREDENTIALS_ADMIN) resp = self.client.get( reverse('questions-detail', kwargs={ 'test_hash': self.hash, 'pk': self.question_id })) question_before = self.assertResp(resp) answer_id = choice(question_before["answers"])["id"] resp = self.client.delete( reverse('answers-detail', kwargs={ 'test_hash': self.hash, 'question_pk': self.question_id, 'pk': answer_id }), **headers_admin) self.assertWrongResp(resp, 403) resp = self.client.delete( reverse('answers-detail', kwargs={ 'test_hash': self.hash, 'question_pk': self.question_id, 'pk': answer_id }), **headers) self.assertResp(resp) resp = self.client.get( reverse('answers-detail', kwargs={ 'test_hash': self.hash, 'question_pk': self.question_id, 'pk': answer_id })) self.assertWrongResp(resp, 404)
def test_give_single_answer(self): headers = get_auth_headers(self.client, **self.CREDENTIALS) test = models.Test.objects.first() question = test.questions.first() answer = question.answers.first() resp = self.client.post( reverse('answers-give', kwargs={ 'test_hash': test.hash, 'question_pk': question.id, 'pk': answer.id }), **headers) self.assertResp(resp)
def test_update(self): payload = get_test_payload()["questions"][0] del payload["answers"] headers = get_auth_headers(self.client, **self.CREDENTIALS) headers_admin = get_auth_headers(self.client, **self.CREDENTIALS_ADMIN) resp = self.client.get( reverse('tests-detail', kwargs={'hash': self.hash})) test_before = self.assertResp(resp) question_id = choice(test_before["questions"]) resp = self.client.put(reverse('questions-detail', kwargs={ 'test_hash': self.hash, 'pk': question_id }), data=payload, **headers_admin) self.assertWrongResp(resp, 403) resp = self.client.put(reverse('questions-detail', kwargs={ 'test_hash': self.hash, 'pk': question_id }), data=payload, **headers) self.assertResp(resp) resp = self.client.get( reverse('questions-detail', kwargs={ 'test_hash': self.hash, 'pk': question_id })) new_question = self.assertResp(resp) self.assertEqual(new_question["text"], payload["text"])
def test_results(self): user = self.user test = models.Test.objects.first() user_answers = models.UserAnswers.objects.create(user=user, test=test) for question in test.questions.iterator(): answer = choice(question.answers.all()) user_answers.choices.add(answer) headers = get_auth_headers(self.client, **self.CREDENTIALS) resp = self.client.get( reverse('tests-results', kwargs={'hash': test.hash}), **headers) results = self.assertResp(resp) self.assertTrue(results["is_complete"]) self.assertTrue(results["results"] and all( map(lambda x: isinstance(x, float), results["results"].values())))
def test_create(self): payload = get_test_payload(is_private=True) headers = get_auth_headers(self.client, **self.CREDENTIALS) resp = self.client.post(reverse('tests-list'), data=payload) self.assertWrongResp(resp, 401) resp = self.client.post(reverse('tests-list'), data=payload, **headers) test = self.assertResp(resp) self.assertEqual(len(payload["questions"]), len(test["questions"])) self.assertEqual(len(payload["questions"][0]["answers"]), len(test["questions"][0]["answers"])) resp = self.client.get(reverse('tests-list')) tests1 = self.assertResp(resp) resp = self.client.get(reverse('tests-list'), **headers) tests2 = self.assertResp(resp) self.assertEqual(tests2["count"] - tests1["count"], 1) self.assertTrue(test["id"] in {t["id"] for t in tests2["results"]})
def setUp(self): payload = get_test_payload() headers = get_auth_headers(self.client, **self.CREDENTIALS) resp = self.client.post(reverse('tests-list'), data=payload, **headers) test = self.assertResp(resp) self.hash = test["hash"]