Exemplo n.º 1
0
  def test_last_reviewed(self):
    """last_reviewed_by, last_reviewed_by should be set if reviewed"""
    risk = factories.RiskFactory()
    resp, review = self.generator.generate_object(
        all_models.Review,
        {
            "reviewable": {
                "type": risk.type,
                "id": risk.id,
            },
            "context": None,
            "status": all_models.Review.STATES.UNREVIEWED,
            "access_control_list": build_reviewer_acl(),
            "notification_type": all_models.Review.NotificationTypes.EMAIL_TYPE
        },
    )
    review_id = review.id
    resp = self.api.put(
        review,
        {
            "status": all_models.Review.STATES.REVIEWED,
        },
    )
    self.assert200(resp)
    self.assertIsNotNone(resp.json["review"]["last_reviewed_by"])
    self.assertIsNotNone(resp.json["review"]["last_reviewed_at"])

    review = all_models.Review.query.get(review_id)
    self.assertIsNotNone(review.last_reviewed_by)
    self.assertIsNotNone(review.last_reviewed_at)
Exemplo n.º 2
0
 def setup_review(self, acr_id=None, user_id=None):
   """Create new review object"""
   resp, review = self.objgen.generate_object(
       all_models.Review,
       {
           "reviewable": {
               "type": self.parent.type,
               "id": self.parent_id,
           },
           "context": None,
           "status": all_models.Review.STATES.UNREVIEWED,
           "access_control_list": build_reviewer_acl(acr_id, user_id),
           "notification_type": all_models.Review.NotificationTypes.EMAIL_TYPE
       },
   )
   return resp, review
Exemplo n.º 3
0
 def mark_as_reviewed(instance):
   """Helper function to mark `instance` as reviewed."""
   response = self.api.post(
       all_models.Review,
       {
           "review": {
               "reviewable": {
                   "type": instance.type,
                   "id": instance.id,
               },
               "context": None,
               "notification_type": "email",
               "status": all_models.Review.STATES.REVIEWED,
               "access_control_list": review.build_reviewer_acl(),
           },
       },
   )
   self.assertStatus(response, 201)
Exemplo n.º 4
0
  def test_create_review(self):
    """Create review via API, check that single relationship is created"""
    program = factories.ProgramFactory()
    program_id = program.id
    resp = self.api.post(
        all_models.Review,
        {
            "review": {
                "reviewable": {
                    "type": program.type,
                    "id": program.id,
                },
                "context": None,
                "notification_type": "email",
                "status": all_models.Review.STATES.UNREVIEWED,
                "access_control_list": build_reviewer_acl()
            },
        },
    )
    self.assertEqual(201, resp.status_code)
    review_id = resp.json["review"]["id"]
    review = all_models.Review.query.get(review_id)
    self.assertEqual(all_models.Review.STATES.UNREVIEWED, review.status)
    self.assertEqual(program.type, review.reviewable_type)
    self.assertEqual(program_id, review.reviewable_id)

    control_review_rel_count = all_models.Relationship.query.filter(
        all_models.Relationship.source_id == review.id,
        all_models.Relationship.source_type == review.type,
        all_models.Relationship.destination_id == program_id,
        all_models.Relationship.destination_type == program.type,
    ).union(
        all_models.Relationship.query.filter(
            all_models.Relationship.destination_id == review.id,
            all_models.Relationship.destination_type == review.type,
            all_models.Relationship.source_id == program_id,
            all_models.Relationship.source_type == program.type,
        )
    ).count()
    self.assertEqual(1, control_review_rel_count)
Exemplo n.º 5
0
 def test_notification_add_new_review(
     self, notification_type, expected_notifications
 ):
   """After creation of new review notification should be created"""
   program = factories.ProgramFactory()
   resp, _ = self.generator.generate_object(
       all_models.Review,
       {
           "reviewable": {
               "type": program.type,
               "id": program.id,
           },
           "context": None,
           "notification_type": notification_type,
           "status": all_models.Review.STATES.UNREVIEWED,
           "access_control_list": build_reviewer_acl(),
       },
   )
   self.assertEqual(201, resp.status_code)
   self.assertEqual(
       expected_notifications, len(all_models.Notification.query.all())
   )
Exemplo n.º 6
0
 def test_notification_add_new_review(
     self, notification_type, expected_notifications
 ):
   """After creation of new review notification should be created"""
   program = factories.ProgramFactory()
   resp, _ = self.generator.generate_object(
       all_models.Review,
       {
           "reviewable": {
               "type": program.type,
               "id": program.id,
           },
           "context": None,
           "notification_type": notification_type,
           "status": all_models.Review.STATES.UNREVIEWED,
           "access_control_list": build_reviewer_acl(),
       },
   )
   self.assertEqual(201, resp.status_code)
   self.assertEqual(
       expected_notifications, len(all_models.Notification.query.all())
   )
Exemplo n.º 7
0
    def test_create_review(self):
        """Create review via API, check that single relationship is created"""
        program = factories.ProgramFactory()
        program_id = program.id
        resp = self.api.post(
            all_models.Review,
            {
                "review": {
                    "reviewable": {
                        "type": program.type,
                        "id": program.id,
                    },
                    "context": None,
                    "notification_type": "email",
                    "status": all_models.Review.STATES.UNREVIEWED,
                    "access_control_list": build_reviewer_acl()
                },
            },
        )
        self.assertEqual(201, resp.status_code)
        review_id = resp.json["review"]["id"]
        review = all_models.Review.query.get(review_id)
        self.assertEqual(all_models.Review.STATES.UNREVIEWED, review.status)
        self.assertEqual(program.type, review.reviewable_type)
        self.assertEqual(program_id, review.reviewable_id)

        control_review_rel_count = all_models.Relationship.query.filter(
            all_models.Relationship.source_id == review.id,
            all_models.Relationship.source_type == review.type,
            all_models.Relationship.destination_id == program_id,
            all_models.Relationship.destination_type == program.type,
        ).union(
            all_models.Relationship.query.filter(
                all_models.Relationship.destination_id == review.id,
                all_models.Relationship.destination_type == review.type,
                all_models.Relationship.source_id == program_id,
                all_models.Relationship.source_type == program.type,
            )).count()
        self.assertEqual(1, control_review_rel_count)
Exemplo n.º 8
0
    def test_mapping(self):
        """Reviewable mapped to snapshotable via import
    Review -> UNREVIEWED
    Email Notification added
    """

        control = factories.ControlFactory(title="Test control")
        issue = factories.IssueFactory()
        issue_slug = issue.slug
        resp, review = self.generator.generate_object(
            all_models.Review,
            {
                "reviewable": {
                    "type": control.type,
                    "id": control.id,
                },
                "context": None,
                "notification_type":
                all_models.Review.NotificationTypes.EMAIL_TYPE,
                "status": all_models.Review.STATES.REVIEWED,
                "access_control_list": build_reviewer_acl(),
            },
        )
        control_id = control.id
        self.assertEqual(201, resp.status_code)
        import_data = OrderedDict([
            ("object_type", "Control"),
            ("Code*", control.slug),
            ("map:Issue", issue_slug),
        ])
        response = self.import_data(import_data)
        self._check_csv_response(response, {})
        control = all_models.Control.query.get(control_id)
        self.assertEqual(all_models.Review.STATES.UNREVIEWED,
                         control.review_status)
        notification = all_models.Notification.query.filter_by(
            object_id=review.id, object_type="Review").one()
        self.assertTrue(notification)
Exemplo n.º 9
0
  def test_reviewable_revisions(self):
    """Check that proper revisions are created"""
    program = factories.ProgramFactory()
    resp, review = self.generator.generate_object(
        all_models.Review,
        {
            "reviewable": {
                "type": program.type,
                "id": program.id,
            },
            "context": None,
            "status": all_models.Review.STATES.UNREVIEWED,
            "access_control_list": build_reviewer_acl(),
            "notification_type": all_models.Review.NotificationTypes.EMAIL_TYPE
        },
    )
    program_id = program.id
    reviewable = review.reviewable

    program_revisions = all_models.Revision.query.filter_by(
        resource_id=program_id,
        resource_type=program.type
    ).order_by(
        all_models.Revision.id,
    ).all()
    self.assertEquals(2, len(program_revisions))
    self.assertEquals(all_models.Review.STATES.UNREVIEWED,
                      program_revisions[0].content["review_status"])
    self.assertEquals(all_models.Review.STATES.UNREVIEWED,
                      program_revisions[1].content["review_status"])
    resp = self.api.put(
        review,
        {
            "status": all_models.Review.STATES.REVIEWED,
        },
    )
    self.assert200(resp)

    program_revisions = all_models.Revision.query.filter_by(
        resource_id=program_id,
        resource_type=program.type
    ).order_by(
        all_models.Revision.id,
    ).all()
    self.assertEquals(3, len(program_revisions))
    self.assertEquals(all_models.Review.STATES.REVIEWED,
                      program_revisions[2].content["review_status"])

    resp = self.api.put(
        reviewable,
        {
            "description": "some new description"
        }
    )
    self.assert200(resp)

    program_revisions = all_models.Revision.query.filter_by(
        resource_id=program_id,
        resource_type=program.type
    ).order_by(
        all_models.Revision.id,
    ).all()
    self.assertEquals(4, len(program_revisions))
    self.assertEquals(all_models.Review.STATES.UNREVIEWED,
                      program_revisions[3].content["review_status"])