Пример #1
0
class TestCollection(TestCase, WithQueryApi):
    """Test for collection assessment objects."""
    def setUp(self):
        super(TestCollection, self).setUp()
        self.client.get("/login")
        self.clear_data()
        self.expected_ids = []
        self.api = Api()
        self.generator = ObjectGenerator()
        assessments = [factories.AssessmentFactory() for _ in range(10)]
        random.shuffle(assessments)
        for idx, assessment in enumerate(assessments):
            comment = factories.CommentFactory(description=str(idx))
            factories.RelationshipFactory(source=assessment,
                                          destination=comment)
            self.expected_ids.append(assessment.id)

    @data(True, False)
    def test_order_by_test(self, desc):
        """Order by fultext attr"""
        query = self._make_query_dict("Assessment",
                                      order_by=[{
                                          "name": "comment",
                                          "desc": desc
                                      }])
        expected_ids = self.expected_ids
        if desc:
            expected_ids = expected_ids[::-1]
        results = self._get_first_result_set(query, "Assessment", "values")
        self.assertEqual(expected_ids, [i['id'] for i in results])

    @data("Assessor", "Creator", "Verifier")
    def test_delete_assessment_by_role(self, role_name):
        """Delete assessment not allowed for based on Assignee Type."""
        with factories.single_commit():
            assessment = factories.AssessmentFactory()
            context = factories.ContextFactory(related_object=assessment)
            assessment.context = context
            person = factories.PersonFactory()
            object_person_rel = factories.RelationshipFactory(
                source=assessment, destination=person)
            factories.RelationshipAttrFactory(
                relationship_id=object_person_rel.id,
                attr_name="AssigneeType",
                attr_value=role_name,
            )
        assessment_id = assessment.id
        role = all_models.Role.query.filter(
            all_models.Role.name == "Creator").first()
        self.generator.generate_user_role(person, role, context)
        self.api.set_user(person)
        assessment = all_models.Assessment.query.get(assessment_id)
        resp = self.api.delete(assessment)
        self.assert403(resp)
        self.assertTrue(
            all_models.Assessment.query.filter(
                all_models.Assessment.id == assessment_id).one())
Пример #2
0
class TestCollection(TestCase, WithQueryApi):

  """Test for collection assessment objects."""

  def setUp(self):
    super(TestCollection, self).setUp()
    self.client.get("/login")
    self.clear_data()
    self.expected_ids = []
    self.api = Api()
    self.generator = ObjectGenerator()
    assessments = [factories.AssessmentFactory() for _ in range(10)]
    random.shuffle(assessments)
    for idx, assessment in enumerate(assessments):
      comment = factories.CommentFactory(description=str(idx))
      factories.RelationshipFactory(source=assessment, destination=comment)
      self.expected_ids.append(assessment.id)

  @data(True, False)
  def test_order_by_test(self, desc):
    """Order by fultext attr"""
    query = self._make_query_dict(
        "Assessment", order_by=[{"name": "comment", "desc": desc}]
    )
    expected_ids = self.expected_ids
    if desc:
      expected_ids = expected_ids[::-1]
    results = self._get_first_result_set(query, "Assessment", "values")
    self.assertEqual(expected_ids, [i['id'] for i in results])

  @data("Assessor", "Creator", "Verifier")
  def test_delete_assessment_by_role(self, role_name):
    """Delete assessment not allowed for based on Assignee Type."""
    with factories.single_commit():
      assessment = factories.AssessmentFactory()
      context = factories.ContextFactory(related_object=assessment)
      assessment.context = context
      person = factories.PersonFactory()
      object_person_rel = factories.RelationshipFactory(
          source=assessment, destination=person)
      factories.RelationshipAttrFactory(
          relationship_id=object_person_rel.id,
          attr_name="AssigneeType",
          attr_value=role_name,
      )
    assessment_id = assessment.id
    role = all_models.Role.query.filter(
        all_models.Role.name == "Creator"
    ).first()
    self.generator.generate_user_role(person, role, context)
    self.api.set_user(person)
    assessment = all_models.Assessment.query.get(assessment_id)
    resp = self.api.delete(assessment)
    self.assert403(resp)
    self.assertTrue(all_models.Assessment.query.filter(
        all_models.Assessment.id == assessment_id).one())
Пример #3
0
class TestCollection(TestCase, WithQueryApi):
    """Test for collection assessment objects."""
    def setUp(self):
        super(TestCollection, self).setUp()
        self.client.get("/login")
        self.clear_data()
        self.api = Api()
        self.generator = ObjectGenerator()

    @ddt.data(True, False)
    def test_order_by_test(self, desc):
        """Order by fultext attr"""
        expected_ids = []
        with factories.single_commit():
            assessments = [factories.AssessmentFactory() for _ in range(10)]
        random.shuffle(assessments)
        with factories.single_commit():
            for idx, assessment in enumerate(assessments):
                comment = factories.CommentFactory(description=str(idx))
                factories.RelationshipFactory(source=assessment,
                                              destination=comment)
                expected_ids.append(assessment.id)
        query = self._make_query_dict("Assessment",
                                      order_by=[{
                                          "name": "comment",
                                          "desc": desc
                                      }])
        if desc:
            expected_ids = expected_ids[::-1]
        results = self._get_first_result_set(query, "Assessment", "values")
        self.assertEqual(expected_ids, [i['id'] for i in results])

    @ddt.data("Assessor", "Creator", "Verifier")
    def test_delete_assessment_by_role(self, role_name):
        """Delete assessment not allowed for based on Assignee Type."""
        with factories.single_commit():
            assessment = factories.AssessmentFactory()
            context = factories.ContextFactory(related_object=assessment)
            assessment.context = context
            person = factories.PersonFactory()
            object_person_rel = factories.RelationshipFactory(
                source=assessment, destination=person)
            factories.RelationshipAttrFactory(
                relationship_id=object_person_rel.id,
                attr_name="AssigneeType",
                attr_value=role_name,
            )
        assessment_id = assessment.id
        role = all_models.Role.query.filter(
            all_models.Role.name == "Creator").first()
        self.generator.generate_user_role(person, role, context)
        self.api.set_user(person)
        assessment = all_models.Assessment.query.get(assessment_id)
        resp = self.api.delete(assessment)
        self.assert403(resp)
        self.assertTrue(
            all_models.Assessment.query.filter(
                all_models.Assessment.id == assessment_id).one())

    @ddt.data(
        (all_models.Assessment.REWORK_NEEDED, True),
        (all_models.Assessment.DONE_STATE, True),
        (all_models.Assessment.FINAL_STATE, True),
        (all_models.Assessment.START_STATE, False),
    )
    @ddt.unpack
    def test_update_status_need_rework(self, status, is_valid):
        """Update assessment state from need rework to valid or invalid states."""
        with factories.single_commit():
            assessment = factories.AssessmentFactory(
                status=all_models.Assessment.REWORK_NEEDED)
        assessment_id = assessment.id
        resp = self.api.put(assessment, {"status": status})
        if is_valid:
            self.assert200(resp)
            check_status = status
        else:
            self.assert400(resp)
            check_status = all_models.Assessment.REWORK_NEEDED
        self.assertEqual(check_status,
                         all_models.Assessment.query.get(assessment_id).status)
Пример #4
0
class TestPermissionsOnAssessmentTemplate(TestCase):
    """ Test check permissions for ProgramEditor on

  get and post assessment_temaplte action"""
    def setUp(self):
        super(TestPermissionsOnAssessmentTemplate, self).setUp()
        self.api = Api()
        self.generator = ObjectGenerator()
        _, program = self.generator.generate_object(all_models.Program)
        program_id = program.id
        _, self.editor = self.generator.generate_person(user_role="Creator")
        role = perms.all_models.Role.query.filter(
            perms.all_models.Role.name == "ProgramEditor").first()
        self.generator.generate_user_role(
            self.editor, role, all_models.Program.query.get(program_id))
        _, audit = self.generator.generate_object(
            all_models.Audit,
            {
                "title": "Audit",
                "program": {
                    "id": program_id
                },
                "status": "Planned"
            },
        )
        audit_id = audit.id

        generated_at = self.generator.generate_object(
            all_models.AssessmentTemplate, {
                "title": "Template",
                "_NON_RELEVANT_OBJ_TYPES": {},
                "_objectTypes": {},
                "audit": {
                    "id": audit.id
                },
                "audit_title": audit.title,
                "people_value": [],
                "default_people": {
                    "assignees": "Admin",
                    "verifiers": "Admin",
                },
                "context": {
                    "id": audit.context.id
                },
            })
        self.assessment_template_resp, assessment_template = generated_at
        assessment_template_id = assessment_template.id
        self.api.set_user(self.editor)
        self.perms_data = self.api.client.get("/permissions").json
        self.audit = all_models.Audit.query.get(audit_id)
        self.assessment_template = all_models.AssessmentTemplate.query.get(
            assessment_template_id)

    def test_post_action(self):
        """Test create action on AssessmentTemplate created by api"""
        data = [{
            "assessment_template": {
                "_NON_RELEVANT_OBJ_TYPES": {},
                "_objectTypes": {},
                "audit": {
                    "id": self.audit.id
                },
                "audit_title": self.audit.title,
                "people_value": [],
                "default_people": {
                    "assignees": "Admin",
                    "verifiers": "Admin",
                },
                "context": {
                    "id": self.audit.context.id
                },
                "title": "123",
            }
        }]
        self.api.set_user(self.editor)
        resp = self.api.post(all_models.AssessmentTemplate, data)
        self.assert200(resp)

    def test_get_action(self):
        """Test read action on AssessmentTemplate created by api"""
        resp = self.api.get(all_models.AssessmentTemplate,
                            self.assessment_template.id)
        self.assert200(resp)

    def test_put_action(self):
        """Test update action on AssessmentTemplate created by api"""
        to_update = copy.deepcopy(self.assessment_template_resp.json)
        new_title = "new_{}".format(self.assessment_template.title)
        to_update['assessment_template']['title'] = new_title
        resp = self.api.put(self.assessment_template, to_update)
        self.assert200(resp)
        assessment_tmpl = all_models.AssessmentTemplate.query.get(
            self.assessment_template.id)
        self.assertEqual(new_title, assessment_tmpl.title)

    def test_delete_action(self):
        """Test delete action on AssessmentTemplate created by api"""
        resp = self.api.delete(self.assessment_template)
        self.assert200(resp)
        self.assertFalse(
            all_models.AssessmentTemplate.query.filter(
                all_models.AssessmentTemplate ==
                self.assessment_template.id).all())
Пример #5
0
class TestPermissionsOnAssessmentTemplate(TestCase):
  """ Test check permissions for ProgramEditor on

  get and post assessment_temaplte action"""

  def setUp(self):
    super(TestPermissionsOnAssessmentTemplate, self).setUp()
    self.api = Api()
    self.generator = ObjectGenerator()
    _, program = self.generator.generate_object(all_models.Program)
    program_id = program.id
    _, self.editor = self.generator.generate_person(
        user_role="Creator"
    )
    role = perms.all_models.Role.query.filter(
        perms.all_models.Role.name == "ProgramEditor"
    ).first()
    self.generator.generate_user_role(
        self.editor,
        role,
        all_models.Program.query.get(program_id)
    )
    _, audit = self.generator.generate_object(
        all_models.Audit,
        {
            "title": "Audit",
            "program": {"id": program_id},
            "status": "Planned"
        },
    )
    audit_id = audit.id

    generated_at = self.generator.generate_object(
        all_models.AssessmentTemplate,
        {
            "title": "Template",
            "_NON_RELEVANT_OBJ_TYPES": {},
            "_objectTypes": {},
            "audit": {"id": audit.id},
            "audit_title": audit.title,
            "people_value": [],
            "default_people": {
                "assessors": "Object Owners",
                "verifiers": "Object Owners",
            },
            "context": {"id": audit.context.id},
        }
    )
    self.assessment_template_resp, assessment_template = generated_at
    assessment_template_id = assessment_template.id
    self.api.set_user(self.editor)
    self.perms_data = self.api.client.get("/permissions").json
    self.audit = all_models.Audit.query.get(audit_id)
    self.assessment_template = all_models.AssessmentTemplate.query.get(
        assessment_template_id)

  def test_post_action(self):
    """Test create action on AssessmentTemplate created by api"""
    data = [{
        "assessment_template": {
            "_NON_RELEVANT_OBJ_TYPES": {},
            "_objectTypes": {},
            "audit": {"id": self.audit.id},
            "audit_title": self.audit.title,
            "people_value": [],
            "default_people": {
                "assessors": "Object Owners",
                "verifiers": "Object Owners",
            },
            "context": {"id": self.audit.context.id},
            "title": "123",
        }
    }]
    self.api.set_user(self.editor)
    resp = self.api.post(all_models.AssessmentTemplate, data)
    self.assert200(resp)

  def test_get_action(self):
    """Test read action on AssessmentTemplate created by api"""
    resp = self.api.get(all_models.AssessmentTemplate,
                        self.assessment_template.id)
    self.assert200(resp)

  def test_put_action(self):
    """Test update action on AssessmentTemplate created by api"""
    to_update = copy.deepcopy(self.assessment_template_resp.json)
    new_title = "new_{}".format(self.assessment_template.title)
    to_update['assessment_template']['title'] = new_title
    resp = self.api.put(self.assessment_template, to_update)
    self.assert200(resp)
    assessment_tmpl = all_models.AssessmentTemplate.query.get(
        self.assessment_template.id
    )
    self.assertEqual(new_title, assessment_tmpl.title)

  def test_delete_action(self):
    """Test delete action on AssessmentTemplate created by api"""
    resp = self.api.delete(self.assessment_template)
    self.assert200(resp)
    self.assertFalse(all_models.AssessmentTemplate.query.filter(
        all_models.AssessmentTemplate == self.assessment_template.id).all())
Пример #6
0
class TestCollection(TestCase, WithQueryApi):

  """Test for collection assessment objects."""

  def setUp(self):
    super(TestCollection, self).setUp()
    self.client.get("/login")
    self.clear_data()
    self.api = Api()
    self.generator = ObjectGenerator()

  @ddt.data(True, False)
  def test_order_by_test(self, desc):
    """Order by fultext attr"""
    expected_ids = []
    with factories.single_commit():
      assessments = [factories.AssessmentFactory() for _ in range(10)]
    random.shuffle(assessments)
    with factories.single_commit():
      for idx, assessment in enumerate(assessments):
        comment = factories.CommentFactory(description=str(idx))
        factories.RelationshipFactory(source=assessment, destination=comment)
        expected_ids.append(assessment.id)
    query = self._make_query_dict(
        "Assessment", order_by=[{"name": "comment", "desc": desc}]
    )
    if desc:
      expected_ids = expected_ids[::-1]
    results = self._get_first_result_set(query, "Assessment", "values")
    self.assertEqual(expected_ids, [i['id'] for i in results])

  @ddt.data("Assignees", "Creators", "Verifiers")
  def test_delete_assessment_by_role(self, role_name):
    """Delete assessment not allowed for based on Assignee Type."""
    with factories.single_commit():
      assessment = factories.AssessmentFactory()
      context = factories.ContextFactory(related_object=assessment)
      assessment.context = context
      person = factories.PersonFactory()
      ac_role = all_models.AccessControlRole.query.filter_by(
          object_type=assessment.type,
          name=role_name
      ).first()
      factories.AccessControlListFactory(
          person=person,
          ac_role=ac_role,
          object=assessment
      )
    assessment_id = assessment.id
    role = all_models.Role.query.filter(
        all_models.Role.name == "Creator"
    ).first()
    self.generator.generate_user_role(person, role, context)
    self.api.set_user(person)
    assessment = all_models.Assessment.query.get(assessment_id)
    resp = self.api.delete(assessment)
    self.assert403(resp)
    self.assertTrue(all_models.Assessment.query.filter(
        all_models.Assessment.id == assessment_id).one())

  @ddt.data(
      (all_models.Assessment.REWORK_NEEDED, True),
      (all_models.Assessment.DONE_STATE, True),
      (all_models.Assessment.FINAL_STATE, True),
      (all_models.Assessment.START_STATE, False),
  )
  @ddt.unpack
  def test_update_status_need_rework(self, status, is_valid):
    """Update assessment state from need rework to valid or invalid states."""
    with factories.single_commit():
      assessment = factories.AssessmentFactory(
          status=all_models.Assessment.REWORK_NEEDED
      )
    assessment_id = assessment.id
    resp = self.api.put(assessment, {"status": status})
    if is_valid:
      self.assert200(resp)
      check_status = status
    else:
      self.assert400(resp)
      check_status = all_models.Assessment.REWORK_NEEDED
    self.assertEqual(
        check_status, all_models.Assessment.query.get(assessment_id).status)