class SurveyUnauthenticatedTest(TestCase): def setUp(self): self.survey = Survey(title='A testing survey') self.survey.save() self.question = Question(body='A Question', kind=Question.TEXT, survey=self.survey) self.question.save() def test_show_survey_redirect(self): response = self.client.get( reverse('survey', kwargs={'survey_id': self.survey.id})) self.assertEqual(response.status_code, 200)
def test_store_response_and_redirect(self): self.create_question(Question.NUMERIC) question_two = Question(body='Question two', kind=Question.TEXT, survey=self.survey) question_two.save() question_ids_two = {'survey_id': self.survey.id, 'question_id': question_two.id} question_store_url_one = reverse('save_response', kwargs=self.question_ids) next_question_url = reverse('question', kwargs=question_ids_two) request_parameters = { 'CallSid': 'somerandomuniqueid', 'From': '324238944', 'Digits': '4' } response = self.client.post(question_store_url_one, request_parameters) assert '<Redirect method="GET"' in response.content.decode('utf8') assert next_question_url in response.content.decode('utf8')
class SurveyResultsTest(TestCase): def setUp(self): # Create a new user self.credentials = { 'email': '*****@*****.**', 'password': '******' } self.login_credentials = { 'username': '******', 'password': '******' } User = auth.get_user_model() user = User.objects.create_user(**self.credentials) self.client.login(**self.login_credentials) # Setup the survey self.survey = Survey.objects.create(title='A testing survey') self.question = Question(body='Question one', kind=Question.TEXT, survey=self.survey) self.question.save() QuestionResponse(response='gopher://audio.mp3', call_sid='sup3runiq3', phone_number='+14155552671', question=self.question).save() def test_render_context(self): survey_results_url = reverse('survey_results', kwargs={'survey_id': self.survey.id}) response = self.client.get(survey_results_url) expected_responses = [{ 'body': 'Question one', 'phone_number': '+14155552671', 'kind': 'text', 'response': 'gopher://audio.mp3', 'call_sid': 'sup3runiq3' }] assert expected_responses == response.context['responses'] assert self.survey.title == response.context['survey_title']
class ShowQuestionTest(TestCase): def setUp(self): # Create a new user self.credentials = {'email': '*****@*****.**', 'password': '******'} self.login_credentials = { 'username': '******', 'password': '******' } User = auth.get_user_model() user = User.objects.create_user(**self.credentials) self.client.login(**self.login_credentials) self.survey = Survey(title='A testing survey') self.survey.save() self.question = Question(body='A Question', kind=Question.TEXT, survey=self.survey) self.question.save() self.question_ids = { 'survey_id': self.survey.id, 'question_id': self.question.id } def test_show_text_question_during_a_call(self): question_store_url = reverse('question', kwargs=self.question_ids) text_response = self.client.get( reverse('question', kwargs=self.question_ids)) assert self.question.body in text_response.content.decode('utf8') assert '<Record' in text_response.content.decode('utf8') assert question_store_url in text_response.content.decode('utf8') def test_transcription_is_enabled(self): save_url = reverse('save_response', kwargs=self.question_ids) expected_attribute = 'transcribeCallback="%s"' % (save_url) text_response = self.client.get( reverse('question', kwargs=self.question_ids)) assert expected_attribute in text_response.content.decode('utf8') def test_show_numeric_question_during_a_call(self): self.question.kind = Question.NUMERIC self.question.save() numeric_response = self.client.get( reverse('question', kwargs=self.question_ids)) assert 'Gather' in numeric_response.content.decode('utf8') def test_show_yesno_question_during_a_call(self): self.question.kind = Question.YES_NO self.question.save() yesno_response = self.client.get( reverse('question', kwargs=self.question_ids)) assert 'Gather' in yesno_response.content.decode('utf8') def test_uses_proper_verbs_for_sms(self): sms_parameters = {'MessageSid': 'SMS123'} text_response = self.client.get( reverse('question', kwargs=self.question_ids), sms_parameters) assert self.question.body in text_response.content.decode('utf8') assert '<Message' in text_response.content.decode('utf8') assert '<Record' not in text_response.content.decode('utf8') assert '<Say' not in text_response.content.decode('utf8') def test_sms_creates_a_web_session(self): sms_parameters = {'MessageSid': 'SMS123'} self.client.get(reverse('question', kwargs=self.question_ids), sms_parameters) assert self.client.session["answering_question_id"] == self.question.id
class StoreQuestionResponseTest(TestCase): def setUp(self): self.survey = Survey(title='A testing survey') self.survey.save() def create_question(self, kind): self.question = Question(body='Question one', kind=kind, survey=self.survey) self.question.save() self.question_ids = {'survey_id': self.survey.id, 'question_id': self.question.id} def test_store_response_during_a_call(self): self.create_question(Question.TEXT) question_store_url = reverse('save_response', kwargs=self.question_ids) request_parameters = { 'CallSid': 'somerandomuniqueid', 'From': '324238944', 'RecordingUrl': 'gopher://recording.mp3' } self.client.post(question_store_url, request_parameters) new_response = QuestionResponse.objects.get(question_id=self.question.id) assert new_response.call_sid == 'somerandomuniqueid' assert new_response.phone_number == '324238944' assert new_response.response == 'gopher://recording.mp3' def test_store_transcription_update(self): self.create_question(Question.TEXT) question_store_url = reverse('save_response', kwargs=self.question_ids) request_parameters = { 'CallSid': 'somerandomuniqueid', 'From': '324238944', 'RecordingUrl': 'gopher://recording.mp3' } self.client.post(question_store_url, request_parameters) request_parameters['TranscriptionText'] = 'Do you hear me?' self.client.post(question_store_url, request_parameters) new_response = QuestionResponse.objects.get(question_id=self.question.id) assert new_response.call_sid == 'somerandomuniqueid' assert new_response.phone_number == '324238944' assert new_response.response == 'Do you hear me?' def test_store_SMS_response(self): self.create_question(Question.TEXT) question_store_url = reverse('save_response', kwargs=self.question_ids) request_parameters = { 'MessageSid': 'somerandomuniqueid', 'From': '324238944', 'Body': 'I agree with you' } self.client.post(question_store_url, request_parameters) new_response = QuestionResponse.objects.get(question_id=self.question.id) assert new_response.call_sid == 'somerandomuniqueid' assert new_response.phone_number == '324238944' assert new_response.response == 'I agree with you' def test_store_response_and_redirect(self): self.create_question(Question.NUMERIC) question_two = Question(body='Question two', kind=Question.TEXT, survey=self.survey) question_two.save() question_ids_two = {'survey_id': self.survey.id, 'question_id': question_two.id} question_store_url_one = reverse('save_response', kwargs=self.question_ids) next_question_url = reverse('question', kwargs=question_ids_two) request_parameters = { 'CallSid': 'somerandomuniqueid', 'From': '324238944', 'Digits': '4' } response = self.client.post(question_store_url_one, request_parameters) assert '<Redirect method="GET"' in response.content.decode('utf8') assert next_question_url in response.content.decode('utf8') def test_validate_question_kind(self): self.create_question('invalid') invalid_question_store_url = reverse('save_response', kwargs=self.question_ids) request_parameters = { 'CallSid': 'somerandomuniqueid', 'From': '324238944', 'Digits': '4' } with self.assertRaises(ValidationError): self.client.post(invalid_question_store_url, request_parameters) def test_last_question_during_a_call(self): self.create_question(Question.NUMERIC) question_store_url_one = reverse('save_response', kwargs=self.question_ids) request_parameters = { 'CallSid': 'somerandomuniqueid', 'From': '324238944', 'Digits': '4' } response = self.client.post(question_store_url_one, request_parameters) response = response.content.decode('utf8') assert 'Good-bye' in response assert '<Say>' in response assert '<Hangup' in response def test_last_question_over_sms(self): self.create_question(Question.NUMERIC) question_store_url_one = reverse('save_response', kwargs=self.question_ids) request_parameters = { 'MessageSid': 'somerandomuniqueid', 'From': '324238944', 'Body': '4' } response = self.client.post(question_store_url_one, request_parameters) response = response.content.decode('utf8') assert 'Good-bye' in response assert '<Message>' in response assert 'Redirect' not in response
class SurveyRedirectionTest(TestCase): def setUp(self): # Create a new user self.credentials = { 'email': '*****@*****.**', 'password': '******' } self.login_credentials = { 'username': '******', 'password': '******' } User = auth.get_user_model() user = User.objects.create_user(**self.credentials) self.client.login(**self.login_credentials) # Setup the survey self.survey = Survey(title='A testing survey') self.survey.save() self.question = Question(body='A Question', kind=Question.TEXT, survey=self.survey) self.question.save() def test_default_entry_point_redirection(self): response = self.client.post(reverse('first_survey')) expected_url = reverse('survey', kwargs={'survey_id': self.survey.id}) assert expected_url in response.url def test_redirects_to_save_response_due_session_variable(self): session = self.client.session session['answering_question_id'] = self.question.id session.save() response = self.client.post(reverse('first_survey')) expected_url = reverse('save_response', kwargs={ 'survey_id': self.question.survey.id, 'question_id': self.question.id }) assert expected_url in response.url def test_show_message_verb_on_sms(self): response = self.client.get( reverse('survey', kwargs={'survey_id': self.survey.id}), {'MessageSid': '123'}) assert '<Message>' in response.content.decode('utf8') assert '<Say>' not in response.content.decode('utf8') def test_show_survey(self): response = self.client.get( reverse('survey', kwargs={'survey_id': self.survey.id})) assert self.survey.title in response.content.decode('utf8') def test_redirect_to_first_question(self): response = self.client.get( reverse('survey', kwargs={'survey_id': self.survey.id})) url_parameters = { 'survey_id': self.survey.id, 'question_id': self.question.id } redirect_url = reverse('question', kwargs=url_parameters) assert redirect_url in response.content.decode('utf8')