Fix reply line number mismatch with range endLine Ensure that when creating a reply to a comment that has a range, the reply's line number is set to the range's end line. This prevents HTTP 400 validation errors from the backend when the parent comment has a mismatched line and range. Bug: Google b/530348226 Release-Notes: Fix backend validation error when replying to some comments with ranges. TAG=agy CONV=dbd1a853-fed6-4eff-9f7f-e2b143c427c1 Change-Id: Ieebe384b5daad1bf4db166b205042024689e4968
diff --git a/polygerrit-ui/app/utils/comment-util.ts b/polygerrit-ui/app/utils/comment-util.ts index 2419783..ef08cf0 100644 --- a/polygerrit-ui/app/utils/comment-util.ts +++ b/polygerrit-ui/app/utils/comment-util.ts
@@ -202,7 +202,7 @@ path: replyingTo.path, patch_set: replyingTo.patch_set, side: replyingTo.side, - line: replyingTo.line, + line: replyingTo.range ? replyingTo.range.end_line : replyingTo.line, range: replyingTo.range, parent: replyingTo.parent, in_reply_to: replyingTo.id,
diff --git a/polygerrit-ui/app/utils/comment-util_test.ts b/polygerrit-ui/app/utils/comment-util_test.ts index e8fe606..abda42c 100644 --- a/polygerrit-ui/app/utils/comment-util_test.ts +++ b/polygerrit-ui/app/utils/comment-util_test.ts
@@ -8,6 +8,7 @@ computeDisplayLine, createCommentThreads, createNew, + createNewReply, createUserFixSuggestion, getContentInCommentRange, getMentionedThreads, @@ -748,4 +749,36 @@ assert.equal(computeDisplayLine({}), ''); }); }); + + suite('createNewReply', () => { + test('standard comment reply (no range)', () => { + const replyingTo = { + ...createComment(), + id: 'parent_id' as UrlEncodedCommentId, + line: 5, + }; + const reply = createNewReply(replyingTo, 'reply message', false); + assert.equal(reply.line, 5); + assert.isUndefined(reply.range); + assert.equal(reply.in_reply_to, 'parent_id'); + }); + + test('reply to comment with range (mismatched line)', () => { + const replyingTo = { + ...createComment(), + id: 'parent_id' as UrlEncodedCommentId, + line: 1, + range: { + start_line: 1, + start_character: 0, + end_line: 2, + end_character: 5, + }, + }; + const reply = createNewReply(replyingTo, 'reply message', false); + assert.equal(reply.line, 2); // Should match range.end_line, not replyingTo.line + assert.deepEqual(reply.range, replyingTo.range); + assert.equal(reply.in_reply_to, 'parent_id'); + }); + }); });