def setup_basic_get_test(self, user, with_local_site, local_site_name):
        review_request = self.create_review_request(
            with_local_site=with_local_site, submitter=user, publish=True)
        review = self.create_review(review_request, user=user)
        comment = self.create_general_comment(review)

        return (get_review_general_comment_item_url(review, comment.pk,
                                                    local_site_name),
                general_comment_item_mimetype, comment)
    def test_delete_with_does_not_exist_error(self):
        """Testing the
        DELETE review-requests/<id>/reviews/<id>/general-comments/<id>/ API
        with Does Not Exist error
        """
        review_request = self.create_review_request(publish=True)
        review = self.create_review(review_request, user=self.user)

        self.api_delete(get_review_general_comment_item_url(review, 123),
                        expected_status=404)
    def test_delete_with_does_not_exist_error(self):
        """Testing the
        DELETE review-requests/<id>/reviews/<id>/general-comments/<id>/ API
        with Does Not Exist error
        """
        review_request = self.create_review_request(publish=True)
        review = self.create_review(review_request, user=self.user)

        self.api_delete(get_review_general_comment_item_url(review, 123),
                        expected_status=404)
    def setup_basic_delete_test(self, user, with_local_site, local_site_name):
        review_request = self.create_review_request(
            with_local_site=with_local_site,
            submitter=user,
            publish=True)
        review = self.create_review(review_request, user=user)
        comment = self.create_general_comment(review)

        return (get_review_general_comment_item_url(review, comment.pk,
                                                    local_site_name),
                [comment, review])
    def setup_basic_put_test(self, user, with_local_site, local_site_name,
                             put_valid_data):
        review_request = self.create_review_request(
            with_local_site=with_local_site, submitter=user, publish=True)
        review = self.create_review(review_request, user=user)
        comment = self.create_general_comment(review)

        return (get_review_general_comment_item_url(review, comment.pk,
                                                    local_site_name),
                general_comment_item_mimetype, {
                    'text': 'Test comment',
                }, comment, [])
    def test_put_issue_status_after_publish(self):
        """Testing the
        PUT review-requests/<id>/reviews/<id>/general-comments/<id>/ API
        with an issue, after review is published
        """
        comment, review, review_request = \
            self._create_general_review_with_issue(publish=True)

        rsp = self.api_put(get_review_general_comment_item_url(
            review, comment.pk), {'issue_status': 'resolved'},
                           expected_mimetype=general_comment_item_mimetype)
        self.assertEqual(rsp['stat'], 'ok')
        self.assertEqual(rsp['general_comment']['issue_status'], 'resolved')
    def test_put_with_issue(self):
        """Testing the
        PUT review-requests/<id>/reviews/<id>/general-comments/<id>/ API
        with an issue, removing issue_opened
        """
        comment, review, review_request = \
            self._create_general_review_with_issue()

        rsp = self.api_put(get_review_general_comment_item_url(
            review, comment.pk), {'issue_opened': False},
                           expected_mimetype=general_comment_item_mimetype)
        self.assertEqual(rsp['stat'], 'ok')
        self.assertFalse(rsp['general_comment']['issue_opened'])
    def test_put_issue_status_after_publish(self):
        """Testing the
        PUT review-requests/<id>/reviews/<id>/general-comments/<id>/ API
        with an issue, after review is published
        """
        comment, review, review_request = \
            self._create_general_review_with_issue(publish=True)

        rsp = self.api_put(
            get_review_general_comment_item_url(review, comment.pk),
            {'issue_status': 'resolved'},
            expected_mimetype=general_comment_item_mimetype)
        self.assertEqual(rsp['stat'], 'ok')
        self.assertEqual(rsp['general_comment']['issue_status'], 'resolved')
    def test_put_with_issue(self):
        """Testing the
        PUT review-requests/<id>/reviews/<id>/general-comments/<id>/ API
        with an issue, removing issue_opened
        """
        comment, review, review_request = \
            self._create_general_review_with_issue()

        rsp = self.api_put(
            get_review_general_comment_item_url(review, comment.pk),
            {'issue_opened': False},
            expected_mimetype=general_comment_item_mimetype)
        self.assertEqual(rsp['stat'], 'ok')
        self.assertFalse(rsp['general_comment']['issue_opened'])
    def setup_basic_put_test(self, user, with_local_site, local_site_name,
                             put_valid_data):
        review_request = self.create_review_request(
            with_local_site=with_local_site,
            submitter=user,
            publish=True)
        review = self.create_review(review_request, user=user)
        comment = self.create_general_comment(review)

        return (get_review_general_comment_item_url(review, comment.pk,
                                                    local_site_name),
                general_comment_item_mimetype,
                {
                    'text': 'Test comment',
                },
                comment,
                [])
    def test_put_issue_status_before_publish(self):
        """Testing the
        PUT review-requests/<id>/reviews/<id>/general-comments/<id> API
        with an issue, before review is published
        """
        comment, review, review_request = \
            self._create_general_review_with_issue()

        # The issue_status should not be able to be changed while the review is
        # unpublished.
        rsp = self.api_put(get_review_general_comment_item_url(
            review, comment.pk), {'issue_status': 'resolved'},
                           expected_mimetype=general_comment_item_mimetype)

        self.assertEqual(rsp['stat'], 'ok')

        # The issue_status should still be "open"
        self.assertEqual(rsp['general_comment']['issue_status'], 'open')
    def test_put_issue_status_before_publish(self):
        """Testing the
        PUT review-requests/<id>/reviews/<id>/general-comments/<id> API
        with an issue, before review is published
        """
        comment, review, review_request = \
            self._create_general_review_with_issue()

        # The issue_status should not be able to be changed while the review is
        # unpublished.
        rsp = self.api_put(
            get_review_general_comment_item_url(review, comment.pk),
            {'issue_status': 'resolved'},
            expected_mimetype=general_comment_item_mimetype)

        self.assertEqual(rsp['stat'], 'ok')

        # The issue_status should still be "open"
        self.assertEqual(rsp['general_comment']['issue_status'], 'open')
    def test_put_issue_status_by_issue_creator(self):
        """Testing the
        PUT review-requests/<id>/reviews/<id>/general-comments/<id>/ API
        permissions for issue creator
        """
        comment, review, review_request = \
            self._create_general_review_with_issue(publish=True)

        # Change the owner of the review request so that it's not owned by
        # self.user
        review_request.submitter = User.objects.get(username='******')
        review_request.save()

        # The review/comment (and therefore issue) is still owned by self.user,
        # so we should be able to change the issue status.
        rsp = self.api_put(get_review_general_comment_item_url(
            review, comment.pk), {'issue_status': 'dropped'},
                           expected_mimetype=general_comment_item_mimetype)
        self.assertEqual(rsp['stat'], 'ok')
        self.assertEqual(rsp['general_comment']['issue_status'], 'dropped')
    def test_put_issue_status_by_issue_creator(self):
        """Testing the
        PUT review-requests/<id>/reviews/<id>/general-comments/<id>/ API
        permissions for issue creator
        """
        comment, review, review_request = \
            self._create_general_review_with_issue(publish=True)

        # Change the owner of the review request so that it's not owned by
        # self.user
        review_request.submitter = User.objects.get(username='******')
        review_request.save()

        # The review/comment (and therefore issue) is still owned by self.user,
        # so we should be able to change the issue status.
        rsp = self.api_put(
            get_review_general_comment_item_url(review, comment.pk),
            {'issue_status': 'dropped'},
            expected_mimetype=general_comment_item_mimetype)
        self.assertEqual(rsp['stat'], 'ok')
        self.assertEqual(rsp['general_comment']['issue_status'], 'dropped')
    def test_put_issue_status_by_uninvolved_user(self):
        """Testing the
        PUT review-requests/<id>/reviews/<id>/general-comments/<id>/ API
        permissions for an uninvolved user
        """
        comment, review, review_request = \
            self._create_general_review_with_issue(publish=True)

        # Change the owner of the review request and review so that they're not
        # owned by self.user.
        new_owner = User.objects.get(username='******')
        review_request.submitter = new_owner
        review_request.save()
        review.user = new_owner
        review.save()

        rsp = self.api_put(get_review_general_comment_item_url(
            review, comment.pk), {'issue_status': 'dropped'},
                           expected_status=403)
        self.assertEqual(rsp['stat'], 'fail')
        self.assertEqual(rsp['err']['code'], PERMISSION_DENIED.code)
    def test_put_issue_status_by_uninvolved_user(self):
        """Testing the
        PUT review-requests/<id>/reviews/<id>/general-comments/<id>/ API
        permissions for an uninvolved user
        """
        comment, review, review_request = \
            self._create_general_review_with_issue(publish=True)

        # Change the owner of the review request and review so that they're not
        # owned by self.user.
        new_owner = User.objects.get(username='******')
        review_request.submitter = new_owner
        review_request.save()
        review.user = new_owner
        review.save()

        rsp = self.api_put(
            get_review_general_comment_item_url(review, comment.pk),
            {'issue_status': 'dropped'},
            expected_status=403)
        self.assertEqual(rsp['stat'], 'fail')
        self.assertEqual(rsp['err']['code'], PERMISSION_DENIED.code)
    def setup_review_request_child_test(self, review_request):
        review = self.create_review(review_request, user=self.user)
        comment = self.create_general_comment(review)

        return (get_review_general_comment_item_url(review, comment.pk),
                general_comment_item_mimetype)
    def setup_review_request_child_test(self, review_request):
        review = self.create_review(review_request, user=self.user)
        comment = self.create_general_comment(review)

        return (get_review_general_comment_item_url(review, comment.pk),
                general_comment_item_mimetype)