def test_create_no_more_info_enabled(self, mock_xsrf_token): """Create question when more_info_text, placeholder_text not both there.""" del mock_xsrf_token # Unused. malformed_answer_message_1 = survey_messages.Answer( text='This is a malformed message, do not use.', more_info_enabled=True, placeholder_text=None) malformed_answer_message_2 = survey_messages.Answer( text='This is a malformed message, do not use.', more_info_enabled=False, placeholder_text='False place holder text.') request = survey_messages.Question( question_type=survey_models.QuestionType.ASSIGNMENT, question_text=_QUESTION.format(num=1), rand_weight=1, enabled=True) # Test that more info without place holder text raises an exception. with self.assertRaisesRegexp(endpoints.BadRequestException, survey_models._MORE_INFO_MSG): request.answers = [malformed_answer_message_1] self.service.create(request) # Test that place holder text without more info raises an exception. with self.assertRaisesRegexp(endpoints.BadRequestException, survey_models._MORE_INFO_MSG): request.answers = [malformed_answer_message_2] self.service.create(request)
def test_patch_survey_with_answers_to_be_added(self, mock_xsrf_token): """Test patch survey api method with new answers.""" # Create test objects. _, question_keys = self.create_test_models(1) question_key = question_keys[0] # New Answer to be added. new_answer_message1 = survey_messages.Answer( text='NEW TEXT, DO NOT USE', more_info_enabled=True, placeholder_text='PLACEHOLDER TEXT') new_answer_message2 = survey_messages.Answer( text='NEW TEXT, DO NOT USE', more_info_enabled=False) request = survey_messages.PatchQuestionRequest( question_urlsafe_key=question_key.urlsafe(), answers=[new_answer_message1, new_answer_message2]) self.service.patch(request) assert mock_xsrf_token.call_count == 1 # Ensure the new answer was created. self.assertEqual(2, len(question_key.get().answers))
def test_survey_submission(self, mock_submit): """Test the survey submission api method.""" more_info_text = 'More info!' answers, question_keys = self.create_test_models(1) answer_message = survey_messages.Answer( text=answers[0].text, more_info_enabled=answers[0].more_info_enabled, placeholder_text=answers[0].placeholder_text) request = survey_messages.QuestionSubmission( question_urlsafe_key=question_keys[0].urlsafe(), selected_answer=answer_message, more_info_text=more_info_text) response = self.service.submit(request) self.assertEqual(message_types.VoidMessage(), response) mock_submit.assert_called_once_with( acting_user=loanertest.SUPER_ADMIN_EMAIL, selected_answer=answer_message, more_info_text=more_info_text)
def _generate_message_parameters(want_permutations=False): """Generate message parameters for test cases. Args: want_permutations: bool, whether or not to run the messages through various permutations. Yields: A list containing the list of messages. """ answer_message = survey_messages.Answer(text='Left my laptop at home.', more_info_enabled=False, placeholder_text=None) survey_messages_1 = survey_messages.Question( question_type=survey_models.QuestionType.ASSIGNMENT, question_text=_QUESTION.format(num=1), answers=[answer_message], rand_weight=1, required=True) survey_messages_2 = survey_messages.Question( question_type=survey_models.QuestionType.ASSIGNMENT, question_text=_QUESTION.format(num=2), answers=[answer_message], rand_weight=1, enabled=False, required=False) survey_messages_3 = survey_messages.Question( question_type=survey_models.QuestionType.RETURN, question_text=_QUESTION.format(num=3), answers=[answer_message], rand_weight=1, enabled=True) messages = [survey_messages_1, survey_messages_2, survey_messages_3] if want_permutations: for p in itertools.permutations(messages): yield [p] else: yield [messages]
def _build_survey_messages(question_model): """Builds a Question message from a Question NDB model instance. Args: question_model: survey_models.Question, An instance of the Question NDB model from datastore. Returns: A populated survey question message. """ message = survey_messages.Question( question_type=question_model.question_type, question_text=question_model.question_text, enabled=question_model.enabled, rand_weight=question_model.rand_weight, question_urlsafe_key=question_model.key.urlsafe(), required=config_model.Config.get('require_surveys'), ) for answer in question_model.answers: message.answers.append(survey_messages.Answer( text=answer.text, more_info_enabled=answer.more_info_enabled, placeholder_text=answer.placeholder_text)) return message