def test_reputation__student(client, student): data = {"reputation_type": "student"} login_student(client, student) with mock.patch( "reputation.views.reputation.student_reputation", return_value=HttpResponse(""), ): resp = client.post( reverse("reputation:reputation"), json.dumps(data), content_type="application/json", ) assert resp.status_code == 200
def test_index_student_logged_in(client, student): assert login_student(client, student) resp = client.get(reverse("student-page")) assert resp.status_code == 200 assert any(t.name == "peerinst/student/index.html" for t in resp.templates) assert student.student.email in resp.content
def test_update_student_id__wrong_data(client, student, group): assert login_student(client, student) add_to_group(student, group) data = {"group_name": group.name} resp = client.post( reverse("student-change-id"), json.dumps(data), content_type="application/json", ) assert resp.status_code == 400 assert any(t.name == "400.html" for t in resp.templates) data = {"student_id": "1234567"} resp = client.post( reverse("student-change-id"), json.dumps(data), content_type="application/json", ) assert resp.status_code == 400 assert any(t.name == "400.html" for t in resp.templates) data = {} resp = client.post( reverse("student-change-id"), json.dumps(data), content_type="application/json", ) assert resp.status_code == 400 assert any(t.name == "400.html" for t in resp.templates)
def test_update_student_id__no_data(client, student, group): assert login_student(client, student) add_to_group(student, group) resp = client.post(reverse("student-change-id")) assert resp.status_code == 400 assert any(t.name == "400.html" for t in resp.templates)
def test_discipline_list(client, disciplines, student, teacher): """ Requirements: 1. Must be authenticated 2. Must not be a student to GET 3. Must be admin for anything else """ # 1. Must be authenticated url = reverse("REST:discipline-list") response = client.get(url) assert response.status_code == status.HTTP_403_FORBIDDEN # 2. Must not be a student to GET assert login_student(client, student) response = client.get(url) assert response.status_code == status.HTTP_403_FORBIDDEN assert login_teacher(client, teacher) response = client.get(url) assert response.status_code == status.HTTP_200_OK retrieved_disciplines = json.loads(response.content) for d in disciplines: assert d.pk in [d["pk"] for d in retrieved_disciplines] # 3. Must be admin for anything else response = client.post(url, {"title": "New discipline"}) assert response.status_code == status.HTTP_403_FORBIDDEN
def test_index_student_logged_in_token_same_user(client, student): assert login_student(client, student) token = create_student_token(student.student.username, student.student.email) resp = client.get(reverse("student-page") + "?token={}".format(token)) assert resp.status_code == 200 assert any(t.name == "peerinst/student/index.html" for t in resp.templates) assert student.student.email in resp.content
def test_leave_group_is_not_member_of_group(client, student, group): assert login_student(client, student) data = {"username": student.student.username, "group_name": group.name} resp = client.post( reverse("student-leave-group"), json.dumps(data), content_type="application/json", ) assert resp.status_code == 200 assert group not in student.groups.all()
def test_leave_group_wrong_data(client, student, group): assert login_student(client, student) data = {} resp = client.post( reverse("student-leave-group"), json.dumps(data), content_type="application/json", ) assert resp.status_code == 400 assert any(t.name == "400.html" for t in resp.templates) assert "There are missing parameters." in resp.content
def test_update_student_id(client, student, group): assert login_student(client, student) add_to_group(student, group) data = {"student_id": "1234567", "group_name": group.name} resp = client.post( reverse("student-change-id"), json.dumps(data), content_type="application/json", ) assert resp.status_code == 200 assert (StudentGroupMembership.objects.get( student=student, group=group).student_school_id == data["student_id"])
def test_is_not_student_permission_in_view( client, student, student_group_assignment ): assert login_student(client, student) url = reverse( "REST:student-group-assigment-answers", args=[ student_group_assignment.pk, student_group_assignment.assignment.questions.first().pk, ], ) response = client.get(url) assert response.status_code == status.HTTP_403_FORBIDDEN
def test_leave_group_is_member_of_group(client, student, group): student.groups.add(group) assert login_student(client, student) StudentGroupMembership.objects.create(student=student, group=group) assert group in student.groups.all() assert group in student.student_groups.all() assert StudentGroupMembership.objects.get(student=student, group=group).current_member data = {"username": student.student.username, "group_name": group.name} resp = client.post( reverse("student-leave-group"), json.dumps(data), content_type="application/json", ) assert resp.status_code == 200 assert group in student.groups.all() assert not StudentGroupMembership.objects.get(student=student, group=group).current_member
def test_leave_group_no_data(client, student): assert login_student(client, student) resp = client.post(reverse("student-leave-group")) assert resp.status_code == 400 assert any(t.name == "400.html" for t in resp.templates) assert "Wrong data type was sent." in resp.content
def test_assignmentquestions_detail(client, assignments, student, teachers): """ See also: - peerinst/tests/views/test_nonLTI_views.py test_assignment_update_post Requirements: 1. Must be authenticated 2. Students cannot GET 3. Only return owned assignments 4. Must be owner of related assignment to create or delete 5. Cannot create or delete if assignment.editable is false """ # Setup assignments[0].owner.add(teachers[0].user) assignments[1].owner.add(teachers[1].user) # 1. Must be authenticated url = reverse("REST:assignment_question-list") response = client.get(url) assert response.status_code == status.HTTP_403_FORBIDDEN # 2. Students cannot GET assert login_student(client, student) response = client.get(url) assert response.status_code == status.HTTP_403_FORBIDDEN # 3. Only return owned assignments assert login_teacher(client, teachers[0]) response = client.get(url) assert response.status_code == status.HTTP_200_OK for aq in json.loads(response.content): assert aq["pk"] in AssignmentQuestions.objects.filter( assignment=assignments[0] ).values_list("pk", flat=True) assert aq["pk"] not in AssignmentQuestions.objects.exclude( pk__in=assignments[0].questions.all() ) # 4. Must be owner of related assignment to create or delete question_to_remove = AssignmentQuestions.objects.filter( assignment=assignments[0] ).first() question_to_add = question_to_remove.question url = reverse( "REST:assignment_question-detail", args=[question_to_remove.pk] ) response = client.delete(url) assert response.status_code == status.HTTP_204_NO_CONTENT assignments[0].refresh_from_db() assert question_to_remove.question not in assignments[0].questions.all() url = reverse("REST:assignment_question-list") response = client.post( url, {"assignment": assignments[0].pk, "question_pk": question_to_add.pk}, content_type="application/json", ) assert response.status_code == status.HTTP_201_CREATED assignments[0].refresh_from_db() assert question_to_add in assignments[0].questions.all() assert login_teacher(client, teachers[1]) question_to_remove = AssignmentQuestions.objects.filter( assignment=assignments[0] ).first() url = reverse( "REST:assignment_question-detail", args=[question_to_remove.pk] ) response = client.delete(url) assert response.status_code == status.HTTP_404_NOT_FOUND assignments[0].refresh_from_db() assert question_to_remove.question in assignments[0].questions.all() url = reverse("REST:assignment_question-list") question_to_add = Question.objects.create( title="question_to_add", text="text" ) response = client.post( url, {"assignment": assignments[0].pk, "question_pk": question_to_add.pk}, content_type="application/json", ) assert response.status_code == status.HTTP_403_FORBIDDEN assignments[0].refresh_from_db() assert question_to_add not in assignments[0].questions.all() # 5. Cannot create or delete if assignment.editable is false assert login_teacher(client, teachers[0]) with mock.patch( "peerinst.models.Assignment.editable", new_callable=mock.PropertyMock ) as mock_editable: mock_editable.return_value = False question_to_remove = AssignmentQuestions.objects.filter( assignment=assignments[0] ).first() url = reverse( "REST:assignment_question-detail", args=[question_to_remove.pk] ) response = client.delete(url) assert response.status_code == status.HTTP_403_FORBIDDEN url = reverse("REST:assignment_question-list") response = client.post( url, { "assignment": assignments[0].pk, "question_pk": Question.objects.last().pk, }, content_type="application/json", ) assert response.status_code == status.HTTP_403_FORBIDDEN