def test_sync_affiliation_circular(self): """ Test circular sync of affiliations. """ facility_id = self.db.ensure_facility('test_tel') self.assertIsInstance(facility_id, int) queue_id = self.db.add_queue(facility_id, 'Queue1', 'Q1') self.assertIsInstance(queue_id, int) records = AffiliationCollection() records[0] = Affiliation( None, queue_id, 'Aff A', False, AffiliationType.STANDARD, None) records[1] = Affiliation( None, queue_id, 'Aff B', False, AffiliationType.STANDARD, None) records[2] = Affiliation( None, queue_id, 'Aff C', False, AffiliationType.STANDARD, None) records[3] = Affiliation( None, queue_id, 'Aff D', False, AffiliationType.STANDARD, None) records[4] = Affiliation( None, queue_id, 'Aff E', False, AffiliationType.STANDARD, None) n = self.db.sync_queue_affiliation(queue_id, records) self.assertEqual(n, (5, 0, 0)) records = self.db.search_affiliation(queue_id=queue_id, order_by_id=True) id_ = list(records.keys()) records[id_[1]] = records[id_[1]]._replace(name='Aff C') records[id_[2]] = records[id_[2]]._replace(name='Aff D') records[id_[3]] = records[id_[3]]._replace(name='Aff B') with self.assertRaisesRegexp(UserError, 'Circular update'): self.db.sync_queue_affiliation(queue_id, records)
def test_sync_affiliation(self): """ Test troublesome sync situations for affiliations. """ facility_id = self.db.ensure_facility('test_tel') self.assertIsInstance(facility_id, int) queue_id = self.db.add_queue(facility_id, 'Queue1', 'Q1') self.assertIsInstance(queue_id, int) records = AffiliationCollection() records[0] = Affiliation( None, queue_id, 'Aff A', False, AffiliationType.STANDARD, None) records[1] = Affiliation( None, queue_id, 'Aff B', False, AffiliationType.STANDARD, None) records[2] = Affiliation( None, queue_id, 'Aff C', False, AffiliationType.STANDARD, None) records[3] = Affiliation( None, queue_id, 'Aff D', False, AffiliationType.STANDARD, None) records[4] = Affiliation( None, queue_id, 'Aff E', False, AffiliationType.STANDARD, None) records[5] = Affiliation( None, queue_id, 'Aff F', False, AffiliationType.STANDARD, None) n = self.db.sync_queue_affiliation(queue_id, records) self.assertEqual(n, (6, 0, 0)) records = self.db.search_affiliation(queue_id=queue_id, order_by_id=True) id_ = list(records.keys()) # Delete an affiliation and rename another affiliation to its old name. records[id_[0]] = records[id_[0]]._replace(name='Aff F') with self.assertRaisesRegexp(UserError, 'duplicate values'): self.db.sync_queue_affiliation(queue_id, records) del records[id_[5]] n = self.db.sync_queue_affiliation(queue_id, records) self.assertEqual(n, (0, 1, 1)) self.assertEqual( [x.name for x in self.db.search_affiliation( queue_id=queue_id, order_by_id=True).values()], ['Aff F', 'Aff B', 'Aff C', 'Aff D', 'Aff E']) # Rename an affiliation and rename another to its previous name. records[id_[1]] = records[id_[1]]._replace(name='Aff E') records[id_[4]] = records[id_[4]]._replace(name='Aff EE') n = self.db.sync_queue_affiliation(queue_id, records) self.assertEqual(n, (0, 2, 0)) self.assertEqual( [x.name for x in self.db.search_affiliation( queue_id=queue_id, order_by_id=True).values()], ['Aff F', 'Aff E', 'Aff C', 'Aff D', 'Aff EE'])