def test_that_get_script_progress_for_poll_returns_none_if_there_is_no_script_progress_for_the_poll(self): poll = self.setup_poll() view = SubmitPollResponses() backend = Backend.objects.create(name="test_backend") view.connection = Connection.objects.create(identity="7777", backend=backend) script_progress = view.get_script_progress_for_poll(poll) self.assertEqual(None, script_progress)
def test_that_get_script_progress_for_poll_returns_none_if_there_is_no_script_progress_for_the_poll( self): poll = self.setup_poll() view = SubmitPollResponses() backend = Backend.objects.create(name="test_backend") view.connection = Connection.objects.create(identity="7777", backend=backend) script_progress = view.get_script_progress_for_poll(poll) self.assertEqual(None, script_progress)
def test_that_get_script_progress_for_poll_returns_script_progress(self): poll = self.setup_poll() view = SubmitPollResponses() backend = Backend.objects.create(name="test_backend") view.connection = Connection.objects.create(identity="7777", backend=backend) script, created = Script.objects.get_or_create(slug="ureport_autoreg2") ScriptStep.objects.create(script=script, order=1, poll=poll) script_progress = ScriptProgress.objects.create(connection=view.connection, script=script) script_progress.start() self.assertEqual(script_progress, view.get_script_progress_for_poll(poll))
def test_that_that_script_progress_moves_to_next_step_if_exists(self): poll = self.setup_poll() view = SubmitPollResponses() backend = Backend.objects.create(name="test_backend") view.connection = Connection.objects.create(identity="7777", backend=backend) script, created = Script.objects.get_or_create(slug="ureport_autoreg2") ScriptStep.objects.create(script=script, order=1, poll=poll) ScriptStep.objects.create(script=script, order=2, message="") script_progress = ScriptProgress.objects.create(connection=view.connection, script=script) script_progress.start() view.process_registration_steps(poll) reloaded_script_progress = ScriptProgress.objects.get(pk=script_progress.id) self.assertEqual(2, reloaded_script_progress.step.order)
def test_that_get_script_progress_for_poll_returns_script_progress(self): poll = self.setup_poll() view = SubmitPollResponses() backend = Backend.objects.create(name="test_backend") view.connection = Connection.objects.create(identity="7777", backend=backend) script, created = Script.objects.get_or_create(slug="ureport_autoreg2") ScriptStep.objects.create(script=script, order=1, poll=poll) script_progress = ScriptProgress.objects.create( connection=view.connection, script=script) script_progress.start() self.assertEqual(script_progress, view.get_script_progress_for_poll(poll))
def test_process_poll_returns_an_outgoing_message(self): backend = Backend.objects.create(name="test_backend") connection = Connection.objects.create(identity="7777", backend=backend) contact, contact_created = Contact.objects.get_or_create(name='John Jonny') connection.contact = contact connection.save() script = Script.objects.create(slug="who") ScriptSession.objects.create(connection=connection, script=script) default_response = "Thanks" poll = self.setup_poll(default_response) view = SubmitPollResponses() view.connection = connection accepted, outgoing_message = view.process_poll_response("Yes", poll) self.assertEqual(True, accepted) self.assertEqual(default_response, outgoing_message)
def test_that_that_script_progress_moves_to_next_step_if_exists(self): poll = self.setup_poll() view = SubmitPollResponses() backend = Backend.objects.create(name="test_backend") view.connection = Connection.objects.create(identity="7777", backend=backend) script, created = Script.objects.get_or_create(slug="ureport_autoreg2") ScriptStep.objects.create(script=script, order=1, poll=poll) ScriptStep.objects.create(script=script, order=2, message="") script_progress = ScriptProgress.objects.create( connection=view.connection, script=script) script_progress.start() view.process_registration_steps(poll) reloaded_script_progress = ScriptProgress.objects.get( pk=script_progress.id) self.assertEqual(2, reloaded_script_progress.step.order)
def test_process_poll_returns_an_outgoing_message(self): backend = Backend.objects.create(name="test_backend") connection = Connection.objects.create(identity="7777", backend=backend) contact, contact_created = Contact.objects.get_or_create( name='John Jonny') connection.contact = contact connection.save() script = Script.objects.create(slug="who") ScriptSession.objects.create(connection=connection, script=script) default_response = "Thanks" poll = self.setup_poll(default_response) view = SubmitPollResponses() view.connection = connection accepted, outgoing_message = view.process_poll_response("Yes", poll) self.assertEqual(True, accepted) self.assertEqual(default_response, outgoing_message)
url(r"^pulse/(?P<period>\w+)/$", pulse, name='pulse_json'), url(r"^map-cloud/$", map_cloud, name='map_cloud'), url(r"^upload-contacts", upload_users, name='upload_users'), url(r"^access/dashboards/$", access_dashboards, name='access_dashboards'), url(r"^assign-group", assign_group, name="assign_group"), url(r'^start_poll_export/(\d+)/$', start_poll_export, name="start_poll_export"), url(r"^backend/vumi/$", VumiBackendView.as_view(backend_name="vumi")), url(r"^api/v1/ureporters/registration/steps$", RegistrationStepsView.as_view()), url(r"^api/v1/ureporters/(?P<backend>\w+)/(?P<user_address>\+?\w+)$", ViewUReporter.as_view(), name="view_ureporter_api"), url(r"^api/v1/ureporters/(?P<backend>\w+)/(?P<user_address>\+?\w+)/polls/current$", ViewCurrentPoll.as_view(), name="view_current_poll_api"), url(r"^api/v1/ureporters/(?P<backend>\w+)/(?P<user_address>\+?\w+)/poll/(?P<poll_id>\d+)/responses/$", SubmitPollResponses.as_view(), name="submit_poll_response_api"), url(r"^api/v1/ureporters/(?P<backend>\w+)/(?P<user_address>\+?\w+)/polls/topics$", PollTopicsApiView.as_view(), name="poll_topics_api"), url(r"^api/v1/ureporters/(?P<backend>\w+)/(?P<user_address>\+?\w+)/reports/$", SubmitReportApiView.as_view(), name="submit_report_api"), url( r"^api/v1/ureporters/(?P<backend>\w+)/(?P<user_address>\+?\w+)/poll/(?P<poll_id>\d+)/summary$", PollSummary.as_view()), )
('', False, '', None)], }, name="ureport-contact2"), (r'^api/', include(v1_api.urls)), url(r'^comfirm/(?P<key>.+)/$', comfirm_message_sending, name="comfirm"), url(r'^comfirmmessages/(?P<key>.+)/$', comfirmmessages, name="comfirm-messages"), url(r"^dumpreport/(\d+)/$", generate_poll_dump_report), url(r"^districtreport/(\d+)/$", generate_per_district_report), url(r"^pulse/$", pulse, name='pulse_json'), url(r"^pulse/(?P<period>\w+)/$", pulse, name='pulse_json'), url(r"^map-cloud/$", map_cloud, name='map_cloud'), url(r"^upload-contacts", upload_users, name='upload_users'), url(r"^access/dashboards/$", access_dashboards, name='access_dashboards'), url(r"^assign-group", assign_group, name="assign_group"), url(r'^start_poll_export/(\d+)/$', start_poll_export, name="start_poll_export"), url(r"^backend/vumi/$", VumiBackendView.as_view(backend_name="vumi")), url(r"^api/v1/ureporters/registration/steps$", RegistrationStepsView.as_view()), url(r"^api/v1/ureporters/(?P<backend>\w+)/(?P<user_address>\+?\w+)$", ViewUReporter.as_view(), name="view_ureporter_api"), url(r"^api/v1/ureporters/(?P<backend>\w+)/(?P<user_address>\+?\w+)/polls/current$", ViewCurrentPoll.as_view(), name="view_current_poll_api"), url( r"^api/v1/ureporters/(?P<backend>\w+)/(?P<user_address>\+?\w+)/poll/(?P<poll_id>\d+)/responses/$", SubmitPollResponses.as_view(), name="submit_poll_response_api"), url(r"^api/v1/ureporters/(?P<backend>\w+)/(?P<user_address>\+?\w+)/polls/topics$", PollTopicsApiView.as_view(), name="poll_topics_api"), url(r"^api/v1/ureporters/(?P<backend>\w+)/(?P<user_address>\+?\w+)/reports/$", SubmitReportApiView.as_view(), name="submit_report_api"), url(r"^api/v1/ureporters/(?P<backend>\w+)/(?P<user_address>\+?\w+)/poll/(?P<poll_id>\d+)/summary$", PollSummary.as_view()), )
def setUp(self): self.view = SubmitPollResponses()
class PollResponsesTest(unittest.TestCase): def setUp(self): self.view = SubmitPollResponses() def test_that_json_data_in_request_is_parsed_correctly_as_json(self): message = "Successful message" request_factory = RequestFactory() fake_request = request_factory.post("/", "{\"message\": \"%s\"}" % message, "application/json") data = self.view.get_json_data(fake_request) self.assertEqual(message, data['message']) def test_that_the_poll_response_is_in_the_correct_format(self): request_factory = RequestFactory() response = "Yes" fake_request = request_factory.post("/", "{\"response\": \"%s\"}" % response, "application/json") self.assertEqual(response, self.view.get_incoming_response(fake_request)) def test_that_in_case_of_get_it_raise_405(self): http_response = self.view.get(None) self.assertEqual(405, http_response.status_code) def test_that_it_raises_a_404_if_the_poll_does_not_exist(self): fake_get_poll = Mock(side_effect=Poll.DoesNotExist) self.view.get_poll_by_id = fake_get_poll with self.assertRaises(Http404): self.view.get_poll("23") def test_that_if_response_has_errors_accepted_is_false(self): fake_poll = Mock() fake_poll.process_response = Mock(return_value=(Response(has_errors=True), "")) self.view.create_incoming_message = Mock(return_value=None) self.view.create_script_response = Mock(return_value=None) accepted, message = self.view.process_poll_response("", fake_poll) self.assertEqual(accepted, False) def test_that_if_response_does_not_have_errors_accepted_is_true(self): fake_poll = Mock() fake_poll.process_response = Mock(return_value=(Response(has_errors=False), "")) self.view.create_incoming_message = Mock(return_value=None) self.view.create_script_response = Mock(return_value=None) accepted, message = self.view.process_poll_response("", fake_poll) self.assertEqual(accepted, True) def test_that_if_the_response_has_no_errors_and_the_poll_has_a_script_progress_it_is_moved_on(self): fake_poll = Mock() fake_progress = Mock() fake_moveon_method = Mock() fake_progress.moveon = fake_moveon_method self.view.get_script_progress_for_poll = Mock(return_value=fake_progress) self.view.process_registration_steps(fake_poll) assert fake_moveon_method.called def test_that_if_the_response_has_no_errors_and_the_poll_has_no_script_progress_it_is_moved_on(self): fake_poll = Mock() fake_progress = Mock() fake_moveon_method = Mock() fake_progress.moveon = fake_moveon_method self.view.get_script_progress_for_poll = Mock(return_value=None) self.view.process_registration_steps(fake_poll) assert not fake_moveon_method.called def test_that_if_the_response_is_accepted_the_script_steps_are_checked(self): self.view.get_poll = Mock(return_value=Poll()) self.view.get_incoming_response = Mock() self.view.process_poll_response = Mock(return_value=(True, "")) self.view.create_json_response = Mock() fake_process_registration = Mock() self.view.process_registration_steps = fake_process_registration self.view.post(self, None, **{'poll_id': "12"}) assert fake_process_registration.called def test_that_if_the_response_is_not_accepted_the_script_steps_are_not_checked(self): self.view.get_poll = Mock(return_value=Poll()) self.view.get_incoming_response = Mock() self.view.process_poll_response = Mock(return_value=(False, "")) self.view.create_json_response = Mock() fake_process_registration = Mock() self.view.process_registration_steps = fake_process_registration self.view.post(self, None, **{'poll_id': "12"}) assert not fake_process_registration.called def test_that_it_returns_a_400_response_if_the_json_is_in_the_wrong_format(self): fake_request_factory = RequestFactory() fake_request = fake_request_factory.post('/', {"": ""}) fake_request._raw_post_data = "///sd" self.view.get_poll = Mock(return_value=None) response = self.view.post(fake_request) self.assertEqual(400, response.status_code) def test_that_it_returns_a_400_if_the_json_has_no_key_response(self): fake_request_factory = RequestFactory() fake_request = fake_request_factory.post('/', {"": ""}) fake_request._raw_post_data = "{}" self.view.get_poll = Mock(return_value=None) response = self.view.post(fake_request) self.assertEqual(400, response.status_code)
class PollResponsesTest(unittest.TestCase): def setUp(self): self.view = SubmitPollResponses() def test_that_json_data_in_request_is_parsed_correctly_as_json(self): message = "Successful message" request_factory = RequestFactory() fake_request = request_factory.post("/", "{\"message\": \"%s\"}" % message, "application/json") data = self.view.get_json_data(fake_request) self.assertEqual(message, data['message']) def test_that_the_poll_response_is_in_the_correct_format(self): request_factory = RequestFactory() response = "Yes" fake_request = request_factory.post( "/", "{\"response\": \"%s\"}" % response, "application/json") self.assertEqual(response, self.view.get_incoming_response(fake_request)) def test_that_in_case_of_get_it_raise_405(self): http_response = self.view.get(None) self.assertEqual(405, http_response.status_code) def test_that_it_raises_a_404_if_the_poll_does_not_exist(self): fake_get_poll = Mock(side_effect=Poll.DoesNotExist) self.view.get_poll_by_id = fake_get_poll with self.assertRaises(Http404): self.view.get_poll("23") def test_that_if_response_has_errors_accepted_is_false(self): fake_poll = Mock() fake_poll.process_response = Mock(return_value=(Response( has_errors=True), "")) self.view.create_incoming_message = Mock(return_value=None) self.view.create_script_response = Mock(return_value=None) accepted, message = self.view.process_poll_response("", fake_poll) self.assertEqual(accepted, False) def test_that_if_response_does_not_have_errors_accepted_is_true(self): fake_poll = Mock() fake_poll.process_response = Mock(return_value=(Response( has_errors=False), "")) self.view.create_incoming_message = Mock(return_value=None) self.view.create_script_response = Mock(return_value=None) accepted, message = self.view.process_poll_response("", fake_poll) self.assertEqual(accepted, True) def test_that_if_the_response_has_no_errors_and_the_poll_has_a_script_progress_it_is_moved_on( self): fake_poll = Mock() fake_progress = Mock() fake_moveon_method = Mock() fake_progress.moveon = fake_moveon_method self.view.get_script_progress_for_poll = Mock( return_value=fake_progress) self.view.process_registration_steps(fake_poll) assert fake_moveon_method.called def test_that_if_the_response_has_no_errors_and_the_poll_has_no_script_progress_it_is_moved_on( self): fake_poll = Mock() fake_progress = Mock() fake_moveon_method = Mock() fake_progress.moveon = fake_moveon_method self.view.get_script_progress_for_poll = Mock(return_value=None) self.view.process_registration_steps(fake_poll) assert not fake_moveon_method.called def test_that_if_the_response_is_accepted_the_script_steps_are_checked( self): self.view.get_poll = Mock(return_value=Poll()) self.view.get_incoming_response = Mock() self.view.process_poll_response = Mock(return_value=(True, "")) self.view.create_json_response = Mock() fake_process_registration = Mock() self.view.process_registration_steps = fake_process_registration self.view.post(self, None, **{'poll_id': "12"}) assert fake_process_registration.called def test_that_if_the_response_is_not_accepted_the_script_steps_are_not_checked( self): self.view.get_poll = Mock(return_value=Poll()) self.view.get_incoming_response = Mock() self.view.process_poll_response = Mock(return_value=(False, "")) self.view.create_json_response = Mock() fake_process_registration = Mock() self.view.process_registration_steps = fake_process_registration self.view.post(self, None, **{'poll_id': "12"}) assert not fake_process_registration.called def test_that_it_returns_a_400_response_if_the_json_is_in_the_wrong_format( self): fake_request_factory = RequestFactory() fake_request = fake_request_factory.post('/', {"": ""}) fake_request._raw_post_data = "///sd" self.view.get_poll = Mock(return_value=None) response = self.view.post(fake_request) self.assertEqual(400, response.status_code) def test_that_it_returns_a_400_if_the_json_has_no_key_response(self): fake_request_factory = RequestFactory() fake_request = fake_request_factory.post('/', {"": ""}) fake_request._raw_post_data = "{}" self.view.get_poll = Mock(return_value=None) response = self.view.post(fake_request) self.assertEqual(400, response.status_code)