コード例 #1
0
    def test_that_retrieves_last_step_for_a_script_progress_that_is_in_last_step(self):
        view = ViewCurrentPoll()
        backend = Backend.objects.create(name="test_backend")
        connection = Connection.objects.create(identity="7777", backend=backend)
        script, created = Script.objects.get_or_create(slug="ureport_autoreg2")
        first_step = ScriptStep.objects.create(script=script, order=1)
        second_step = ScriptStep.objects.create(script=script, order=2)
        third_step = ScriptStep.objects.create(script=script, order=3)
        script_progress = ScriptProgress.objects.create(connection=connection, script=script, step=third_step)

        self.assertEqual(third_step, view.get_current_step(script_progress))
コード例 #2
0
    def test_that_retrieves_last_step_for_a_script_progress_that_is_in_last_step(
            self):
        view = ViewCurrentPoll()
        backend = Backend.objects.create(name="test_backend")
        connection = Connection.objects.create(identity="7777",
                                               backend=backend)
        script, created = Script.objects.get_or_create(slug="ureport_autoreg2")
        first_step = ScriptStep.objects.create(script=script, order=1)
        second_step = ScriptStep.objects.create(script=script, order=2)
        third_step = ScriptStep.objects.create(script=script, order=3)
        script_progress = ScriptProgress.objects.create(connection=connection,
                                                        script=script,
                                                        step=third_step)

        self.assertEqual(third_step, view.get_current_step(script_progress))
コード例 #3
0
ファイル: urls.py プロジェクト: techoutlooks/rapidsms-ureport
    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()),
)
コード例 #4
0
 def setUp(self):
     self.view = ViewCurrentPoll()
コード例 #5
0
class CurrentPollTest(unittest.TestCase):
    def setUp(self):
        self.view = ViewCurrentPoll()

    def build_connection(self, contact=Contact()):
        return Connection(identity=77777, backend=Backend(name='my backend'), contact=contact)

    def get_http_response_from_view(self, kwargs, view):
        request_factory = RequestFactory()
        auth_string = base64.b64encode("who:why")
        fake_request = request_factory.get('/', **{"HTTP_AUTHORIZATION": ("Basic %s" % auth_string)})
        self.view.validate_credentials = Mock(return_value=True)
        return view.dispatch(fake_request, None, **kwargs)

    def setup_fake_connection(self):
        fake_connection = Mock()
        fake_connection.return_value = self.build_connection()
        self.view.get_connection = fake_connection

    def setup_fake_poll(self, fake_poll_return_value):
        fake_poll = Mock()
        fake_poll.return_value = fake_poll_return_value
        self.view.get_current_poll_for = fake_poll
        return fake_poll

    def test_404_is_raised_if_backend_does_not_exist(self):
        with self.assertRaises(Http404):
            response = self.get_http_response_from_view({"backend": "my_backend", "user_address": "77777"}, self.view)

    def test_that_in_case_of_post_it_raise_405(self):
        http_response = self.view.post(None)
        self.assertEqual(405, http_response.status_code)

    def test_that_poll_null_for_a_registered_user_with_no_poll(self):
        self.setup_fake_connection()
        self.setup_fake_poll(None)
        self.view.get_backend = Mock(return_value=Backend(name="my_backend"))
        response = self.get_http_response_from_view({"backend": "my_backend", "user_address": "77777"}, self.view)
        data = json.loads(response.content)
        self.assertEqual(True, data['success'])
        self.assertEqual(None, data['poll'])

    def test_that_poll_data_for_a_registered_user_that_has_a_poll(self):
        self.setup_fake_connection()
        poll_data = {"id": 1, "name": "Test Poll", "question": "Is working?"}
        fake_poll = self.setup_fake_poll(poll_data)
        self.view.get_current_poll_for = fake_poll
        self.view.get_backend = Mock(return_value=Backend(name="my_backend"))
        response = self.get_http_response_from_view({"backend": "my_backend", "user_address": "77777"}, self.view)
        data = json.loads(response.content)
        self.assertEqual(True, data['success'])
        self.assertEqual(poll_data, data['poll'])

    def test_that_for_an_unregistered_user_script_progress_object_is_created_if_it_does_not_exist(self):
        fake_connection = Mock()
        fake_connection.return_value = self.build_connection(None)
        self.view.get_connection = fake_connection
        self.view.get_current_step = Mock(return_value=None)
        self.view.get_script_progress = Mock(return_value=ScriptProgress(script=Script(slug="ureport_autoreg2")))
        self.view.get_backend = Mock(return_value=Backend(name="my_backend"))
        response = self.get_http_response_from_view({"backend": "my_backend", "user_address": "77777"}, self.view)
        data = json.loads(response.content)
        self.assertEqual(True, data['success'])
        self.assertEqual("ureport_autoreg2", self.view.script_progress.script.slug)

    def test_that_retrieves_poll_data_from_step_of_script_progress(self):
        fake_connection = Mock()
        fake_connection.return_value = self.build_connection(None)
        self.view.get_connection = fake_connection
        self.view.get_script_progress = Mock(return_value=ScriptProgress(script=Script(slug="ureport_autoreg2")))
        fake_get_next_step = Mock(return_value=ScriptStep(poll=Poll(name="test poll", question="Is it working?")))
        self.view.get_current_step = fake_get_next_step
        self.view.get_backend = Mock(return_value=Backend(name="my_backend"))
        response = self.get_http_response_from_view({"backend": "my_backend", "user_address": "77777"}, self.view)
        data = json.loads(response.content)
        self.assertEqual(True, data['poll']['is_registration'])

    def test_that_data_from_poll_should_have_all_the_neccessary_fields(self):
        question = "is this really a poll ? or a pool ? or a loop?"
        name = "this is a poll"
        an_hour_ago = datetime.datetime.now() - datetime.timedelta(hours=1)
        default_response = "thanks"
        poll = Poll(name=name, question=question, id=12, type="t", start_date=an_hour_ago,
                    default_response=default_response, response_type="a")
        expected_poll_data = {"id": "12", "question": question, "name": name, "language": None, "question_voice": None,
                              "start_date": an_hour_ago.strftime(self.view.get_datetime_format()), "end_date": None,
                              "is_registration": False, "type": "t", "is_registration_end": False,
                              "default_response": default_response, "default_response_voice": None,
                              "response_type": "allow_all"}
        self.assertDictEqual(expected_poll_data, self.view.get_data_from_poll(poll))

    def test_that_if_the_step_is_a_message_the_poll_type_is_none(self):
        message = "hello hallo who aaa"
        fake_get_next_step = Mock(return_value=ScriptStep(message=message))
        self.view.get_current_step = fake_get_next_step
        expected_data = {"name": "Message", "question": message, "type": "none", "id": None,
                         "is_registration_end": False}
        actual_data = self.view.get_data_from_message(message)
        self.assertDictEqual(expected_data, actual_data)

    def test_that_if_the_step_is_a_message_the_poll_id_is_none(self):
        message = "hello hallo who aaa"
        fake_get_next_step = Mock(return_value=ScriptStep(message=message))
        self.view.get_current_step = fake_get_next_step
        expected_data = {"name": "Message", "question": message, "type": "none", "id": None,
                         "is_registration_end": False}
        actual_data = self.view.get_data_from_message(message)
        self.assertDictEqual(expected_data, actual_data)

    def test_that_script_progress_moves_on_when_current_step_is_message(self):
        self.setup_fake_connection()
        mock_progress = MagicMock()
        mock_progress.moveon = MagicMock()
        self.view.get_script_progress = Mock(return_value=mock_progress)
        self.view.contact_exists = Mock(return_value=False)
        self.view.get_current_step = Mock(
            return_value=ScriptStep(message="Welcome", script=Script(slug='ureport_autoreg2'), order=1))
        self.view.get_backend = Mock(return_value=Backend(name="my_backend"))
        response = self.get_http_response_from_view({"backend": "my_backend", "user_address": "77777"}, self.view)
        self.assertEqual(True, mock_progress.moveon.called)
コード例 #6
0
ファイル: urls.py プロジェクト: techoutlooks/rapidsms-ureport
                                       ('', 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()),

)
コード例 #7
0
 def setUp(self):
     self.view = ViewCurrentPoll()
コード例 #8
0
class CurrentPollTest(unittest.TestCase):
    def setUp(self):
        self.view = ViewCurrentPoll()

    def build_connection(self, contact=Contact()):
        return Connection(identity=77777,
                          backend=Backend(name='my backend'),
                          contact=contact)

    def get_http_response_from_view(self, kwargs, view):
        request_factory = RequestFactory()
        auth_string = base64.b64encode("who:why")
        fake_request = request_factory.get(
            '/', **{"HTTP_AUTHORIZATION": ("Basic %s" % auth_string)})
        self.view.validate_credentials = Mock(return_value=True)
        return view.dispatch(fake_request, None, **kwargs)

    def setup_fake_connection(self):
        fake_connection = Mock()
        fake_connection.return_value = self.build_connection()
        self.view.get_connection = fake_connection

    def setup_fake_poll(self, fake_poll_return_value):
        fake_poll = Mock()
        fake_poll.return_value = fake_poll_return_value
        self.view.get_current_poll_for = fake_poll
        return fake_poll

    def test_404_is_raised_if_backend_does_not_exist(self):
        with self.assertRaises(Http404):
            response = self.get_http_response_from_view(
                {
                    "backend": "my_backend",
                    "user_address": "77777"
                }, self.view)

    def test_that_in_case_of_post_it_raise_405(self):
        http_response = self.view.post(None)
        self.assertEqual(405, http_response.status_code)

    def test_that_poll_null_for_a_registered_user_with_no_poll(self):
        self.setup_fake_connection()
        self.setup_fake_poll(None)
        self.view.get_backend = Mock(return_value=Backend(name="my_backend"))
        response = self.get_http_response_from_view(
            {
                "backend": "my_backend",
                "user_address": "77777"
            }, self.view)
        data = json.loads(response.content)
        self.assertEqual(True, data['success'])
        self.assertEqual(None, data['poll'])

    def test_that_poll_data_for_a_registered_user_that_has_a_poll(self):
        self.setup_fake_connection()
        poll_data = {"id": 1, "name": "Test Poll", "question": "Is working?"}
        fake_poll = self.setup_fake_poll(poll_data)
        self.view.get_current_poll_for = fake_poll
        self.view.get_backend = Mock(return_value=Backend(name="my_backend"))
        response = self.get_http_response_from_view(
            {
                "backend": "my_backend",
                "user_address": "77777"
            }, self.view)
        data = json.loads(response.content)
        self.assertEqual(True, data['success'])
        self.assertEqual(poll_data, data['poll'])

    def test_that_for_an_unregistered_user_script_progress_object_is_created_if_it_does_not_exist(
            self):
        fake_connection = Mock()
        fake_connection.return_value = self.build_connection(None)
        self.view.get_connection = fake_connection
        self.view.get_current_step = Mock(return_value=None)
        self.view.get_script_progress = Mock(return_value=ScriptProgress(
            script=Script(slug="ureport_autoreg2")))
        self.view.get_backend = Mock(return_value=Backend(name="my_backend"))
        response = self.get_http_response_from_view(
            {
                "backend": "my_backend",
                "user_address": "77777"
            }, self.view)
        data = json.loads(response.content)
        self.assertEqual(True, data['success'])
        self.assertEqual("ureport_autoreg2",
                         self.view.script_progress.script.slug)

    def test_that_retrieves_poll_data_from_step_of_script_progress(self):
        fake_connection = Mock()
        fake_connection.return_value = self.build_connection(None)
        self.view.get_connection = fake_connection
        self.view.get_script_progress = Mock(return_value=ScriptProgress(
            script=Script(slug="ureport_autoreg2")))
        fake_get_next_step = Mock(return_value=ScriptStep(
            poll=Poll(name="test poll", question="Is it working?")))
        self.view.get_current_step = fake_get_next_step
        self.view.get_backend = Mock(return_value=Backend(name="my_backend"))
        response = self.get_http_response_from_view(
            {
                "backend": "my_backend",
                "user_address": "77777"
            }, self.view)
        data = json.loads(response.content)
        self.assertEqual(True, data['poll']['is_registration'])

    def test_that_data_from_poll_should_have_all_the_neccessary_fields(self):
        question = "is this really a poll ? or a pool ? or a loop?"
        name = "this is a poll"
        an_hour_ago = datetime.datetime.now() - datetime.timedelta(hours=1)
        default_response = "thanks"
        poll = Poll(name=name,
                    question=question,
                    id=12,
                    type="t",
                    start_date=an_hour_ago,
                    default_response=default_response,
                    response_type="a")
        expected_poll_data = {
            "id": "12",
            "question": question,
            "name": name,
            "language": None,
            "question_voice": None,
            "start_date":
            an_hour_ago.strftime(self.view.get_datetime_format()),
            "end_date": None,
            "is_registration": False,
            "type": "t",
            "is_registration_end": False,
            "default_response": default_response,
            "default_response_voice": None,
            "response_type": "allow_all"
        }
        self.assertDictEqual(expected_poll_data,
                             self.view.get_data_from_poll(poll))

    def test_that_if_the_step_is_a_message_the_poll_type_is_none(self):
        message = "hello hallo who aaa"
        fake_get_next_step = Mock(return_value=ScriptStep(message=message))
        self.view.get_current_step = fake_get_next_step
        expected_data = {
            "name": "Message",
            "question": message,
            "type": "none",
            "id": None,
            "is_registration_end": False
        }
        actual_data = self.view.get_data_from_message(message)
        self.assertDictEqual(expected_data, actual_data)

    def test_that_if_the_step_is_a_message_the_poll_id_is_none(self):
        message = "hello hallo who aaa"
        fake_get_next_step = Mock(return_value=ScriptStep(message=message))
        self.view.get_current_step = fake_get_next_step
        expected_data = {
            "name": "Message",
            "question": message,
            "type": "none",
            "id": None,
            "is_registration_end": False
        }
        actual_data = self.view.get_data_from_message(message)
        self.assertDictEqual(expected_data, actual_data)

    def test_that_script_progress_moves_on_when_current_step_is_message(self):
        self.setup_fake_connection()
        mock_progress = MagicMock()
        mock_progress.moveon = MagicMock()
        self.view.get_script_progress = Mock(return_value=mock_progress)
        self.view.contact_exists = Mock(return_value=False)
        self.view.get_current_step = Mock(return_value=ScriptStep(
            message="Welcome", script=Script(
                slug='ureport_autoreg2'), order=1))
        self.view.get_backend = Mock(return_value=Backend(name="my_backend"))
        response = self.get_http_response_from_view(
            {
                "backend": "my_backend",
                "user_address": "77777"
            }, self.view)
        self.assertEqual(True, mock_progress.moveon.called)
コード例 #9
0
class CurrentPollTest(TestCase):
    def setUp(self):
        self.view = ViewCurrentPoll()

    def test_that_it_retrieves_data_from_poll_when_contact_has_a_poll(self):
        contact, contact_created = Contact.objects.get_or_create(
            name='John Jonny')
        user, user_created = User.objects.get_or_create(username="******")
        an_hour_ago = datetime.datetime.now() - datetime.timedelta(hours=1)
        poll, poll_created = Poll.objects.get_or_create(name="Test Poll",
                                                        question="Is working?",
                                                        user=user,
                                                        start_date=an_hour_ago)
        poll.contacts = [contact]
        poll.save()
        current_poll = self.view.get_current_poll_for(contact)
        self.assertEqual("Test Poll", current_poll["name"])
        self.assertEqual("Is working?", current_poll["question"])

    def test_that_it_retrieves_data_from_active_poll(self):
        contact, contact_created = Contact.objects.get_or_create(
            name='John Jonny')
        user, user_created = User.objects.get_or_create(username="******")
        an_hour_ago = datetime.datetime.now() - datetime.timedelta(hours=1)
        two_hours_ago = datetime.datetime.now() - datetime.timedelta(hours=2)
        thirty_minutes_ago = datetime.datetime.now() - datetime.timedelta(
            minutes=30)

        poll, poll_created = Poll.objects.get_or_create(
            name="Test Poll",
            question="Is working?",
            user=user,
            start_date=two_hours_ago)
        second_poll, poll_created = Poll.objects.get_or_create(
            name="Test Poll 2",
            question="Is working 2 ?",
            user=user,
            start_date=an_hour_ago,
            end_date=thirty_minutes_ago)
        third_poll, poll_created = Poll.objects.get_or_create(
            name="Test Poll 3", question="Is working 3 ?", user=user)
        poll.contacts = [contact]
        poll.save()

        second_poll.contacts = [contact]
        second_poll.save()

        third_poll.contacts = [contact]
        third_poll.save()
        current_poll = self.view.get_current_poll_for(contact)
        self.assertEqual("Test Poll", current_poll["name"])
        self.assertEqual("Is working?", current_poll["question"])

    def test_that_retrieves_none_when_contact_do_not_have_a_poll(self):
        contact = Contact()
        contact.save()
        self.assertEqual(None, self.view.get_current_poll_for(contact))

    def test_that_gets_the_progress_object_for_ureport_autoreg2(self):
        backend = Backend.objects.create(name="test_backend")
        connection = Connection.objects.create(identity="7777",
                                               backend=backend)
        script, created = Script.objects.get_or_create(slug="ureport_autoreg2")
        first_script_progress = ScriptProgress.objects.create(
            connection=connection, script=script)
        script, created = Script.objects.get_or_create(slug="ureport_autoreg")
        second_script_progress = ScriptProgress.objects.create(
            connection=connection, script=script)
        self.assertEqual(first_script_progress,
                         self.view.get_script_progress(connection))

    def test_that_returns_new_script_progress_if_connection_is_not_associated_to_script_progress(
            self):
        script_autoreg2, created = Script.objects.get_or_create(
            slug="ureport_autoreg2")
        backend = Backend.objects.create(name="test_backend")
        connection = Connection.objects.create(identity="7777",
                                               backend=backend)
        second_connection = Connection.objects.create(identity="7777",
                                                      backend=backend)
        script, created = Script.objects.get_or_create(slug="other_script")
        first_step = ScriptStep.objects.create(script=script_autoreg2, order=1)
        second_step = ScriptStep.objects.create(script=script_autoreg2,
                                                order=2)
        script_progress = ScriptProgress.objects.create(connection=connection,
                                                        script=script)
        self.assertEqual("ureport_autoreg2",
                         self.view.get_script_progress(connection).script.slug)
        script_session_list = ScriptSession.objects.filter(
            script=script_autoreg2, connection=connection)
        self.assertEqual(1, len(script_session_list))

    def test_that_raise_exception_if_script_ureport_autoreg2_does_not_exist(
            self):
        backend = Backend.objects.create(name="test_backend")
        connection = Connection.objects.create(identity="7777",
                                               backend=backend)
        script, created = Script.objects.get_or_create(slug="ureport_autoreg")
        with self.assertRaises(Script.DoesNotExist):
            self.view.get_script_progress(connection)

    def test_that_retrieves_same_step_for_script_progress_that_is_in_progress(
            self):
        view = ViewCurrentPoll()
        backend = Backend.objects.create(name="test_backend")
        connection = Connection.objects.create(identity="7777",
                                               backend=backend)
        script, created = Script.objects.get_or_create(slug="ureport_autoreg2")
        first_step = ScriptStep.objects.create(script=script, order=1)
        second_step = ScriptStep.objects.create(script=script, order=2)
        third_step = ScriptStep.objects.create(script=script, order=3)
        script_progress = ScriptProgress.objects.create(connection=connection,
                                                        script=script,
                                                        step=second_step)

        self.assertEqual(second_step, view.get_current_step(script_progress))

    def test_that_retrieves_last_step_for_a_script_progress_that_is_in_last_step(
            self):
        view = ViewCurrentPoll()
        backend = Backend.objects.create(name="test_backend")
        connection = Connection.objects.create(identity="7777",
                                               backend=backend)
        script, created = Script.objects.get_or_create(slug="ureport_autoreg2")
        first_step = ScriptStep.objects.create(script=script, order=1)
        second_step = ScriptStep.objects.create(script=script, order=2)
        third_step = ScriptStep.objects.create(script=script, order=3)
        script_progress = ScriptProgress.objects.create(connection=connection,
                                                        script=script,
                                                        step=third_step)

        self.assertEqual(third_step, view.get_current_step(script_progress))
コード例 #10
0
class CurrentPollTest(TestCase):
    def setUp(self):
        self.view = ViewCurrentPoll()

    def test_that_it_retrieves_data_from_poll_when_contact_has_a_poll(self):
        contact, contact_created = Contact.objects.get_or_create(name='John Jonny')
        user, user_created = User.objects.get_or_create(username="******")
        an_hour_ago = datetime.datetime.now() - datetime.timedelta(hours=1)
        poll, poll_created = Poll.objects.get_or_create(name="Test Poll", question="Is working?", user=user,
                                                        start_date=an_hour_ago)
        poll.contacts = [contact]
        poll.save()
        current_poll = self.view.get_current_poll_for(contact)
        self.assertEqual("Test Poll", current_poll["name"])
        self.assertEqual("Is working?", current_poll["question"])

    def test_that_it_retrieves_data_from_active_poll(self):
        contact, contact_created = Contact.objects.get_or_create(name='John Jonny')
        user, user_created = User.objects.get_or_create(username="******")
        an_hour_ago = datetime.datetime.now() - datetime.timedelta(hours=1)
        two_hours_ago = datetime.datetime.now() - datetime.timedelta(hours=2)
        thirty_minutes_ago = datetime.datetime.now() - datetime.timedelta(minutes=30)

        poll, poll_created = Poll.objects.get_or_create(name="Test Poll", question="Is working?", user=user,
                                                        start_date=two_hours_ago)
        second_poll, poll_created = Poll.objects.get_or_create(name="Test Poll 2", question="Is working 2 ?", user=user,
                                                               start_date=an_hour_ago, end_date=thirty_minutes_ago)
        third_poll, poll_created = Poll.objects.get_or_create(name="Test Poll 3", question="Is working 3 ?", user=user)
        poll.contacts = [contact]
        poll.save()

        second_poll.contacts = [contact]
        second_poll.save()

        third_poll.contacts = [contact]
        third_poll.save()
        current_poll = self.view.get_current_poll_for(contact)
        self.assertEqual("Test Poll", current_poll["name"])
        self.assertEqual("Is working?", current_poll["question"])

    def test_that_retrieves_none_when_contact_do_not_have_a_poll(self):
        contact = Contact()
        contact.save()
        self.assertEqual(None, self.view.get_current_poll_for(contact))

    def test_that_gets_the_progress_object_for_ureport_autoreg2(self):
        backend = Backend.objects.create(name="test_backend")
        connection = Connection.objects.create(identity="7777", backend=backend)
        script, created = Script.objects.get_or_create(slug="ureport_autoreg2")
        first_script_progress = ScriptProgress.objects.create(connection=connection, script=script)
        script, created = Script.objects.get_or_create(slug="ureport_autoreg")
        second_script_progress = ScriptProgress.objects.create(connection=connection, script=script)
        self.assertEqual(first_script_progress, self.view.get_script_progress(connection))

    def test_that_returns_new_script_progress_if_connection_is_not_associated_to_script_progress(self):
        script_autoreg2, created = Script.objects.get_or_create(slug="ureport_autoreg2")
        backend = Backend.objects.create(name="test_backend")
        connection = Connection.objects.create(identity="7777", backend=backend)
        second_connection = Connection.objects.create(identity="7777", backend=backend)
        script, created = Script.objects.get_or_create(slug="other_script")
        first_step = ScriptStep.objects.create(script=script_autoreg2, order=1)
        second_step = ScriptStep.objects.create(script=script_autoreg2, order=2)
        script_progress = ScriptProgress.objects.create(connection=connection, script=script)
        self.assertEqual("ureport_autoreg2", self.view.get_script_progress(connection).script.slug)
        script_session_list = ScriptSession.objects.filter(script=script_autoreg2, connection=connection)
        self.assertEqual(1, len(script_session_list))

    def test_that_raise_exception_if_script_ureport_autoreg2_does_not_exist(self):
        backend = Backend.objects.create(name="test_backend")
        connection = Connection.objects.create(identity="7777", backend=backend)
        script, created = Script.objects.get_or_create(slug="ureport_autoreg")
        with self.assertRaises(Script.DoesNotExist):
            self.view.get_script_progress(connection)

    def test_that_retrieves_same_step_for_script_progress_that_is_in_progress(self):
        view = ViewCurrentPoll()
        backend = Backend.objects.create(name="test_backend")
        connection = Connection.objects.create(identity="7777", backend=backend)
        script, created = Script.objects.get_or_create(slug="ureport_autoreg2")
        first_step = ScriptStep.objects.create(script=script, order=1)
        second_step = ScriptStep.objects.create(script=script, order=2)
        third_step = ScriptStep.objects.create(script=script, order=3)
        script_progress = ScriptProgress.objects.create(connection=connection, script=script, step=second_step)

        self.assertEqual(second_step, view.get_current_step(script_progress))

    def test_that_retrieves_last_step_for_a_script_progress_that_is_in_last_step(self):
        view = ViewCurrentPoll()
        backend = Backend.objects.create(name="test_backend")
        connection = Connection.objects.create(identity="7777", backend=backend)
        script, created = Script.objects.get_or_create(slug="ureport_autoreg2")
        first_step = ScriptStep.objects.create(script=script, order=1)
        second_step = ScriptStep.objects.create(script=script, order=2)
        third_step = ScriptStep.objects.create(script=script, order=3)
        script_progress = ScriptProgress.objects.create(connection=connection, script=script, step=third_step)

        self.assertEqual(third_step, view.get_current_step(script_progress))