Ejemplo n.º 1
0
    def _postNewScreenshotComment(self, review_request, review_id, screenshot,
                                  comment_text, x, y, w, h, issue_opened=None,
                                  issue_status=None):
        """Creates a screenshot comment and returns the payload response."""
        if review_request.local_site:
            local_site_name = review_request.local_site.name
        else:
            local_site_name = None

        post_data = {
            'screenshot_id': screenshot.id,
            'text': comment_text,
            'x': x,
            'y': y,
            'w': w,
            'h': h,
        }

        if issue_opened is not None:
            post_data['issue_opened'] = issue_opened

        if issue_status is not None:
            post_data['issue_status'] = issue_status

        review = Review.objects.get(pk=review_id)
        rsp = self.api_post(
            get_review_screenshot_comment_list_url(review, local_site_name),
            post_data,
            expected_mimetype=screenshot_comment_item_mimetype)

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

        return rsp
    def test_delete_screenshot_comment_with_local_site(self):
        """Testing the DELETE review-requests/<id>/reviews/<id>/screenshot-comments/<id> API with a local site"""
        comment_text = 'This is a test comment.'
        x, y, w, h = (2, 2, 10, 10)

        user = self._login_user(local_site=True)

        review_request = self.create_review_request(with_local_site=True,
                                                    publish=True)
        screenshot = self.create_screenshot(review_request)
        review = self.create_review(review_request, user=user)

        rsp = self._postNewScreenshotComment(review_request, review.id,
                                             screenshot, comment_text,
                                             x, y, w, h)

        self.apiDelete(rsp['screenshot_comment']['links']['self']['href'])

        rsp = self.apiGet(
            get_review_screenshot_comment_list_url(review,
                                                   self.local_site_name),
            expected_mimetype=screenshot_comment_list_mimetype)
        self.assertEqual(rsp['stat'], 'ok')
        self.assertTrue('screenshot_comments' in rsp)
        self.assertEqual(len(rsp['screenshot_comments']), 0)
    def test_post_with_extra_fields(self):
        """Testing the
        POST review-requests/<id>/reviews/<id>/screenshots-comments/ API
        with extra fields
        """
        comment_text = "This is a test comment."
        extra_fields = {"extra_data.foo": "123", "extra_data.bar": "456", "extra_data.baz": "", "ignored": "foo"}

        # Post the review request.
        review_request = self.create_review_request(submitter=self.user, publish=True)
        screenshot = self.create_screenshot(review_request)

        # Post the review.
        review = self.create_review(review_request, user=self.user)

        rsp = self.apiPost(
            get_review_screenshot_comment_list_url(review),
            dict(
                {"screenshot_id": screenshot.pk, "text": comment_text, "x": 5, "y": 5, "w": 10, "h": 10}, **extra_fields
            ),
            expected_mimetype=screenshot_comment_item_mimetype,
        )

        comment = ScreenshotComment.objects.get(pk=rsp["screenshot_comment"]["id"])

        self.assertTrue("foo" in comment.extra_data)
        self.assertTrue("bar" in comment.extra_data)
        self.assertFalse("baz" in comment.extra_data)
        self.assertFalse("ignored" in comment.extra_data)
        self.assertEqual(comment.extra_data["foo"], extra_fields["extra_data.foo"])
        self.assertEqual(comment.extra_data["bar"], extra_fields["extra_data.bar"])
    def setup_basic_post_test(self, user, with_local_site, local_site_name, post_valid_data):
        review_request = self.create_review_request(with_local_site=with_local_site, submitter=user, publish=True)
        screenshot = self.create_screenshot(review_request)
        review = self.create_review(review_request, user=user)

        return (
            get_review_screenshot_comment_list_url(review, local_site_name),
            screenshot_comment_item_mimetype,
            {"screenshot_id": screenshot.pk, "text": "Test comment", "x": 2, "y": 2, "w": 10, "h": 10},
            [review, screenshot],
        )
    def setup_basic_get_test(self, user, with_local_site, local_site_name,
                             populate_items):
        review_request = self.create_review_request(
            with_local_site=with_local_site, submitter=user, publish=True)
        screenshot = self.create_screenshot(review_request)
        review = self.create_review(review_request, user=user)

        if populate_items:
            items = [self.create_screenshot_comment(review, screenshot)]
        else:
            items = []

        return (get_review_screenshot_comment_list_url(review,
                                                       local_site_name),
                screenshot_comment_list_mimetype, items)
    def setup_basic_get_test(self, user, with_local_site, local_site_name, populate_items):
        review_request = self.create_review_request(with_local_site=with_local_site, submitter=user, publish=True)
        screenshot = self.create_screenshot(review_request)
        review = self.create_review(review_request, user=user)

        if populate_items:
            items = [self.create_screenshot_comment(review, screenshot)]
        else:
            items = []

        return (
            get_review_screenshot_comment_list_url(review, local_site_name),
            screenshot_comment_list_mimetype,
            items,
        )
    def test_post_screenshot_comment_with_issue(self):
        """Testing the POST review-requests/<id>/reviews/<id>/screenshot-comments/ API with an issue"""
        comment_text = "Test screenshot comment with an opened issue"
        rsp, review, review_request = \
            self._create_screenshot_review_with_issue(
                publish=False, comment_text=comment_text)

        rsp = self.apiGet(
            get_review_screenshot_comment_list_url(review),
            expected_mimetype=screenshot_comment_list_mimetype)
        self.assertEqual(rsp['stat'], 'ok')
        self.assertTrue('screenshot_comments' in rsp)
        self.assertEqual(len(rsp['screenshot_comments']), 1)
        self.assertEqual(rsp['screenshot_comments'][0]['text'], comment_text)
        self.assertTrue(rsp['screenshot_comments'][0]['issue_opened'])
    def setup_basic_post_test(self, user, with_local_site, local_site_name,
                              post_valid_data):
        review_request = self.create_review_request(
            with_local_site=with_local_site, submitter=user, publish=True)
        screenshot = self.create_screenshot(review_request)
        review = self.create_review(review_request, user=user)

        return (get_review_screenshot_comment_list_url(review,
                                                       local_site_name),
                screenshot_comment_item_mimetype, {
                    'screenshot_id': screenshot.pk,
                    'text': 'Test comment',
                    'x': 2,
                    'y': 2,
                    'w': 10,
                    'h': 10,
                }, [review, screenshot])
    def test_post_with_issue(self):
        """Testing the
        POST review-requests/<id>/reviews/<id>/screenshot-comments/ API
        with an issue
        """
        comment_text = "Test screenshot comment with an opened issue"
        comment, review, review_request = self._create_screenshot_review_with_issue(
            publish=False, comment_text=comment_text
        )

        rsp = self.apiGet(
            get_review_screenshot_comment_list_url(review), expected_mimetype=screenshot_comment_list_mimetype
        )
        self.assertEqual(rsp["stat"], "ok")
        self.assertTrue("screenshot_comments" in rsp)
        self.assertEqual(len(rsp["screenshot_comments"]), 1)
        self.assertEqual(rsp["screenshot_comments"][0]["text"], comment_text)
        self.assertTrue(rsp["screenshot_comments"][0]["issue_opened"])
    def test_post_with_extra_fields(self):
        """Testing the
        POST review-requests/<id>/reviews/<id>/screenshots-comments/ API
        with extra fields
        """
        comment_text = "This is a test comment."
        extra_fields = {
            'extra_data.foo': '123',
            'extra_data.bar': '456',
            'extra_data.baz': '',
            'ignored': 'foo',
        }

        # Post the review request.
        review_request = self.create_review_request(submitter=self.user,
                                                    publish=True)
        screenshot = self.create_screenshot(review_request)

        # Post the review.
        review = self.create_review(review_request, user=self.user)

        rsp = self.apiPost(
            get_review_screenshot_comment_list_url(review),
            dict({
                'screenshot_id': screenshot.pk,
                'text': comment_text,
                'x': 5,
                'y': 5,
                'w': 10,
                'h': 10,
            }, **extra_fields),
            expected_mimetype=screenshot_comment_item_mimetype)

        comment = ScreenshotComment.objects.get(
            pk=rsp['screenshot_comment']['id'])

        self.assertTrue('foo' in comment.extra_data)
        self.assertTrue('bar' in comment.extra_data)
        self.assertFalse('baz' in comment.extra_data)
        self.assertFalse('ignored' in comment.extra_data)
        self.assertEqual(comment.extra_data['foo'],
                         extra_fields['extra_data.foo'])
        self.assertEqual(comment.extra_data['bar'],
                         extra_fields['extra_data.bar'])
    def test_post_with_extra_fields(self):
        """Testing the
        POST review-requests/<id>/reviews/<id>/screenshots-comments/ API
        with extra fields
        """
        comment_text = "This is a test comment."
        extra_fields = {
            'extra_data.foo': '123',
            'extra_data.bar': '456',
            'extra_data.baz': '',
            'ignored': 'foo',
        }

        # Post the review request.
        review_request = self.create_review_request(submitter=self.user,
                                                    publish=True)
        screenshot = self.create_screenshot(review_request)

        # Post the review.
        review = self.create_review(review_request, user=self.user)

        rsp = self.apiPost(get_review_screenshot_comment_list_url(review),
                           dict(
                               {
                                   'screenshot_id': screenshot.pk,
                                   'text': comment_text,
                                   'x': 5,
                                   'y': 5,
                                   'w': 10,
                                   'h': 10,
                               }, **extra_fields),
                           expected_mimetype=screenshot_comment_item_mimetype)

        comment = ScreenshotComment.objects.get(
            pk=rsp['screenshot_comment']['id'])

        self.assertTrue('foo' in comment.extra_data)
        self.assertTrue('bar' in comment.extra_data)
        self.assertFalse('baz' in comment.extra_data)
        self.assertFalse('ignored' in comment.extra_data)
        self.assertEqual(comment.extra_data['foo'],
                         extra_fields['extra_data.foo'])
        self.assertEqual(comment.extra_data['bar'],
                         extra_fields['extra_data.bar'])
    def test_delete(self):
        """Testing the
        DELETE review-requests/<id>/reviews/<id>/screenshot-comments/<id>/ API
        """
        comment_text = "This is a test comment."
        x, y, w, h = (2, 2, 10, 10)

        review_request = self.create_review_request(publish=True)
        screenshot = self.create_screenshot(review_request)
        review = self.create_review(review_request, user=self.user)
        comment = self.create_screenshot_comment(review, screenshot, comment_text, x, y, w, h)

        self.apiDelete(get_review_screenshot_comment_item_url(review, comment.pk))

        rsp = self.apiGet(
            get_review_screenshot_comment_list_url(review), expected_mimetype=screenshot_comment_list_mimetype
        )
        self.assertEqual(rsp["stat"], "ok")
        self.assertTrue("screenshot_comments" in rsp)
        self.assertEqual(len(rsp["screenshot_comments"]), 0)
    def test_delete_screenshot_comment(self):
        """Testing the DELETE review-requests/<id>/reviews/<id>/screenshot-comments/<id>/ API"""
        comment_text = "This is a test comment."
        x, y, w, h = (2, 2, 10, 10)

        review_request = self.create_review_request(publish=True)
        screenshot = self.create_screenshot(review_request)
        review = self.create_review(review_request, user=self.user)

        rsp = self._postNewScreenshotComment(review_request, review.id,
                                             screenshot, comment_text,
                                             x, y, w, h)

        self.apiDelete(rsp['screenshot_comment']['links']['self']['href'])

        rsp = self.apiGet(
            get_review_screenshot_comment_list_url(review),
            expected_mimetype=screenshot_comment_list_mimetype)
        self.assertEqual(rsp['stat'], 'ok')
        self.assertTrue('screenshot_comments' in rsp)
        self.assertEqual(len(rsp['screenshot_comments']), 0)
    def test_post_screenshot_comments_with_site_no_access(self):
        """Testing the POST review-requests/<id>/reviews/<id>/screenshot-comments/ API with a local site and Permission Denied error"""
        x, y, w, h = (2, 2, 10, 10)

        user = self._login_user(local_site=True)

        review_request = self.create_review_request(with_local_site=True,
                                                    create_repository=True,
                                                    publish=True)
        screenshot = self.create_screenshot(review_request)
        review = self.create_review(review_request, user=user)

        self._login_user()

        rsp = self.apiPost(
            get_review_screenshot_comment_list_url(review,
                                                   self.local_site_name),
            {'screenshot_id': screenshot.id},
            expected_status=403)
        self.assertEqual(rsp['stat'], 'fail')
        self.assertEqual(rsp['err']['code'], PERMISSION_DENIED.code)
    def setup_basic_post_test(self, user, with_local_site, local_site_name,
                              post_valid_data):
        review_request = self.create_review_request(
            with_local_site=with_local_site,
            submitter=user,
            publish=True)
        screenshot = self.create_screenshot(review_request)
        review = self.create_review(review_request, user=user)

        return (get_review_screenshot_comment_list_url(review,
                                                       local_site_name),
                screenshot_comment_item_mimetype,
                {
                    'screenshot_id': screenshot.pk,
                    'text': 'Test comment',
                    'x': 2,
                    'y': 2,
                    'w': 10,
                    'h': 10,
                },
                [review, screenshot])
    def test_delete_with_local_site(self):
        """Testing the
        DELETE review-requests/<id>/reviews/<id>/screenshot-comments/<id> API
        with a local site
        """
        comment_text = "This is a test comment."
        x, y, w, h = (2, 2, 10, 10)

        user = self._login_user(local_site=True)

        review_request = self.create_review_request(with_local_site=True, publish=True)
        screenshot = self.create_screenshot(review_request)
        review = self.create_review(review_request, user=user)
        comment = self.create_screenshot_comment(review, screenshot, comment_text, x, y, w, h)

        self.apiDelete(get_review_screenshot_comment_item_url(review, comment.pk, self.local_site_name))

        rsp = self.apiGet(
            get_review_screenshot_comment_list_url(review, self.local_site_name),
            expected_mimetype=screenshot_comment_list_mimetype,
        )
        self.assertEqual(rsp["stat"], "ok")
        self.assertTrue("screenshot_comments" in rsp)
        self.assertEqual(len(rsp["screenshot_comments"]), 0)
    def setup_review_request_child_test(self, review_request):
        self.create_screenshot(review_request)
        review = self.create_review(review_request, user=self.user)

        return (get_review_screenshot_comment_list_url(review),
                screenshot_comment_list_mimetype)
    def setup_review_request_child_test(self, review_request):
        self.create_screenshot(review_request)
        review = self.create_review(review_request, user=self.user)

        return (get_review_screenshot_comment_list_url(review),
                screenshot_comment_list_mimetype)