Exemplo n.º 1
0
    def test_propagation_conflict(self):
        """Test propagation conflicts

    When we create a new acl entry and a new relationship in the same commit
    some roles would be propagated twice and would cause unique constraint
    errors. This test checks for the most basic such scenario.
    """
        with factories.single_commit():
            audit = factories.AuditFactory()
            relationship = factories.RelationshipFactory(
                source=audit,
                destination=audit.program,
            )

        acl_ids = set()
        user_ids = set()
        for _acl in audit.program._access_control_list:
            acl_ids.add(_acl.id)
            for acp in _acl.access_control_people:
                user_ids.append(acp.id)

        with app.app.app_context():
            flask.g.new_acl_ids = acl_ids
            flask.g.new_relationship_ids = {relationship.id}
            flask.g.user_ids = user_ids
            flask.g.deleted_objects = set()

            propagation.propagate()

            db.session.commit()

            self.assertEqual(all_models.AccessControlList.query.count(), 13)
Exemplo n.º 2
0
  def test_propagation_conflict(self):
    """Test propagation conflicts

    When we create a new acl entry and a new relationship in the same commit
    some roles would be propagated twice and would cause unique constraint
    errors. This test checks for the most basic such scenario.
    """
    with factories.single_commit():
      person = factories.PersonFactory()
      audit = factories.AuditFactory()
      relationship = factories.RelationshipFactory(
          source=audit,
          destination=audit.program,
      )
      acl_entry = factories.AccessControlListFactory(
          ac_role=self.roles["Program"]["Program Editors"],
          object=audit.program,
          person=person,
      )

    with app.app.app_context():
      flask.g.new_acl_ids = {acl_entry.id}
      flask.g.new_relationship_ids = {relationship.id}
      flask.g.deleted_objects = set()

      propagation.propagate()

      db.session.commit()

      self.assertEqual(all_models.AccessControlList.query.count(), 3)
Exemplo n.º 3
0
    def test_propagation_conflict(self):
        """Test propagation conflicts

    When we create a new acl entry and a new relationship in the same commit
    some roles would be propagated twice and would cause unique constraint
    errors. This test checks for the most basic such scenario.
    """
        with factories.single_commit():
            person = factories.PersonFactory()
            audit = factories.AuditFactory()
            relationship = factories.RelationshipFactory(
                source=audit,
                destination=audit.program,
            )
            acl_entry = factories.AccessControlListFactory(
                ac_role=self.roles["Program"]["Program Editors"],
                object=audit.program,
                person=person,
            )

        with app.app.app_context():
            flask.g.new_acl_ids = {acl_entry.id}
            flask.g.new_relationship_ids = {relationship.id}
            flask.g.deleted_objects = set()

            propagation.propagate()

            db.session.commit()

            self.assertEqual(all_models.AccessControlList.query.count(), 3)
Exemplo n.º 4
0
    def test_import_propagation(self):
        """Test propagation program roles via import"""
        # pylint: disable=too-many-locals
        with factories.single_commit():
            program = factories.ProgramFactory()
            control = factories.ControlFactory()
            control_1 = factories.ControlFactory()
            factories.RelationshipFactory(destination=program, source=control)
            factories.RelationshipFactory(destination=program,
                                          source=control_1)

        revision = all_models.Revision.query.filter(
            all_models.Revision.resource_id == control.id,
            all_models.Revision.resource_type == control.type,
        ).first()
        with factories.single_commit():
            audit = factories.AuditFactory(program=program)
            rel = factories.RelationshipFactory(destination=audit.program,
                                                source=audit)
            snapshot = factories.SnapshotFactory(parent=audit,
                                                 revision_id=revision.id,
                                                 child_type=control.type,
                                                 child_id=control.id)
            factories.RelationshipFactory(destination=audit, source=snapshot)

        flask.g.new_relationship_ids = [rel.id]
        flask.g.new_acl_ids = [a.id for a in program._access_control_list]
        flask.g.deleted_objects = []

        propagation.propagate()
        acl_q = all_models.AccessControlList.query.filter(
            all_models.AccessControlList.object_type == "Assessment", )
        self.assertEqual(acl_q.count(), 0)
        response = self.import_data(
            OrderedDict([
                ("object_type", "Assessment"),
                ("Code*", ""),
                ("Audit*", audit.slug),
                ("title", "Assessment title 1"),
                ("Creators", "*****@*****.**"),
                ("Assignees", "*****@*****.**"),
                ("map:Control versions", control.slug),
            ]),
            OrderedDict([
                ("object_type", "Assessment"),
                ("Code*", ""),
                ("Audit*", audit.slug),
                ("title", "Assessment title 2"),
                ("Creators", "*****@*****.**"),
                ("Assignees", "*****@*****.**"),
                ("map:Control versions", control.slug),
            ]),
        )
        self.check_import_errors(response)
        self.assertEqual(acl_q.count(), 20)
Exemplo n.º 5
0
  def test_import_propagation(self):
    """Test propagation program roles via import"""
    # pylint: disable=too-many-locals
    with factories.single_commit():
      program = factories.ProgramFactory()
      control = factories.ControlFactory()
      control_1 = factories.ControlFactory()
      factories.RelationshipFactory(destination=program, source=control)
      factories.RelationshipFactory(destination=program, source=control_1)

    revision = all_models.Revision.query.filter(
        all_models.Revision.resource_id == control.id,
        all_models.Revision.resource_type == control.type,
    ).first()
    with factories.single_commit():
      audit = factories.AuditFactory(program=program)
      rel = factories.RelationshipFactory(destination=audit.program,
                                          source=audit)
      snapshot = factories.SnapshotFactory(parent=audit,
                                           revision_id=revision.id,
                                           child_type=control.type,
                                           child_id=control.id)
      factories.RelationshipFactory(destination=audit, source=snapshot)

    flask.g.new_relationship_ids = [rel.id]
    flask.g.new_acl_ids = [a.id for a in program._access_control_list]
    flask.g.deleted_objects = []

    propagation.propagate()
    acl_q = all_models.AccessControlList.query.filter(
        all_models.AccessControlList.object_type == "Assessment",
    )
    self.assertEqual(acl_q.count(), 0)
    response = self.import_data(
        OrderedDict([
            ("object_type", "Assessment"),
            ("Code*", ""),
            ("Audit*", audit.slug),
            ("title", "Assessment title 1"),
            ("Creators", "*****@*****.**"),
            ("Assignees", "*****@*****.**"),
            ("map:Control versions", control.slug),
        ]),
        OrderedDict([
            ("object_type", "Assessment"),
            ("Code*", ""),
            ("Audit*", audit.slug),
            ("title", "Assessment title 2"),
            ("Creators", "*****@*****.**"),
            ("Assignees", "*****@*****.**"),
            ("map:Control versions", control.slug),
        ]),
    )
    self.check_import_errors(response)
    self.assertEqual(acl_q.count(), 20)
Exemplo n.º 6
0
def after_commit():
  """ACL propagation after commit action."""
  with benchmark("General acl propagation"):
    propagation.propagate()
Exemplo n.º 7
0
def after_commit():
  """ACL propagation after commit action."""
  with benchmark("General acl propagation"):
    propagation.propagate()
  with benchmark("Workflow acl propagation"):
    workflow.handle_acl_changes()
Exemplo n.º 8
0
def after_commit():
    """ACL propagation after commit action."""
    with benchmark("General acl propagation"):
        propagation.propagate()
    with benchmark("Workflow acl propagation"):
        workflow.handle_acl_changes()
Exemplo n.º 9
0
def after_commit():
    propagation.propagate()
    workflow.handle_acl_changes()