def test_org(self): url = reverse('api.v2.org') self.assertEndpointAccess(url) # fetch as JSON response = self.fetchJSON(url) self.assertEqual(200, response.status_code) self.assertEqual(response.json, { 'name': "Temba", 'country': "RW", 'languages': [], 'primary_language': None, 'timezone': "Africa/Kigali", 'date_style': "day_first", 'anon': False }) eng = Language.create(self.org, self.admin, "English", 'eng') Language.create(self.org, self.admin, "French", 'fre') self.org.primary_language = eng self.org.save() response = self.fetchJSON(url) self.assertEqual(response.json, { 'name': "Temba", 'country': "RW", 'languages': ["eng", "fre"], 'primary_language': "eng", 'timezone': "Africa/Kigali", 'date_style': "day_first", 'anon': False })
def test_open_ended_word_frequencies(self): flow = self.get_flow('random_word') def run_flow(contact, word): self.assertEquals("Thank you", self.send_message(flow, word, contact=contact, restart_participants=True)) (c1, c2, c3, c4, c5, c6) = (self.create_contact("Contact1", '0788111111'), self.create_contact("Contact2", '0788222222'), self.create_contact("Contact3", '0788333333'), self.create_contact("Contact4", '0788444444'), self.create_contact("Contact5", '0788555555'), self.create_contact("Contact6", '0788666666', is_test=True)) run_flow(c1, "1 better place") run_flow(c2, "the great coffee") run_flow(c3, "1 cup of black tea") run_flow(c4, "awesome than this encore") run_flow(c5, "from an awesome place in kigali") run_flow(c6, "awesome coffee") random = RuleSet.objects.get(flow=flow, label="Random") result = Value.get_value_summary(ruleset=random)[0] self.assertEquals(10, len(result['categories'])) self.assertTrue(result['open_ended']) self.assertResult(result, 0, "awesome", 2) self.assertResult(result, 1, "place", 2) self.assertResult(result, 2, "better", 1) self.assertResult(result, 3, "black", 1) self.assertResult(result, 4, "coffee", 1) self.assertResult(result, 5, "cup", 1) self.assertResult(result, 6, "encore", 1) self.assertResult(result, 7, "great", 1) self.assertResult(result, 8, "kigali", 1) self.assertResult(result, 9, "tea", 1) # add French to org languages Language.create(self.org, self.admin, 'French', 'fre') # make sure we cleared the cache Value.invalidate_cache(ruleset=random) # encore is a french stop word and should not be included this time result = Value.get_value_summary(ruleset=random)[0] self.assertEquals(9, len(result['categories'])) self.assertTrue(result['open_ended']) self.assertResult(result, 0, "awesome", 2) self.assertResult(result, 1, "place", 2) self.assertResult(result, 2, "better", 1) self.assertResult(result, 3, "black", 1) self.assertResult(result, 4, "coffee", 1) self.assertResult(result, 5, "cup", 1) self.assertResult(result, 6, "great", 1) self.assertResult(result, 7, "kigali", 1) self.assertResult(result, 8, "tea", 1)
def test_open_ended_word_frequencies(self): flow = self.get_flow('random_word') def run_flow(contact, word): self.assertEqual("Thank you", self.send_message(flow, word, contact=contact, restart_participants=True)) (c1, c2, c3, c4, c5, c6) = (self.create_contact("Contact1", '0788111111'), self.create_contact("Contact2", '0788222222'), self.create_contact("Contact3", '0788333333'), self.create_contact("Contact4", '0788444444'), self.create_contact("Contact5", '0788555555'), self.create_contact("Contact6", '0788666666', is_test=True)) run_flow(c1, "1 better place") run_flow(c2, "the great coffee") run_flow(c3, "1 cup of black tea") run_flow(c4, "awesome than this encore") run_flow(c5, "from an awesome place in kigali") run_flow(c6, "awesome coffee") random = RuleSet.objects.get(flow=flow, label="Random") result = Value.get_value_summary(ruleset=random)[0] self.assertEqual(10, len(result['categories'])) self.assertTrue(result['open_ended']) self.assertResult(result, 0, "awesome", 2) self.assertResult(result, 1, "place", 2) self.assertResult(result, 2, "better", 1) self.assertResult(result, 3, "black", 1) self.assertResult(result, 4, "coffee", 1) self.assertResult(result, 5, "cup", 1) self.assertResult(result, 6, "encore", 1) self.assertResult(result, 7, "great", 1) self.assertResult(result, 8, "kigali", 1) self.assertResult(result, 9, "tea", 1) # add French to org languages Language.create(self.org, self.admin, 'French', 'fre') # make sure we cleared the cache Value.invalidate_cache(ruleset=random) # encore is a french stop word and should not be included this time result = Value.get_value_summary(ruleset=random)[0] self.assertEqual(9, len(result['categories'])) self.assertTrue(result['open_ended']) self.assertResult(result, 0, "awesome", 2) self.assertResult(result, 1, "place", 2) self.assertResult(result, 2, "better", 1) self.assertResult(result, 3, "black", 1) self.assertResult(result, 4, "coffee", 1) self.assertResult(result, 5, "cup", 1) self.assertResult(result, 6, "great", 1) self.assertResult(result, 7, "kigali", 1) self.assertResult(result, 8, "tea", 1)
def test_join_group_trigger(self): self.login(self.admin) group = self.create_group(name='Chat', contacts=[]) # create a trigger that sets up a group join flow post_data = dict(keyword='join', action_join_group=group.pk, response='Thanks for joining') self.client.post(reverse("triggers.trigger_register"), data=post_data) # did our group join flow get created? flow = Flow.objects.get(flow_type=Flow.FLOW) # check that our trigger exists and shows our group trigger = Trigger.objects.get(keyword='join', flow=flow) self.assertEqual(trigger.flow.name, 'Join Chat') # the org has no language, so it should be a 'base' flow self.assertEqual(flow.base_language, 'base') # now let's try it out contact = self.create_contact('macklemore', '+250788382382') msg = self.create_msg(direction=INCOMING, contact=contact, text="join ben haggerty") self.assertIsNone(msg.msg_type) self.assertTrue(Trigger.find_and_handle(msg)) self.assertEqual(msg.msg_type, 'F') self.assertEqual(Trigger.objects.get(pk=trigger.pk).trigger_count, 1) contact.refresh_from_db() self.assertEqual('Ben Haggerty', contact.name) # we should be in the group now self.assertEqual({group}, set(contact.user_groups.all())) # and have one incoming and one outgoing message self.assertEqual(2, contact.msgs.count()) # deleting our contact group should leave our triggers and flows since the group can be recreated self.client.post(reverse("contacts.contactgroup_delete", args=[group.pk])) self.assertTrue(Trigger.objects.get(pk=trigger.pk).is_active) # try creating a join group on an org with a language language = Language.create(self.org, self.admin, "Klingon", 'kli') self.org.primary_language = language self.org.save() # now create another group trigger group = self.create_group(name='Lang Group', contacts=[]) post_data = dict(keyword='join_lang', action_join_group=group.pk, response='Thanks for joining') response = self.client.post(reverse("triggers.trigger_register"), data=post_data) self.assertEqual(response.status_code, 200) # confirm our objects flow = Flow.objects.filter(flow_type=Flow.FLOW).order_by('-pk').first() trigger = Trigger.objects.get(keyword='join_lang', flow=flow) self.assertEqual(trigger.flow.name, 'Join Lang Group') # the flow should be created with the primary language for the org self.assertEqual(flow.base_language, 'kli')
def test_join_group_trigger(self): self.login(self.admin) group = self.create_group(name="Chat", contacts=[]) favorites = self.get_flow("favorites") # create a trigger that sets up a group join flow self.client.post( reverse("triggers.trigger_register"), {"keyword": "join", "action_join_group": group.id, "response": "Thanks for joining", "flow": favorites.id}, ) # did our group join flow get created? flow = Flow.objects.get(flow_type=Flow.TYPE_MESSAGE, name="Join Chat") flow_def = flow.as_json() self.assertEqual(len(flow_def["nodes"]), 1) self.assertEqual(len(flow_def["nodes"][0]["actions"]), 4) self.assertEqual(flow_def["nodes"][0]["actions"][0]["type"], "add_contact_groups") self.assertEqual(flow_def["nodes"][0]["actions"][1]["type"], "set_contact_name") self.assertEqual(flow_def["nodes"][0]["actions"][2]["type"], "send_msg") self.assertEqual(flow_def["nodes"][0]["actions"][3]["type"], "enter_flow") # check that our trigger exists and shows our group trigger = Trigger.objects.get(keyword="join", flow=flow) self.assertEqual(trigger.flow.name, "Join Chat") # the org has no language, so it should be a 'base' flow self.assertEqual(flow.base_language, "base") # deleting our contact group should leave our triggers and flows since the group can be recreated self.client.post(reverse("contacts.contactgroup_delete", args=[group.id])) self.assertTrue(Trigger.objects.get(pk=trigger.id).is_active) # try creating a join group on an org with a language language = Language.create(self.org, self.admin, "Klingon", "kli") self.org.primary_language = language self.org.save(update_fields=("primary_language",)) # now create another group trigger group = self.create_group(name="Lang Group", contacts=[]) response = self.client.post( reverse("triggers.trigger_register"), {"keyword": "join_lang", "action_join_group": group.id, "response": "Thanks for joining"}, ) self.assertEqual(response.status_code, 200) # confirm our objects flow = Flow.objects.filter(flow_type=Flow.TYPE_MESSAGE).order_by("id").last() trigger = Trigger.objects.get(keyword="join_lang", flow=flow) self.assertEqual(trigger.flow.name, "Join Lang Group") # the flow should be created with the primary language for the org self.assertEqual(flow.base_language, "kli")