def test_query_count(self, model): """Test count of queries on HEAD request processing for {}""" obj_id = factories.get_model_factory(model.__name__)().id with utils.QueryCounter() as counter: response = self.api.head(model, obj_id) self.assert200(response) self.assertEqual(counter.get, 3)
def test_with_snapshots_query_count(self, model_name, snapshot_models, query_limit): """Test query count during export of {0} with mapped {1} snapshots.""" with factories.single_commit(): audit = factories.AuditFactory() snap_objects = [] for snap_model in snapshot_models: snap_objects.append(factories.get_model_factory(snap_model)()) snapshots = self._create_snapshots(audit, snap_objects) model_factory = factories.get_model_factory(model_name) for _ in range(3): obj = model_factory(audit=audit) for snapshot in snapshots: factories.RelationshipFactory(source=obj, destination=snapshot) data = [{ "object_name": model_name, "filters": { "expression": {}, }, "fields": "all", }] with utils.QueryCounter() as counter: response = self.export_parsed_csv(data) self.assertNotEqual(counter.get, 0) self.assertLessEqual(counter.get, query_limit) self.assertEqual(len(response[model_name]), 3)
def test_import_asmnt_rev_query_count(self): """Test only one revisions insert query should occur while importing.""" with factories.single_commit(): audit = factories.AuditFactory() asmnt = factories.AssessmentFactory(audit=audit) cad_names = ("CAD1", "CAD2", "CAD3") for name in cad_names: factories.CustomAttributeDefinitionFactory( title=name, definition_type="assessment", definition_id=asmnt.id, attribute_type="Text", mandatory=True, ) data = OrderedDict([ ("object_type", "Assessment"), ("Code*", asmnt.slug), ("Audit", audit.slug), ("Title", "Test title"), ("State", "Completed"), ("CAD1", "Some value 1"), ("CAD2", "Some value 2"), ("CAD3", "Some value 3"), ]) with utils.QueryCounter() as counter: response = self.import_data(data) self._check_csv_response(response, {}) rev_insert_queries = [query for query in counter.queries if 'INSERT INTO revisions' in query] self.assertEqual(len(rev_insert_queries), 1)
def test_export_query_count(self, model_name, query_limit): """Test query count during export of {0}.""" with factories.single_commit(): audit = factories.AuditFactory() model_factory = factories.get_model_factory(model_name) for _ in range(3): model_factory(audit=audit) data = [{ "object_name": model_name, "filters": { "expression": {}, }, "fields": "all", }] with utils.QueryCounter() as counter: response = self.export_parsed_csv(data) self.assertNotEqual(counter.get, 0) self.assertLessEqual(counter.get, query_limit) self.assertEqual(len(response[model_name]), 3)
def test_roleable_eager_query(self): """Test eager query on roleable object. This test compares the query counts while accessing an object with a single user role on it with an object with multiple users. """ with factories.single_commit(): people = [factories.PersonFactory() for _ in range(5)] emails = {person.email for person in people} control = factories.ControlFactory() control.add_person_with_role_name(people[0], "Admin") control_id = control.id db.session.expire_all() with utils.QueryCounter() as counter: control = all_models.Control.eager_query().filter_by( id=control_id ).one() eager_query_count = counter.get self.assertEqual(len(control.access_control_list), 1) self.assertEqual(eager_query_count, counter.get) self.assertEqual( control.access_control_list[0][1].ac_role.name, "Admin", ) self.assertEqual(eager_query_count, counter.get) self.assertEqual( control.access_control_list[0][0].email, people[0].email, ) self.assertEqual(eager_query_count, counter.get) factories.AccessControlRoleFactory(object_type="Control", name="custom") with factories.single_commit(): control_multi = factories.ControlFactory() for person in people: control_multi.add_person_with_role_name(person, "Admin") control_multi.add_person_with_role_name(person, "custom") control_multi_id = control_multi.id db.session.expire_all() with utils.QueryCounter() as counter: control_multi = all_models.Control.eager_query().filter_by( id=control_multi_id ).one() self.assertEqual(eager_query_count, counter.get) self.assertEqual( len(control_multi.access_control_list), len(people) * 2, ) self.assertEqual(eager_query_count, counter.get) admins = { person.email for person in control_multi.get_persons_for_rolename("Admin") } self.assertEqual(admins, emails) self.assertEqual(eager_query_count, counter.get) custom_role_users = { person.email for person in control_multi.get_persons_for_rolename("custom") } self.assertEqual(custom_role_users, emails) self.assertEqual(eager_query_count, counter.get)