コード例 #1
0
ファイル: test_head.py プロジェクト: weizai118/ggrc-core
 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)
コード例 #2
0
    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)
コード例 #3
0
 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)
コード例 #4
0
 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)
コード例 #5
0
  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)