def save_question(self, data, suffix=''): """ Adds question to question collection stored in ``QuestionController`` class. :param data: JSON object that contains question in a format: data = { 'id': 1, 'text': 'Text', 'alternatives': [ { 'id': '1', 'text': 'Text', 'isCorrect': 'false' }, { 'id': '2', 'text': 'Text2', 'isCorrect': 'false' }, ... ], 'hasDifficultyLevel': 'false' } :param suffix: :return: JSON object with the size of questions collection and last added question """ try: q_id = int(data['id']) q_text = data['text'] if data['hasDifficultyLevel']: q_has_diff_lvl = True else: q_has_diff_lvl = False new_question = Question(q_id, q_text, q_has_diff_lvl) for i in range(0, len(data['alternatives'])): # TODO: Note that the called function in CreatedAnswers throws error # TODO: See comment in Question::add_alternative if not new_question.add_alternative(i, data['alternatives'][i]['text'], data['alternatives'][i]['isCorrect']): return {'status': 'Not saved', 'message': 'Alternative is not valid'} if new_question.is_valid: if q_id < 0: new_question.set_question_id(len(self.questions_json_list)) self.questions_json_list.append(new_question.to_json()) else: for i in range(0, len(self.questions_json_list)): if self.questions_json_list[i]['id'] == q_id: del self.questions_json_list[i] self.questions_json_list.insert(i, new_question.to_json()) num_questions = len(self.questions_json_list) question = self.questions_json_list[num_questions - 1] return {'status': 'successful', 'numQuestions': num_questions, 'question': question} else: return{'status': 'unsuccessful', 'message': 'Question data is not valid'} except Exception as ex: return {'status': 'unsuccessful', 'message': str(ex)}
def save_question(self, data, suffix=''): """ Adds question to question collection stored in ``QuestionController`` class. :param data: JSON object that contains question in a format: data = { 'id': 1, 'text': 'Text', 'alternatives': [ { 'id': '1', 'text': 'Text', 'isCorrect': 'false' }, { 'id': '2', 'text': 'Text2', 'isCorrect': 'false' }, ... ], 'hasDifficultyLevel': 'false' } :param suffix: :return: JSON object with the size of questions collection and last added question """ try: q_id = int(data['id']) q_text = data['text'] if data['hasDifficultyLevel']: q_has_diff_lvl = True else: q_has_diff_lvl = False new_question = Question(q_id, q_text, q_has_diff_lvl) for i in range(0, len(data['alternatives'])): # TODO: Note that the called function in CreatedAnswers throws error # TODO: See comment in Question::add_alternative if not new_question.add_alternative( i, data['alternatives'][i]['text'], data['alternatives'][i]['isCorrect']): return { 'status': 'Not saved', 'message': 'Alternative is not valid' } if new_question.is_valid: if q_id < 0: new_question.set_question_id(len(self.questions_json_list)) self.questions_json_list.append(new_question.to_json()) else: for i in range(0, len(self.questions_json_list)): if self.questions_json_list[i]['id'] == q_id: del self.questions_json_list[i] self.questions_json_list.insert( i, new_question.to_json()) num_questions = len(self.questions_json_list) question = self.questions_json_list[num_questions - 1] return { 'status': 'successful', 'numQuestions': num_questions, 'question': question } else: return { 'status': 'unsuccessful', 'message': 'Question data is not valid' } except Exception as ex: return {'status': 'unsuccessful', 'message': str(ex)}
class test_question(unittest.TestCase): def setUp(self): self.q = Question(1, "some text", True) def test_get_question_id(self): id = self.q.get_question_id() assert id == 1 def test_set_question_text(self): self.q.set_question_text("test is best") assert self.q.get_question_text() == "test is best" def test_set_has_difficulty_level(self): self.q.set_has_difficulty_level(True) assert self.q.get_has_difficulty_level() == True def test_add_alternative(self): self.q.add_alternative(0, "An alternative", True) self.q.add_alternative(1, "An alternative 2", False) alternatives = self.q.get_alternatives() assert len(alternatives) == 2 def test_add_alternative_negative(self): self.q.add_alternative("A", "An alternative", True) alternatives = self.q.get_alternatives() assert len(alternatives) == 0 def test_is_valid(self): self.q.set_question_text("test is best") self.q.add_alternative(0, "An alternative", True) self.q.add_alternative(1, "An alternative 2", False) valid = self.q.is_valid() assert valid == True def test_is_valid_id_negative(self): self.q.set_question_id(0) valid = self.q.is_valid() assert valid == False def test_is_valid_text_negative(self): self.q.set_question_id(1) self.q.set_question_text("") valid = self.q.is_valid() assert valid == False def test_is_valid_difficulty_level_negative(self): self.q.set_question_id(1) self.q.set_question_text("Test question") self.q.set_has_difficulty_level(None) valid = self.q.is_valid() assert valid == False def test_is_valid_alternatives_negative(self): self.q.set_question_id(1) self.q.set_question_text("Test question") self.q.set_has_difficulty_level(True) valid = self.q.is_valid() assert valid == False def test_to_json(self): self.q.set_question_text("test is best") self.q.add_alternative(0, "An alternative", True) json = self.q.to_json() assert "id" in json assert "question" in json assert "alternatives" in json assert "has_difficulty_level" in json assert "id" in json["alternatives"][0] assert "text" in json["alternatives"][0] assert "isCorrect" in json["alternatives"][0] assert json["id"] == 1 assert json["question"] == "test is best" assert json["has_difficulty_level"] == True assert json["alternatives"][0]["id"] == 0 assert json["alternatives"][0]["text"] == "An alternative" assert json["alternatives"][0]["isCorrect"] == True
class test_question(unittest.TestCase): def setUp(self): self.q = Question(1, "some text", True) def test_get_question_id(self): id = self.q.get_question_id() assert id == 1 def test_set_question_text(self): self.q.set_question_text("test is best") assert self.q.get_question_text() == "test is best" def test_set_has_difficulty_level(self): self.q.set_has_difficulty_level(True) assert self.q.get_has_difficulty_level() == True def test_add_alternative(self): self.q.add_alternative(0, "An alternative", True) self.q.add_alternative(1, "An alternative 2", False) alternatives = self.q.get_alternatives(); assert len(alternatives) == 2 def test_add_alternative_negative(self): self.q.add_alternative("A", "An alternative", True) alternatives = self.q.get_alternatives() assert len(alternatives) == 0 def test_is_valid(self): self.q.set_question_text("test is best") self.q.add_alternative(0, "An alternative", True) self.q.add_alternative(1, "An alternative 2", False) valid = self.q.is_valid() assert valid == True def test_is_valid_id_negative(self): self.q.set_question_id(0) valid = self.q.is_valid() assert valid == False def test_is_valid_text_negative(self): self.q.set_question_id(1) self.q.set_question_text("") valid = self.q.is_valid() assert valid == False def test_is_valid_difficulty_level_negative(self): self.q.set_question_id(1) self.q.set_question_text("Test question") self.q.set_has_difficulty_level(None) valid = self.q.is_valid() assert valid == False def test_is_valid_alternatives_negative(self): self.q.set_question_id(1) self.q.set_question_text("Test question") self.q.set_has_difficulty_level(True) valid = self.q.is_valid() assert valid == False def test_to_json(self): self.q.set_question_text("test is best") self.q.add_alternative(0, "An alternative", True) json = self.q.to_json() assert "id" in json assert "question" in json assert "alternatives" in json assert "has_difficulty_level" in json assert "id" in json["alternatives"][0] assert "text" in json["alternatives"][0] assert "isCorrect" in json["alternatives"][0] assert json["id"] == 1 assert json["question"] == "test is best" assert json["has_difficulty_level"] == True assert json["alternatives"][0]["id"] == 0 assert json["alternatives"][0]["text"] == "An alternative" assert json["alternatives"][0]["isCorrect"] == True