import pytest import requests import json OK = 200 CREATED = 201 NOT_FOUND = 404 CONFLICT = 409 from constants import WEBSITE_PREFIX def test_multiple_exam_apis(): new_exam = { 'name': '期中考试', 'description': '可以回家做', 'duration': 86400, # seconds } resp = create_exam(new_exam) assert(resp.status_code == OK) examId = json.loads(resp.text)['id'] resp = all_exams() assert(resp.status_code == OK) exams = json.loads(resp.text) assert(len(exams) == 1) non_exist_user = { 'userName': 'fake' } resp = all_exams(non_exist_user) # show the exams available to this given user exams = json.loads(resp.text) assert(len(exams) == 0) resp = get_exam(examId) assert(resp.status_code == OK) exam = json.loads(resp.text) assert(exam['description'] == '可以回家做') assert(exam['duration'] == 86400) resp = edit_exam(examId, { 'duration': 100 }) assert(resp.status_code == OK) assert(json.loads(resp.text)['duration'] == 100) from user_test import register_user, delete_user, get_user resp = register_user('exam-lover', 'iloveexam') assert(resp.status_code == CREATED) resp = get_user('exam-lover') user = json.loads(resp.text) question = { 'userId': user['userName'], 'content': '天上什么星星最亮?', 'answers': ['太阳', '小天狼星', '北极星'], 'finalAnswer': ['小天狼星'], 'type': 'DanXuan' } resp = create_question(question) assert(resp.status_code == OK) qid = json.loads(resp.text)['id'] resp = get_question(qid) assert(resp.status_code == OK) created_question = json.loads(resp.text) assert(created_question['userId'] == user['userName']) assert(created_question['finalAnswer'][0] == '小天狼星') resp = edit_question(qid, { 'finalAnswer': ['太阳'] }) updated_question = json.loads(resp.text) assert(updated_question['finalAnswer'][0] == '太阳') resp = add_question_to_exam(examId, [updated_question]) assert(resp.status_code == OK) resp = start_exam(examId, user) assert(resp.status_code == OK) questions = json.loads(resp.text) assert(len(questions) == 1) # 1 question is under this exam resp = end_exam(examId, { 'startTime': '2021-01-01T17:09:42.411', 'endTime': '2021-01-01T17:09:50.411', 'userId': user['userName'], 'points': 5 }) assert(resp.status_code == OK) resp = remove_question_from_exam(examId, updated_question) resp = start_exam(examId, user) assert(resp.status_code == OK) questions = json.loads(resp.text) assert(len(questions) == 0) # 0 question is under this exam after removal delete_question(updated_question['id']) remove_exam(examId) delete_user(user['userName']) def create_exam(exam): url = WEBSITE_PREFIX + '/admin/exams' return requests.post(url, json=exam) def get_exam(examId): url = WEBSITE_PREFIX + '/exams/' + examId return requests.get(url) def edit_exam(examId, updatedExam): url = WEBSITE_PREFIX + '/exams/' + examId return requests.put(url, json=updatedExam) def remove_exam(examId): url = WEBSITE_PREFIX + '/exams/' + examId return requests.delete(url) def start_exam(examId, user): url = WEBSITE_PREFIX + '/exams/' + examId + '/start' return requests.post(url, json=user) def end_exam(examId, examHistory): url = WEBSITE_PREFIX + '/exams/' + examId + '/end' return requests.post(url, json=examHistory) def all_exams(user = None): url = WEBSITE_PREFIX + '/exams' return requests.get(url, json=user) def get_question(qid): url = WEBSITE_PREFIX + '/questions/' + qid return requests.get(url) def create_question(question): url = WEBSITE_PREFIX + '/questions/' return requests.post(url, json=question) def edit_question(qid, updatedQuestion): url = WEBSITE_PREFIX + '/questions/' + qid return requests.put(url, json=updatedQuestion) def delete_question(qid): url = WEBSITE_PREFIX + '/questions/' + qid return requests.delete(url) def add_question_to_exam(examId, questions): url = WEBSITE_PREFIX + '/exams/' + examId + '/questions' return requests.post(url, json=questions) def remove_question_from_exam(examId, question): url = WEBSITE_PREFIX + '/exams/' + examId + '/questions' return requests.delete(url, json=question)