示例#1
0
class DigestTest(CreateDataTest):
    def setUp(self):
        self.backend = Backend.objects.create(name='test-backend')
        self.contact = Contact.objects.create(first_name='John',
                                              last_name='Doe')
        self.connection = Connection.objects.create(contact=self.contact,
                                                    backend=self.backend,
                                                    identity='1112223333')
        self.router = MockRouter()
        self.app = DecisionApp(router=self.router)
        self.user = User.objects.create_user('test', '*****@*****.**', 'abc')
        self.fruit_tag = dt.Tag.objects.create(name='fruit')
        self.fruit_tag.recipients.add(self.user)

    def _send(self, text):
        msg = IncomingMessage(self.connection, text)
        self.app.handle(msg)
        return msg

    def test_cron_job(self):
        tree = self.create_tree(data={'trigger': 'food'})
        trans1 = self.create_trans(data={'current_state': tree.root_state})
        trans2 = self.create_trans(data={'current_state': trans1.next_state})
        trans1.tags.add(self.fruit_tag)
        self._send('food')
        msg = self._send(trans1.answer.answer)
        msg = self._send(trans2.answer.answer)
        self.app.status_update()
        self.assertEquals(len(mail.outbox), 1)
        notification = dt.TagNotification.objects.all()[0]
        self.assertTrue(notification.sent)
示例#2
0
文件: tests.py 项目: dimagi/aremind
    def setUp(self):
        self.router = MockRouter()

        self.backend = self.router.add_backend(u'MockBackend', 'rapidsms.tests.harness')
        self.assertIsNotNone(self.backend)
        self.assertEquals(self.router.backends[u'MockBackend'], self.backend)

        backend_in_db = Backend.objects.create(name=u'MockBackend')
        backend_in_db.save()

        self.contact = Contact.objects.create(first_name='John',
                                              last_name='Doe')
        self.connection = Connection.objects.create(contact=self.contact,
                                                    backend=backend_in_db,
                                                    identity='1112223333')
        self.patient = self.create_patient(data={'contact': self.contact })

        self.app = DecisionApp(router=self.router)
        self.router.add_app(self.app)
        self.tree =  get_tree()
        self.backend.start()
        self.app.start()
        self.survey = PatientSurvey.objects.create(patient=self.patient,
                                                   query_type=QUERY_TYPE_SMS)
        super(TreeTest,self).setUp()
示例#3
0
文件: tests.py 项目: dimagi/aremind
    def setUp(self):
        self.router = MockRouter()

        self.backend = self.router.add_backend(u'MockBackend',
                                               'rapidsms.tests.harness')
        self.assertIsNotNone(self.backend)
        self.assertEquals(self.router.backends[u'MockBackend'], self.backend)

        backend_in_db = Backend.objects.create(name=u'MockBackend')
        backend_in_db.save()

        self.contact = Contact.objects.create(first_name='John',
                                              last_name='Doe')
        self.connection = Connection.objects.create(contact=self.contact,
                                                    backend=backend_in_db,
                                                    identity='1112223333')
        self.patient = self.create_patient(data={'contact': self.contact})

        self.app = DecisionApp(router=self.router)
        self.router.add_app(self.app)
        self.tree = get_tree()
        self.backend.start()
        self.app.start()
        self.survey = PatientSurvey.objects.create(patient=self.patient,
                                                   query_type=QUERY_TYPE_SMS)
        super(TreeTest, self).setUp()
示例#4
0
 def setUp(self):
     self.backend = Backend.objects.create(name='test-backend')
     self.contact = Contact.objects.create(first_name='John',
                                           last_name='Doe')
     self.connection = Connection.objects.create(contact=self.contact,
                                                 backend=self.backend,
                                                 identity='1112223333')
     self.router = MockRouter()
     self.app = DecisionApp(router=self.router)
示例#5
0
 def setUp(self):
     self.backend = Backend.objects.create(name='test-backend')
     self.contact = Contact.objects.create(first_name='John',
                                           last_name='Doe')
     self.connection = Connection.objects.create(contact=self.contact,
                                                 backend=self.backend,
                                                 identity='1112223333')
     self.router = MockRouter()
     self.app = DecisionApp(router=self.router)
     self.user = User.objects.create_user('test', '*****@*****.**', 'abc')
     self.fruit_tag = dt.Tag.objects.create(name='fruit')
     self.fruit_tag.recipients.add(self.user)
示例#6
0
文件: tests.py 项目: dimagi/aremind
class TreeTest(PatientsCreateDataTest):
    """Test that our decisiontree works the way we want"""
    
    def setUp(self):
        self.router = MockRouter()

        self.backend = self.router.add_backend(u'MockBackend', 'rapidsms.tests.harness')
        self.assertIsNotNone(self.backend)
        self.assertEquals(self.router.backends[u'MockBackend'], self.backend)

        backend_in_db = Backend.objects.create(name=u'MockBackend')
        backend_in_db.save()

        self.contact = Contact.objects.create(first_name='John',
                                              last_name='Doe')
        self.connection = Connection.objects.create(contact=self.contact,
                                                    backend=backend_in_db,
                                                    identity='1112223333')
        self.patient = self.create_patient(data={'contact': self.contact })

        self.app = DecisionApp(router=self.router)
        self.router.add_app(self.app)
        self.tree =  get_tree()
        self.backend.start()
        self.app.start()
        self.survey = PatientSurvey.objects.create(patient=self.patient,
                                                   query_type=QUERY_TYPE_SMS)
        super(TreeTest,self).setUp()

    def _send(self, text):
        msg = IncomingMessage(self.connection, text)
        self.app.handle(msg)
        return msg

    def test_start(self):
        msg = self._send(self.tree.trigger)
        # this is kind of pointless but gets the ball rolling
        self.assertEqual(msg.responses[0].text, 
                         "How many pills did you miss in the last four days?")

    def test_invalid_response(self):
        self._send(self.tree.trigger)
        msg = self._send("Foo!  Bar!  Baz!")
        rsp = msg.responses[0].text
        self.assertTrue(rsp.startswith("Sorry, please respond with a number. "))

    def test_valid_response(self):
        self._send(self.tree.trigger)
        self.survey.status = PatientSurvey.STATUS_STARTED
        self.survey.save()
        msg = self._send("6")
        print "len(responses)=%d" % len(msg.responses)
        rsp = msg.responses[0].text
        self.assertTrue(rsp.startswith("Thank you. Your adherence is"))

    def test_noisy_response(self):
        """Test response that has spaces and punctuation in it"""
        self._send(self.tree.trigger)
        self.survey.status = PatientSurvey.STATUS_STARTED
        self.survey.save()
        msg = self._send(" 6.")
        print "len(responses)=%d" % len(msg.responses)
        rsp = msg.responses[0].text
        self.assertTrue(rsp.startswith("Thank you. Your adherence is"))
示例#7
0
class BasicSurveyTest(CreateDataTest):
    def setUp(self):
        self.backend = Backend.objects.create(name='test-backend')
        self.contact = Contact.objects.create(first_name='John',
                                              last_name='Doe')
        self.connection = Connection.objects.create(contact=self.contact,
                                                    backend=self.backend,
                                                    identity='1112223333')
        self.router = MockRouter()
        self.app = DecisionApp(router=self.router)

    def _send(self, text):
        msg = IncomingMessage(self.connection, text)
        self.app.handle(msg)
        return msg

    def test_invalid_trigger(self):
        tree = self.create_tree(data={'trigger': 'food'})
        trans = self.create_trans(data={'current_state': tree.root_state})
        msg = self._send('i-do-not-exist')
        self.assertTrue(len(msg.responses) == 0)

    def test_valid_trigger(self):
        tree = self.create_tree(data={'trigger': 'food'})
        trans = self.create_trans(data={'current_state': tree.root_state})
        msg = self._send('food')
        question = trans.current_state.question.text
        self.assertTrue(question in msg.responses[0].text)

    def test_basic_response(self):
        tree = self.create_tree(data={'trigger': 'food'})
        trans = self.create_trans(data={'current_state': tree.root_state})
        self._send('food')
        answer = trans.answer.answer
        msg = self._send(answer)
        next_question = trans.next_state.question.text
        self.assertTrue(next_question in msg.responses[0].text)

    def test_error_response(self):
        tree = self.create_tree(data={'trigger': 'food'})
        trans = self.create_trans(data={'current_state': tree.root_state})
        self._send('food')
        msg = self._send('bad-answer')
        self.assertTrue('is not a valid answer' in msg.responses[0].text)

    def test_error_response_from_question(self):
        tree = self.create_tree(data={'trigger': 'food'})
        trans = self.create_trans(data={'current_state': tree.root_state})
        tree.root_state.question.error_response = 'my error response'
        tree.root_state.question.save()
        self._send('food')
        msg = self._send('bad-answer')
        self.assertTrue('my error response' == msg.responses[0].text)

    def test_sequence_start(self):
        tree = self.create_tree(data={'trigger': 'food'})
        trans = self.create_trans(data={'current_state': tree.root_state})
        self._send('food')
        answer = trans.answer.answer
        msg = self._send(answer)
        entry = trans.entries.all()[0]
        self.assertEqual(entry.sequence_id, 1)

    def test_sequence_increment(self):
        tree = self.create_tree(data={'trigger': 'food'})
        trans1 = self.create_trans(data={'current_state': tree.root_state})
        trans2 = self.create_trans(data={'current_state': trans1.next_state})
        self._send('food')
        msg = self._send(trans1.answer.answer)
        msg = self._send(trans2.answer.answer)
        entry = trans2.entries.order_by('-sequence_id')[0]
        self.assertEqual(entry.sequence_id, 2)

    def test_sequence_end(self):
        tree = self.create_tree(data={'trigger': 'food'})
        trans1 = self.create_trans(data={'current_state': tree.root_state})
        self._send('food')
        session = self.connection.session_set.all()[0]
        self.assertNotEqual(session.state, None)
        msg = self._send('end')
        session = self.connection.session_set.all()[0]
        self.assertEqual(session.state, None)
        self.assertTrue(session.canceled)
        self.assertEqual(msg.responses[0].text,
                         "Your session with 'food' has ended")
示例#8
0
文件: tests.py 项目: dimagi/aremind
class TreeTest(PatientsCreateDataTest):
    """Test that our decisiontree works the way we want"""
    def setUp(self):
        self.router = MockRouter()

        self.backend = self.router.add_backend(u'MockBackend',
                                               'rapidsms.tests.harness')
        self.assertIsNotNone(self.backend)
        self.assertEquals(self.router.backends[u'MockBackend'], self.backend)

        backend_in_db = Backend.objects.create(name=u'MockBackend')
        backend_in_db.save()

        self.contact = Contact.objects.create(first_name='John',
                                              last_name='Doe')
        self.connection = Connection.objects.create(contact=self.contact,
                                                    backend=backend_in_db,
                                                    identity='1112223333')
        self.patient = self.create_patient(data={'contact': self.contact})

        self.app = DecisionApp(router=self.router)
        self.router.add_app(self.app)
        self.tree = get_tree()
        self.backend.start()
        self.app.start()
        self.survey = PatientSurvey.objects.create(patient=self.patient,
                                                   query_type=QUERY_TYPE_SMS)
        super(TreeTest, self).setUp()

    def _send(self, text):
        msg = IncomingMessage(self.connection, text)
        self.app.handle(msg)
        return msg

    def test_start(self):
        msg = self._send(self.tree.trigger)
        # this is kind of pointless but gets the ball rolling
        self.assertEqual(msg.responses[0].text,
                         "How many pills did you miss in the last four days?")

    def test_invalid_response(self):
        self._send(self.tree.trigger)
        msg = self._send("Foo!  Bar!  Baz!")
        rsp = msg.responses[0].text
        self.assertTrue(
            rsp.startswith("Sorry, please respond with a number. "))

    def test_valid_response(self):
        self._send(self.tree.trigger)
        self.survey.status = PatientSurvey.STATUS_STARTED
        self.survey.save()
        msg = self._send("6")
        print "len(responses)=%d" % len(msg.responses)
        rsp = msg.responses[0].text
        self.assertTrue(rsp.startswith("Thank you. Your adherence is"))

    def test_noisy_response(self):
        """Test response that has spaces and punctuation in it"""
        self._send(self.tree.trigger)
        self.survey.status = PatientSurvey.STATUS_STARTED
        self.survey.save()
        msg = self._send(" 6.")
        print "len(responses)=%d" % len(msg.responses)
        rsp = msg.responses[0].text
        self.assertTrue(rsp.startswith("Thank you. Your adherence is"))