def test_delete_with_local_site_no_access(self): """Testing the DELETE review-requests/<id>/reviews/<id>/screenshot-comments/<id> API with a local site and Permission Denied error """ 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)) self._login_user() rsp = self.apiDelete( get_review_screenshot_comment_item_url(review, comment.pk, self.local_site_name), 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): screenshot = self.create_screenshot(review_request) review = self.create_review(review_request, user=self.user) comment = self.create_screenshot_comment(review, screenshot) return (get_review_screenshot_comment_item_url(review, comment.pk), screenshot_comment_item_mimetype)
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) screenshot = self.create_screenshot(review_request) review = self.create_review(review_request, user=user) comment = self.create_screenshot_comment(review, screenshot) return (get_review_screenshot_comment_item_url(review, comment.pk, local_site_name), [comment, review])
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 test_put_with_extra_fields(self): """Testing the PUT review-requests/<id>/reviews/<id>/screenshot-comments/<id>/ API with extra fields """ extra_fields = {"extra_data.foo": "abc", "extra_data.bar": "", "ignored": "foo"} comment_text = "This is a test comment." review_request = self.create_review_request(submitter=self.user, publish=True) screenshot = self.create_screenshot(review_request) review = self.create_review(review_request, user=self.user) comment = self.create_screenshot_comment( review, screenshot, text=comment_text, extra_fields={"foo": "123", "bar": "456"} ) rsp = self.apiPut( get_review_screenshot_comment_item_url(review, comment.pk), extra_fields, expected_mimetype=screenshot_comment_item_mimetype, ) self.assertEqual(rsp["stat"], "ok") comment = ScreenshotComment.objects.get(pk=rsp["screenshot_comment"]["id"]) self.assertTrue("foo" in comment.extra_data) self.assertFalse("bar" in comment.extra_data) self.assertFalse("ignored" in comment.extra_data) self.assertEqual(len(comment.extra_data), 1) self.assertEqual(comment.extra_data["foo"], extra_fields["extra_data.foo"])
def test_delete_screenshot_comment_with_does_not_exist_error(self): """Testing the DELETE review-requests/<id>/reviews/<id>/screenshot-comments/<id>/ API with Does Not Exist error""" x, y, w, h = (2, 2, 10, 10) review_request = self.create_review_request(publish=True) self.create_screenshot(review_request) review = self.create_review(review_request, user=self.user) self.apiDelete(get_review_screenshot_comment_item_url(review, 123), expected_status=404)
def test_put_deleted_screenshot_comment_issue_status(self): """Testing the PUT review-requests/<id>/reviews/<id>/screenshot-comments/<id> API with an issue and a deleted screenshot """ comment_text = "Test screenshot comment with an opened issue" x, y, w, h = (2, 2, 10, 10) review_request = self.create_review_request(publish=True, submitter=self.user, target_people=[self.user]) 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, issue_opened=True) # First, let's ensure that the user that has created the comment # cannot alter the issue_status while the review is unpublished. rsp = self.api_put( get_review_screenshot_comment_item_url(review, comment.pk), {'issue_status': 'resolved'}, expected_mimetype=screenshot_comment_item_mimetype) self.assertEqual(rsp['stat'], 'ok') # The issue_status should still be "open" self.assertEqual(rsp['screenshot_comment']['issue_status'], 'open') # Next, let's publish the review, and try altering the issue_status. # This should be allowed, since the review request was made by the # current user. review.public = True review.save() rsp = self.api_put( rsp['screenshot_comment']['links']['self']['href'], {'issue_status': 'resolved'}, expected_mimetype=screenshot_comment_item_mimetype) self.assertEqual(rsp['stat'], 'ok') self.assertEqual(rsp['screenshot_comment']['issue_status'], 'resolved') # Delete the screenshot. self._delete_screenshot(review_request, screenshot) review_request.publish(review_request.submitter) # Try altering the issue_status. This should be allowed. rsp = self.api_put( rsp['screenshot_comment']['links']['self']['href'], {'issue_status': 'open'}, expected_mimetype=screenshot_comment_item_mimetype) self.assertEqual(rsp['stat'], 'ok') self.assertEqual(rsp['screenshot_comment']['issue_status'], 'open')
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) screenshot = self.create_screenshot(review_request) review = self.create_review(review_request, user=user) comment = self.create_screenshot_comment(review, screenshot) return ( get_review_screenshot_comment_item_url(review, comment.pk, local_site_name), screenshot_comment_item_mimetype, {"text": "Test comment"}, comment, [], )
def test_put_issue_status_after_publish(self): """Testing the PUT review-requests/<id>/reviews/<id>/screenshot-comments/<id>/ API with an issue, after review is published """ comment, review, review_request = self._create_screenshot_review_with_issue(publish=True) rsp = self.apiPut( get_review_screenshot_comment_item_url(review, comment.pk), {"issue_status": "resolved"}, expected_mimetype=screenshot_comment_item_mimetype, ) self.assertEqual(rsp["stat"], "ok") self.assertEqual(rsp["screenshot_comment"]["issue_status"], "resolved")
def test_put_with_issue(self): """Testing the PUT review-requests/<id>/reviews/<id>/screenshot-comments/<id>/ API with an issue, removing issue_opened """ comment, review, review_request = self._create_screenshot_review_with_issue() rsp = self.apiPut( get_review_screenshot_comment_item_url(review, comment.pk), {"issue_opened": False}, expected_mimetype=screenshot_comment_item_mimetype, ) self.assertEqual(rsp["stat"], "ok") self.assertFalse(rsp["screenshot_comment"]["issue_opened"])
def test_put_issue_status_after_publish(self): """Testing the PUT review-requests/<id>/reviews/<id>/screenshot-comments/<id>/ API with an issue, after review is published """ comment, review, review_request = \ self._create_screenshot_review_with_issue(publish=True) rsp = self.apiPut( get_review_screenshot_comment_item_url(review, comment.pk), {'issue_status': 'resolved'}, expected_mimetype=screenshot_comment_item_mimetype) self.assertEqual(rsp['stat'], 'ok') self.assertEqual(rsp['screenshot_comment']['issue_status'], 'resolved')
def test_put_with_issue(self): """Testing the PUT review-requests/<id>/reviews/<id>/screenshot-comments/<id>/ API with an issue, removing issue_opened """ comment, review, review_request = \ self._create_screenshot_review_with_issue() rsp = self.apiPut( get_review_screenshot_comment_item_url(review, comment.pk), {'issue_opened': False}, expected_mimetype=screenshot_comment_item_mimetype) self.assertEqual(rsp['stat'], 'ok') self.assertFalse(rsp['screenshot_comment']['issue_opened'])
def test_put_issue_status_before_publish(self): """Testing the PUT review-requests/<id>/reviews/<id>/screenshot-comments/<id> API with an issue, before review is published """ comment, review, review_request = \ self._create_screenshot_review_with_issue() # The issue_status should not be able to be changed while the review is # unpublished. rsp = self.apiPut( get_review_screenshot_comment_item_url(review, comment.pk), {'issue_status': 'resolved'}, expected_mimetype=screenshot_comment_item_mimetype) self.assertEqual(rsp['stat'], 'ok') # The issue_status should still be "open" self.assertEqual(rsp['screenshot_comment']['issue_status'], 'open')
def test_put_issue_status_by_uninvolved_user(self): """Testing the PUT review-requests/<id>/reviews/<id>/screenshot-comments/<id>/ API permissions for an uninvolved user """ comment, review, review_request = self._create_screenshot_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.apiPut( get_review_screenshot_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_issue_creator(self): """Testing the PUT review-requests/<id>/reviews/<id>/screenshot-comments/<id>/ API permissions for issue creator """ comment, review, review_request = \ self._create_screenshot_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_screenshot_comment_item_url( review, comment.pk), {'issue_status': 'dropped'}, expected_mimetype=screenshot_comment_item_mimetype) self.assertEqual(rsp['stat'], 'ok') self.assertEqual(rsp['screenshot_comment']['issue_status'], 'dropped')
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_put_with_extra_fields(self): """Testing the PUT review-requests/<id>/reviews/<id>/screenshot-comments/<id>/ API with extra fields """ extra_fields = { 'extra_data.foo': 'abc', 'extra_data.bar': '', 'ignored': 'foo', } comment_text = "This is a test comment." review_request = self.create_review_request(submitter=self.user, publish=True) screenshot = self.create_screenshot(review_request) review = self.create_review(review_request, user=self.user) comment = self.create_screenshot_comment( review, screenshot, text=comment_text, extra_fields={ 'foo': '123', 'bar': '456', }) rsp = self.apiPut( get_review_screenshot_comment_item_url(review, comment.pk), extra_fields, expected_mimetype=screenshot_comment_item_mimetype) self.assertEqual(rsp['stat'], 'ok') comment = ScreenshotComment.objects.get( pk=rsp['screenshot_comment']['id']) self.assertTrue('foo' in comment.extra_data) self.assertFalse('bar' in comment.extra_data) self.assertFalse('ignored' in comment.extra_data) self.assertEqual(len(comment.extra_data.keys()), 1) self.assertEqual(comment.extra_data['foo'], extra_fields['extra_data.foo'])
def test_put_issue_status_by_issue_creator(self): """Testing the PUT review-requests/<id>/reviews/<id>/screenshot-comments/<id>/ API permissions for issue creator """ comment, review, review_request = \ self._create_screenshot_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.apiPut( get_review_screenshot_comment_item_url(review, comment.pk), {'issue_status': 'dropped'}, expected_mimetype=screenshot_comment_item_mimetype) self.assertEqual(rsp['stat'], 'ok') self.assertEqual(rsp['screenshot_comment']['issue_status'], 'dropped')
def test_put_issue_status_by_uninvolved_user(self): """Testing the PUT review-requests/<id>/reviews/<id>/screenshot-comments/<id>/ API permissions for an uninvolved user """ comment, review, review_request = \ self._create_screenshot_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_screenshot_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_with_extra_fields(self): """Testing the PUT review-requests/<id>/reviews/<id>/screenshot-comments/<id>/ API with extra fields """ extra_fields = { 'extra_data.foo': 'abc', 'extra_data.bar': '', 'ignored': 'foo', } comment_text = "This is a test comment." review_request = self.create_review_request(submitter=self.user, publish=True) screenshot = self.create_screenshot(review_request) review = self.create_review(review_request, user=self.user) comment = self.create_screenshot_comment(review, screenshot, text=comment_text, extra_fields={ 'foo': '123', 'bar': '456', }) rsp = self.apiPut(get_review_screenshot_comment_item_url( review, comment.pk), extra_fields, expected_mimetype=screenshot_comment_item_mimetype) self.assertEqual(rsp['stat'], 'ok') comment = ScreenshotComment.objects.get( pk=rsp['screenshot_comment']['id']) self.assertTrue('foo' in comment.extra_data) self.assertFalse('bar' in comment.extra_data) self.assertFalse('ignored' in comment.extra_data) self.assertEqual(len(comment.extra_data), 1) self.assertEqual(comment.extra_data['foo'], extra_fields['extra_data.foo'])