[verified] Fix native review PR Issue counter projection
This commit is contained in:
@@ -24,7 +24,8 @@ class SourceIssueReferenceProjectionTests(unittest.TestCase):
|
||||
'pull_request': {'merged': False, 'html_url': url}}
|
||||
before['pr_issue'] = pr_issue
|
||||
after['pr_issue'] = copy.deepcopy(pr_issue)
|
||||
after['pr_issue'].update(comments=3, updated_at=review['submitted_at'])
|
||||
# Native top-level reviews change review_comments, not ordinary comments.
|
||||
after['pr_issue'].update(updated_at=review['submitted_at'])
|
||||
event = after['timeline'][0]
|
||||
event['html_url'] = url + '#issuecomment-101'
|
||||
event['issue_url'] = ''
|
||||
@@ -57,6 +58,50 @@ class SourceIssueReferenceProjectionTests(unittest.TestCase):
|
||||
with self.assertRaisesRegex(fixture.mod.ValidationError, 'timestamp projection mismatch'):
|
||||
fixture.verify_fixture(before, after, review, result, paths, self.contract())
|
||||
|
||||
def test_pr_issue_comments_stay_unchanged_while_review_count_increments(self):
|
||||
for count in (0, 2):
|
||||
before, after, review, result, paths = self.snapshots()
|
||||
before['pr_issue']['comments'] = after['pr_issue']['comments'] = count
|
||||
after['issue_timeline'][-1]['ref_issue'] = copy.deepcopy(after['pr_issue'])
|
||||
with self.subTest(count=count):
|
||||
fixture.verify_fixture(before, after, review, result, paths, self.contract())
|
||||
self.assertEqual(after['pr_issue']['comments'], before['pr_issue']['comments'])
|
||||
self.assertEqual(after['pr']['review_comments'], before['pr']['review_comments'] + 1)
|
||||
|
||||
def test_pr_issue_comment_changes_and_invalid_counts_are_rejected(self):
|
||||
baseline = self.snapshots()
|
||||
fixture.verify_fixture(*baseline, self.contract())
|
||||
# Reject both directions, including the old erroneous +1 projection.
|
||||
for value in (1, 3, 4, -1, True, '2', None):
|
||||
args = copy.deepcopy(baseline)
|
||||
args[1]['pr_issue']['comments'] = value
|
||||
args[1]['issue_timeline'][-1]['ref_issue'] = copy.deepcopy(args[1]['pr_issue'])
|
||||
with self.subTest(after=value), self.assertRaisesRegex(
|
||||
fixture.mod.ValidationError, 'PR Issue count projection mismatch'):
|
||||
fixture.verify_fixture(*args, self.contract())
|
||||
for value in (-1, True, '2', None):
|
||||
args = copy.deepcopy(baseline)
|
||||
args[0]['pr_issue']['comments'] = args[1]['pr_issue']['comments'] = value
|
||||
args[1]['issue_timeline'][-1]['ref_issue'] = copy.deepcopy(args[1]['pr_issue'])
|
||||
with self.subTest(both=value), self.assertRaisesRegex(
|
||||
fixture.mod.ValidationError, 'PR Issue count projection mismatch'):
|
||||
fixture.verify_fixture(*args, self.contract())
|
||||
for side in (0, 1):
|
||||
args = copy.deepcopy(baseline)
|
||||
del args[side]['pr_issue']['comments']
|
||||
with self.subTest(missing=side), self.assertRaises(fixture.mod.ValidationError):
|
||||
fixture.verify_fixture(*args, self.contract())
|
||||
|
||||
def test_source_reference_does_not_relax_pr_review_comment_increment(self):
|
||||
baseline = self.snapshots()
|
||||
fixture.verify_fixture(*baseline, self.contract())
|
||||
for value in (0, 2, -1, True, '1', None):
|
||||
args = copy.deepcopy(baseline)
|
||||
args[1]['pr']['review_comments'] = value
|
||||
with self.subTest(after=value), self.assertRaisesRegex(
|
||||
fixture.mod.ValidationError, 'review count projection mismatch'):
|
||||
fixture.verify_fixture(*args, self.contract())
|
||||
|
||||
def test_wrong_reference_identity_payload_or_timestamp_is_rejected(self):
|
||||
baseline = self.snapshots()
|
||||
fixture.verify_fixture(*baseline, self.contract())
|
||||
|
||||
Reference in New Issue
Block a user