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)
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 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 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 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)
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"))
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")
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"))