def test_sync_with_groups(self, mock_get_contacts, mock_get_groups): mock_get_groups.return_value = [ TembaGroup.create(uuid='G-101', name="New region", size=2), TembaGroup.create(uuid='G-102', name="Other region", size=1) ] mock_get_contacts.return_value = [ TembaContact.create(uuid='C-101', name="Jan", urns=['tel:123'], groups=['G-101', 'G-005'], fields=dict(chat_name="jan"), language='eng', modified_on=timezone.now()), TembaContact.create(uuid='C-102', name="Ken", urns=['tel:234'], groups=['G-101', 'G-006'], fields=dict(chat_name="ken"), language='eng', modified_on=timezone.now()) ] # select one new group Region.sync_with_groups(self.unicef, ['G-101']) self.assertEqual(self.unicef.regions.filter(is_active=True).count(), 1) self.assertEqual( self.unicef.regions.filter(is_active=False).count(), 3) # existing de-activated new_region = Region.objects.get(uuid='G-101') self.assertEqual(new_region.name, "New region") self.assertTrue(new_region.is_active) # check contact changes self.assertEqual( self.unicef.contacts.filter(is_active=True).count(), 2) self.assertEqual( self.unicef.contacts.filter(is_active=False).count(), 5) # existing de-activated jan = Contact.objects.get(uuid='C-101') self.assertEqual(jan.name, "Jan") self.assertEqual(jan.urn, 'tel:123') self.assertEqual(jan.region, new_region) self.assertTrue(jan.is_active) # change group and contacts on chatpro side Region.objects.filter(name="New region").update(name="Huh?", is_active=False) jan.name = "Janet" jan.save() Contact.objects.filter(name="Ken").update(is_active=False) # re-select new group Region.sync_with_groups(self.unicef, ['G-101']) # local changes should be overwritten self.assertEqual( self.unicef.regions.get(is_active=True).name, 'New region') self.assertEqual( self.unicef.contacts.filter(is_active=True).count(), 2) Contact.objects.get(name="Jan", is_active=True)