Exemple #1
0
    def test_preconditions_failed_with_several_mandatory_evidences(self):
        """No preconditions failed if evidences required by CAs are present"""
        ca1 = CustomAttributeMock(self.assessment,
                                  attribute_type="Dropdown",
                                  dropdown_parameters=("foo,evidence_required",
                                                       "0,2"),
                                  value="evidence_required")
        ca2 = CustomAttributeMock(self.assessment,
                                  attribute_type="Dropdown",
                                  dropdown_parameters=("foo,evidence_required",
                                                       "0,2"),
                                  value="evidence_required")
        # only one evidence provided yet
        evidence = factories.EvidenceFactory(title="Mandatory evidence", )
        factories.RelationshipFactory(
            source=self.assessment,
            destination=evidence,
        )

        # the second evidence
        evidence = factories.EvidenceFactory(
            title="Second mandatory evidence", )
        factories.RelationshipFactory(
            source=self.assessment,
            destination=evidence,
        )

        preconditions_failed = self.assessment.preconditions_failed

        self.assertEqual(preconditions_failed, False)
        self.assertFalse(ca1.value.preconditions_failed)
        self.assertFalse(ca2.value.preconditions_failed)
    def test_evidevce_type(self, _):
        """Test related evidences"""

        audit = factories.AuditFactory()
        evidence1 = factories.EvidenceFactory(title='Simple title1',
                                              kind=all_models.Evidence.FILE,
                                              source_gdrive_id='123',
                                              parent_obj={
                                                  'id': audit.id,
                                                  'type': audit.type
                                              })
        factories.RelationshipFactory(source=audit, destination=evidence1)

        evidence2 = factories.EvidenceFactory(title='Simple title2',
                                              kind=all_models.Evidence.URL,
                                              source_gdrive_id='123',
                                              parent_obj={
                                                  'id': audit.id,
                                                  'type': audit.type
                                              })
        factories.RelationshipFactory(source=audit, destination=evidence2)

        self.assertEqual(len(audit.evidences), 2)
        self.assertEqual(len(audit.evidences_url), 1)
        self.assertEqual(len(audit.evidences_file), 1)
Exemple #3
0
  def test_create_evidence_gdrive_type(self):
    """Test create evidence.FILE via POST"""
    with factories.single_commit():
      audit = factories.AuditFactory()
      assessment = factories.AssessmentFactory(audit=audit)
      evidence = factories.EvidenceFactory(
          title='Simple title',
          kind=all_models.Evidence.FILE,
          description='mega description',
          source_gdrive_id='gdrive_file_id',
          parent_obj={
              'id': assessment.id,
              'type': 'Assessment'
          }
      )

    result = all_models.Evidence.query.filter(
        all_models.Evidence.id == evidence.id).one()

    self.assertEqual(result.title, COPIED_TITLE)
    self.assertEqual(result.kind, all_models.Evidence.FILE)
    self.assertFalse(result.archived)
    self.assertEqual(result.link, COPIED_LINK)
    self.assertEqual(result.description, 'mega description')
    self.assertEqual(result.source_gdrive_id, 'gdrive_file_id')
  def test_preconditions_failed_with_missing_several_mandatory_evidences(self):
    """Preconditions failed if count(evidences) < count(evidences_required)."""
    ca1 = CustomAttributeMock(
        self.assessment,
        attribute_type="Dropdown",
        dropdown_parameters=("foo,evidence_required", "0,2"),
        value="evidence_required"
    )
    ca2 = CustomAttributeMock(
        self.assessment,
        attribute_type="Dropdown",
        dropdown_parameters=("foo,evidence_required", "0,2"),
        value="evidence_required"
    )
    # only one evidence provided yet
    evidence = factories.EvidenceFactory(
        title="Mandatory evidence",
    )
    factories.RelationshipFactory(
        source=self.assessment,
        destination=evidence,
    )

    preconditions_failed = self.assessment.preconditions_failed

    self.assertEqual(preconditions_failed, True)
    self.assertEqual(ca1.value.preconditions_failed, ["evidence"])
    self.assertEqual(ca2.value.preconditions_failed, ["evidence"])
Exemple #5
0
    def test_audit_role_propagation_edit(self, role):
        """Audit user with role '{0}' should be able to edit related evidence"""
        _, reader = self.generator.generate_person(user_role="Reader")
        assignees_role = all_models.AccessControlRole.query.filter_by(
            object_type=all_models.Audit.__name__, name=role).first()
        with factories.single_commit():
            audit = factories.AuditFactory()
            factories.AccessControlListFactory(ac_role=assignees_role,
                                               object=audit,
                                               person=reader)
            evidence = factories.EvidenceFactory()
            evidence_id = evidence.id

        factories.RelationshipFactory(source=audit, destination=evidence)

        self.api.set_user(reader)

        evidence = all_models.Evidence.query.get(evidence_id)
        new_description = 'new description'
        resp = self.api.modify_object(evidence,
                                      {'description': new_description})
        evidence = self.refresh_object(evidence)
        self.assert200(resp)
        self.assertEquals(new_description, evidence.description)
        self.assertEquals(reader.id, evidence.modified_by_id)
Exemple #6
0
 def test_put_all_affected_evidence(self, kind, attr_name):
     """Test put all affected of evidence data assessment status changed"""
     expected_status = models.Assessment.PROGRESS_STATE
     with factories.single_commit():
         evidence = factories.EvidenceFactory(kind=kind)
         evidence_id = evidence.id
         factories.RelationshipFactory(destination=self.assessment,
                                       source=evidence)
         person_id = factories.PersonFactory().id
         role_id = models.AccessControlRole.query.filter(
             models.AccessControlRole.object_type == "Evidence",
             models.AccessControlRole.name == 'Admin',
         ).one().id
     self.api.put(
         evidence, {
             attr_name:
             "test text",
             "access_control_list": [
                 acl_helper.get_acl_json(role_id, person_id),
             ]
         })
     assessment = self.refresh_object(self.assessment, self.assessment_id)
     evidence = self.refresh_object(evidence, evidence_id)
     self.assertEqual(assessment.status, expected_status)
     self.assertEqual(getattr(evidence, attr_name), "test text")
Exemple #7
0
    def test_evidence_postfix_two_controls(self):
        """Test evidence postfix for assessment with two controls."""

        with factories.single_commit():
            audit = factories.AuditFactory()
            control1 = factories.ControlFactory()
            control2 = factories.ControlFactory()
            snapshots = self._create_snapshots(audit, [control1, control2])
            assessment = factories.AssessmentFactory(audit=audit)
            factories.RelationshipFactory(source=assessment,
                                          destination=snapshots[0])
            factories.RelationshipFactory(source=assessment,
                                          destination=snapshots[1])

        evidence = factories.EvidenceFactory(title='Simple title',
                                             kind=all_models.Evidence.FILE,
                                             link='some link',
                                             parent_obj={
                                                 'id': assessment.id,
                                                 'type': 'Assessment'
                                             })

        expec = '_ggrc_assessment-{}_control-{}_control-{}'.format(
            assessment.id, control1.id, control2.id)
        # pylint: disable=protected-access
        result = evidence._build_file_name_postfix(assessment)
        self.assertEqual(expec, result)
Exemple #8
0
 def test_filter_evidence_by_type_gdrive(self):
     """Test filter evidences by evidence type GDRIVE."""
     evidence_gdrive = factories.EvidenceFactory(
         title='Simple title',
         source_gdrive_id='gdrive_id',
         link='sample.site',
         kind=all_models.Evidence.FILE)
     evidence_gdrive_id = evidence_gdrive.id
     query_request_data = [{
         u'filters': {
             u'expression': {
                 u'left': u'type',
                 u'op': {
                     u'name': u'='
                 },
                 u'right': all_models.Evidence.FILE
             }
         },
         u'object_name': u'Evidence',
         u'type': u'values'
     }]
     resp = self.api.send_request(self.api.client.post,
                                  data=query_request_data,
                                  api_link="/query")
     self.assertEqual(1, resp.json[0]["Evidence"]["count"])
     self.assertEqual(evidence_gdrive_id,
                      resp.json[0]["Evidence"]["values"][0]["id"])
Exemple #9
0
    def test_add_evidence_and_status(self, status, result_status):
        """Test add evidence and update {0} status to {1}
    in single PUT."""
        asmt_id = self.asmt.id

        # putting assessment to 'In Progress' state
        self.api.put(
            self.asmt, {
                "actions": {
                    "add_related": [{
                        "id": self.evidence.id,
                        "type": "Evidence"
                    }]
                },
            })
        new_evidence = factories.EvidenceFactory()
        response = self.api.put(
            self.asmt, {
                "status": status,
                "actions": {
                    "add_related": [{
                        "id": new_evidence.id,
                        "type": "Evidence"
                    }]
                },
            })
        self.assertEqual(response.status_code, 200)
        response_asmt = response.json["assessment"]
        self.assertEqual(response_asmt["status"], result_status)

        asmt = all_models.Assessment.query.get(asmt_id)
        self.assertEqual(asmt.status, result_status)
Exemple #10
0
 def test_filter_document_by_type(self, document_type):
     """Test filter documents by document type."""
     data = {
         all_models.Document.ATTACHMENT: factories.EvidenceFactory().id,
         all_models.Document.URL: factories.UrlFactory().id,
     }
     query_request_data = [{
         u'fields': [],
         u'filters': {
             u'expression': {
                 u'left': u'document_type',
                 u'op': {
                     u'name': u'='
                 },
                 u'right': document_type,
             }
         },
         u'limit': [0, 5],
         u'object_name': u'Document',
         u'permissions': u'read',
         u'type': u'values',
     }]
     resp = self.api.send_request(self.api.client.post,
                                  data=query_request_data,
                                  api_link="/query")
     self.assertEqual(1, resp.json[0]["Document"]["count"])
     self.assertEqual(data[document_type],
                      resp.json[0]["Document"]["values"][0]["id"])
    def test_audit_role_propagation_edit(self, user_role, audit_role,
                                         status_code):
        """'{0}' assigned as '{1}' should get '{2}' when editing audit evidence"""
        _, user = self.generator.generate_person(user_role=user_role)
        with factories.single_commit():
            audit = factories.AuditFactory()
            audit.add_person_with_role_name(user, audit_role)
            evidence = factories.EvidenceFactory()
            evidence_id = evidence.id

        factories.RelationshipFactory(source=audit, destination=evidence)

        self.api.set_user(user)

        evidence = all_models.Evidence.query.get(evidence_id)
        new_description = 'new description'
        resp = self.api.modify_object(evidence,
                                      {'description': new_description})
        evidence = self.refresh_object(evidence)

        if status_code == 200:
            self.assert200(resp)
            self.assertEquals(new_description, evidence.description)
            self.assertEquals(user.id, evidence.modified_by_id)
        else:
            self.assertStatus(resp, status_code)
  def test_evidense_export(self):
    """Test evidence fields of the assessments"""
    with factories.single_commit():
      evid_file = factories.EvidenceFactory(
          title="Simple title",
          kind=all_models.Evidence.FILE,
          link="https://d.go.com/d/18YJavJlv8YvIoCy/edit",
          description="mega description",
          parent_obj={
              "id": self.assessment.id,
              "type": "Assessment"
          }
      )
      evid_file_link = evid_file.link
      evid_file_title = evid_file.title

      evid_url = factories.EvidenceFactory(
          title="Simple title",
          kind=all_models.Evidence.URL,
          link="google.com",
          description="mega description",
          parent_obj={
              "id": self.assessment.id,
              "type": "Assessment"
          }
      )
      evid_url_link = evid_url.link

    search_request = [{
        "object_name": "Assessment",
        "fields": "all",
        "filters": {
            "expression": {
                "left": "id",
                "op": {"name": "="},
                "right": self.assessment.id
            }
        }
    }]

    resp = self.export_parsed_csv(search_request)["Assessment"][0]
    expected_evid_file_string = evid_file_link + " " + evid_file_title

    self.assertEquals(expected_evid_file_string, resp["Evidence File"])
    self.assertEquals(evid_url_link, resp["Evidence URL"])
Exemple #13
0
 def test_put_empty_evidence_data(self, kind):
     """Test put empty evidence data assessment status changed"""
     with factories.single_commit():
         evidence = factories.EvidenceFactory(kind=kind)
         factories.RelationshipFactory(destination=self.assessment,
                                       source=evidence)
     self.api.put(evidence, {})
     assessment = self.refresh_object(self.assessment, self.assessment_id)
     self.assertEqual(assessment.status, models.Assessment.FINAL_STATE)
Exemple #14
0
 def test_evidence_create_an_map(self):
     """Test document is created and mapped to audit"""
     audit = factories.AuditFactory(slug="Audit")
     evidence = factories.EvidenceFactory(title="evidence", )
     factories.RelationshipFactory(
         source=audit,
         destination=evidence,
     )
     self.assertEqual(audit.document_evidence[0].title, "evidence")
Exemple #15
0
 def setUp(self):
     """Set up audit and cad for test cases."""
     super(TestAssessmentCompleteWithAction, self).setUp()
     self.api = ggrc.api_helper.Api()
     with factories.single_commit():
         self.audit = factories.AuditFactory()
         self.asmt = factories.AssessmentFactory(audit=self.audit,
                                                 status="In Progress")
         self.evidence = factories.EvidenceFactory()
Exemple #16
0
    def test_part_asmnt_exist(self):
        """Test Audit summary when not all kinds of Asmnt created"""
        with factories.single_commit():
            audit = factories.AuditFactory()
            for status in ["Completed", "Verified"]:
                assessment = factories.AssessmentFactory(audit=audit,
                                                         status=status)
                evidence_url = factories.EvidenceFactory(
                    kind=all_models.Evidence.URL)
                factories.RelationshipFactory(source=assessment,
                                              destination=evidence_url)

                evidence_file = factories.EvidenceFactory(
                    kind=all_models.Evidence.FILE, source_gdrive_id='12345')
                factories.RelationshipFactory(source=assessment,
                                              destination=evidence_file)

        summary_link = "/api/{}/{}/summary".format(
            audit._inflector.table_plural, audit.id)
        response = self.api.client.get(summary_link)
        self.assert200(response)

        evid_count = len(all_models.Evidence.VALID_EVIDENCE_KINDS)
        expected_data = {
            "statuses": [
                {
                    "name": "Completed",
                    "assessments": 1,
                    "evidence": evid_count,
                    "verified": 0
                },
                {
                    "name": "Completed",
                    "assessments": 1,
                    "evidence": evid_count,
                    "verified": 1
                },
            ],
            "total": {
                "assessments": 2,
                "evidence": 2 * evid_count
            }
        }
        self.assertEqual(response.json, expected_data)
Exemple #17
0
 def test_put_ignored_evidence_attrs(self, kind, attr_name):
     """Test assessment status not changed after evidence attr {1} changed."""
     expected_status = models.Assessment.FINAL_STATE
     with factories.single_commit():
         evidence = factories.EvidenceFactory(kind=kind)
         factories.RelationshipFactory(destination=self.assessment,
                                       source=evidence)
     response = self.api.put(evidence, {attr_name: "test text"})
     self.assert200(response)
     assessment = self.refresh_object(self.assessment, self.assessment_id)
     self.assertEqual(assessment.status, expected_status)
 def test_evidences_copied_once(self, mock_gdrive):
     """Test evidences copied to GDrive only once"""
     audit = factories.AuditFactory()
     evidence = factories.EvidenceFactory(title='Simple title',
                                          kind=all_models.Evidence.FILE,
                                          source_gdrive_id='123',
                                          parent_obj={
                                              'id': audit.id,
                                              'type': audit.type
                                          })
     factories.RelationshipFactory(source=audit, destination=evidence)
     self.assertEqual(mock_gdrive.call_count, 1)
Exemple #19
0
    def test_evidence_filter(self):
        """Only evidence kind URL and FILE should be shown in summary"""
        with factories.single_commit():
            audit = factories.AuditFactory()
            assessment = factories.AssessmentFactory(audit=audit)

            evidence_url = factories.EvidenceFactory(
                kind=all_models.Evidence.URL)
            factories.RelationshipFactory(source=evidence_url,
                                          destination=assessment)

            evidence_file = factories.EvidenceFactory(
                kind=all_models.Evidence.FILE, source_gdrive_id='12345')
            factories.RelationshipFactory(source=assessment,
                                          destination=evidence_file)

        summary_link = "/api/{}/{}/summary".format(
            audit._inflector.table_plural, audit.id)
        response = self.api.client.get(summary_link)
        self.assert200(response)
        self.assertEqual(response.json['total']['evidence'], 2)
Exemple #20
0
 def test_evidence_url_type_with_parent(self):
     """Evidence of URL type should mapped to parent if parent specified"""
     audit = factories.AuditFactory()
     evidence = factories.EvidenceFactory(title='Simple title',
                                          kind=all_models.Evidence.URL,
                                          link='some_url.com',
                                          description='mega description',
                                          parent_obj={
                                              'id': audit.id,
                                              'type': 'Audit'
                                          })
     rel_evidences = audit.related_objects(_types=[evidence.type])
     self.assertEqual(evidence, rel_evidences.pop())
Exemple #21
0
    def test_archived_audit(self, archived):
        """Test evidence archived if audit archived"""
        audit = factories.AuditFactory(archived=archived)

        evidence = factories.EvidenceFactory(title='Simple title',
                                             kind=all_models.Evidence.URL,
                                             link='some_url.com',
                                             description='mega description',
                                             parent_obj={
                                                 'id': audit.id,
                                                 'type': 'Audit'
                                             })
        self.assertEquals(archived, evidence.archived)
  def test_map_parent(self, kind,
                      from_status, expected_status):
    """Move Assessment from '{1}' to '{2}' map evid with parent of type {0}"""
    assessment = factories.AssessmentFactory(status=from_status)

    factories.EvidenceFactory(
        title='Simple title',
        kind=kind,
        link='some link',
        parent_obj={
            'id': assessment.id,
            'type': 'Assessment'
        })
    self.assertEquals(expected_status, assessment.status)
Exemple #23
0
 def test_put_ignored_evidence_attrs(self, kind, attr_name, status):
     """Test assessment status not changed after evidence attr {2} changed."""
     with factories.single_commit():
         assessment = factories.AssessmentFactory(status=status)
         assessment_id = assessment.id
         evidence = factories.EvidenceFactory(kind=kind)
         evidence_id = evidence.id
         factories.RelationshipFactory(destination=assessment,
                                       source=evidence)
     self.api.put(evidence, {attr_name: "test text"})
     assessment = self.refresh_object(assessment, assessment_id)
     evidence = self.refresh_object(evidence, evidence_id)
     self.assertEqual(assessment.status, status)
     self.assertEqual(getattr(evidence, attr_name), "test text")
    def test_evidences(self, _):
        """Test related evidences"""

        audit = factories.AuditFactory()
        evidence = factories.EvidenceFactory(title='Simple title',
                                             kind=all_models.Evidence.FILE,
                                             source_gdrive_id='123',
                                             parent_obj={
                                                 'id': audit.id,
                                                 'type': audit.type
                                             })
        factories.RelationshipFactory(source=audit, destination=evidence)
        self.assertEqual(len(audit.evidences), 1)
        self.assertEqual(audit.evidences[0].title, COPIED_TITLE)
Exemple #25
0
 def test_get_parent_obj_audit_type(self):
     """Test parent object audit"""
     audit = factories.AuditFactory()
     evidence = factories.EvidenceFactory(title='Simple title',
                                          kind=all_models.Evidence.FILE,
                                          link='some_url.com',
                                          description='mega description',
                                          source_gdrive_id='qwerqwer',
                                          parent_obj={
                                              'id': audit.id,
                                              'type': 'Audit'
                                          })
     rel_asses = evidence.related_objects(_types=[audit.type])
     self.assertEqual(audit, rel_asses.pop())
 def test_evidence_delete(self, kind, from_status,
                          expected_status):
   """Move Assessment from '{1}' to '{2}' delete evidence of type {0}"""
   with factories.single_commit():
     assessment = factories.AssessmentFactory(status=from_status)
     evidence = factories.EvidenceFactory(kind=kind,
                                          title='google.com',
                                          link='google.com',
                                          source_gdrive_id='some_id')
     factories.RelationshipFactory(destination=assessment, source=evidence)
   assessment_id = assessment.id
   response = self.api.delete(evidence)
   assessment = self.refresh_object(assessment, assessment_id)
   self.assert200(response)
   self.assertEqual(expected_status, assessment.status)
Exemple #27
0
 def test_put_status_evidence(self, kind, evidence_from_status,
                              evidence_to_status):
     """Test put evidence status and assessment status changed"""
     expected_status = models.Assessment.PROGRESS_STATE
     with factories.single_commit():
         evidence = factories.EvidenceFactory(kind=kind,
                                              status=evidence_from_status)
         evidence_id = evidence.id
         factories.RelationshipFactory(destination=self.assessment,
                                       source=evidence)
     self.api.put(evidence, {'status': evidence_to_status})
     assessment = self.refresh_object(self.assessment, self.assessment_id)
     evidence = self.refresh_object(evidence, evidence_id)
     self.assertEqual(assessment.status, expected_status)
     self.assertEqual(evidence.status, evidence_to_status)
Exemple #28
0
 def test_put_acl_null_evidence(self, kind):
     """Test put acl null of evidence data assessment status changed"""
     expected_status = models.Assessment.PROGRESS_STATE
     with factories.single_commit():
         evidence = factories.EvidenceFactory(kind=kind)
         factories.RelationshipFactory(destination=self.assessment,
                                       source=evidence)
         person = factories.PersonFactory()
         role = models.AccessControlRole.query.filter(
             models.AccessControlRole.object_type == "Evidence",
             models.AccessControlRole.name == 'Admin',
         ).one()
         evidence.add_person_with_role(person, role)
     self.api.put(evidence, {"access_control_list": []})
     assessment = self.refresh_object(self.assessment, self.assessment_id)
     self.assertEqual(assessment.status, expected_status)
Exemple #29
0
    def test_evidence_acl(self):
        """Test evidence with ACR creation"""
        person = factories.PersonFactory()
        acr_class = all_models.AccessControlRole
        acr = acr_class.query.filter(
            acr_class.name == 'Admin',
            acr_class.object_type == 'Evidence').one()

        evidence = factories.EvidenceFactory(
            title='Simple title',
            kind=all_models.Evidence.URL,
            link='simple_url.test',
            access_control_list=[acl_helper.get_acl_json(acr.id, person.id)])
        acl_class = all_models.AccessControlList
        acl = acl_class.query.filter(acl_class.object_id == evidence.id).one()
        self.assertTrue(acl)
Exemple #30
0
    def test_evidence_postfix_audit(self):
        """Test evidence file postfix for audit."""

        audit = factories.AuditFactory()
        evidence = factories.EvidenceFactory(title='Simple title',
                                             kind=all_models.Evidence.FILE,
                                             link='some link',
                                             parent_obj={
                                                 'id': audit.id,
                                                 'type': 'Audit'
                                             })

        expected = '_ggrc_{}'.format(audit.slug).lower()
        # pylint: disable=protected-access
        result = evidence._build_file_name_postfix(audit)
        self.assertEqual(expected, result)