From 5867c00fafa3b0a5c0d8f1c68a722b5ca41c1685 Mon Sep 17 00:00:00 2001 From: Chinesezjc Date: Tue, 11 Aug 2026 17:52:09 +0800 Subject: [PATCH] test(feedback): reach the per-file coverage gate Cover the reachable controller and control branches: each failure code's copy, dispose-during-flight, non-Error rejections, and non-conflict mutation failures. Two paths were unreachable rather than untested, so remove them instead: commit() cannot run after disposal because mutate() refuses admission first, and the mutation tail cannot reject because every queued operation settles as a result. Pass the recorded rating into the note save so the editor's render site proves it exists. --- .../src/client/FeedbackActions.tsx | 18 +- .../ui-feedback/src/client/controller.ts | 15 +- .../ui-feedback/tests/controller.spec.ts | 204 ++++++++++++++++++ .../tests/feedback-actions.spec.tsx | 45 ++++ 4 files changed, 271 insertions(+), 11 deletions(-) diff --git a/packages/client/ui-feedback/src/client/FeedbackActions.tsx b/packages/client/ui-feedback/src/client/FeedbackActions.tsx index 5ecb1b466a..75bd92c171 100644 --- a/packages/client/ui-feedback/src/client/FeedbackActions.tsx +++ b/packages/client/ui-feedback/src/client/FeedbackActions.tsx @@ -60,16 +60,17 @@ export function FeedbackActions({ messageId, ensure, rate, clear, useFeedback, t void rate(messageId, next, item?.note).then(settle) }, [clear, item?.note, messageId, rate, rating, settle]) - const onSaveNote = useCallback(() => { - if (rating === undefined) return + // The rating is a parameter because only the note editor's render site can + // prove one is recorded; that removes an unreachable undefined guard here. + const onSaveNote = useCallback((current: MessageFeedbackRating) => { const trimmed = draft.trim() setPending(true) setFailure(null) - void rate(messageId, rating, trimmed.length === 0 ? undefined : trimmed).then((result) => { + void rate(messageId, current, trimmed.length === 0 ? undefined : trimmed).then((result) => { settle(result) if (result.ok && alive.current) setNoteOpen(false) }) - }, [draft, messageId, rate, rating, settle]) + }, [draft, messageId, rate, settle]) const openNote = useCallback(() => { setDraft(item?.note ?? '') @@ -116,7 +117,7 @@ export function FeedbackActions({ messageId, ensure, rate, clear, useFeedback, t {item?.note === undefined ? t('note.open') : item.note} )} - {noteOpen && ( + {rating !== undefined && noteOpen && (