Skip to content

Commit fc4926c

Browse files
committed
test: cover modal submit feedback API error path
Add tests for handleFeedbackSubmit .catch() in both MessageLog and Overview pages to satisfy codecov/patch coverage requirement.
1 parent 5bed3cb commit fc4926c

2 files changed

Lines changed: 36 additions & 0 deletions

File tree

packages/frontend/tests/pages/MessageLog.test.tsx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -934,6 +934,24 @@ describe("MessageLog", () => {
934934
expect(mockSetMessageFeedback).toHaveBeenCalledWith("msg-12345678", { rating: "dislike", tags: ["Too slow"], details: "test" });
935935
});
936936

937+
it("reverts optimistic dislike when modal submit API call fails", async () => {
938+
mockSetMessageFeedback
939+
.mockResolvedValueOnce(undefined) // dislike click succeeds
940+
.mockRejectedValueOnce(new Error("fail")); // modal submit fails
941+
mockGetMessages.mockResolvedValue(messagesData);
942+
const { container } = render(() => <MessageLog />);
943+
await vi.waitFor(() => {
944+
expect(container.querySelector(".feedback-btn")).not.toBeNull();
945+
});
946+
const dislikeBtn = container.querySelectorAll(".feedback-btn")[1] as HTMLElement;
947+
fireEvent.click(dislikeBtn);
948+
const submitBtn = container.querySelector('[data-testid="feedback-submit"]') as HTMLElement;
949+
fireEvent.click(submitBtn);
950+
await vi.waitFor(() => {
951+
expect(container.querySelector(".feedback-btn--active-dislike")).toBeNull();
952+
});
953+
});
954+
937955
it("closes feedback modal without submitting", async () => {
938956
mockSetMessageFeedback.mockResolvedValue(undefined);
939957
mockGetMessages.mockResolvedValue(messagesData);

packages/frontend/tests/pages/Overview.test.tsx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -868,6 +868,24 @@ describe("Overview", () => {
868868
expect(mockSetMessageFeedback).toHaveBeenCalledWith("msg-12345678", { rating: "dislike", tags: ["Too slow"], details: "test" });
869869
});
870870

871+
it("reverts optimistic dislike when modal submit API call fails", async () => {
872+
mockSetMessageFeedback
873+
.mockResolvedValueOnce(undefined) // dislike click succeeds
874+
.mockRejectedValueOnce(new Error("fail")); // modal submit fails
875+
mockGetOverview.mockResolvedValue(overviewData);
876+
const { container } = render(() => <Overview />);
877+
await vi.waitFor(() => {
878+
expect(container.querySelector(".feedback-btn")).not.toBeNull();
879+
});
880+
const dislikeBtn = container.querySelectorAll(".feedback-btn")[1] as HTMLElement;
881+
fireEvent.click(dislikeBtn);
882+
const submitBtn = container.querySelector('[data-testid="feedback-submit"]') as HTMLElement;
883+
fireEvent.click(submitBtn);
884+
await vi.waitFor(() => {
885+
expect(container.querySelector(".feedback-btn--active-dislike")).toBeNull();
886+
});
887+
});
888+
871889
it("hides feedback column and modal in local mode", async () => {
872890
mockCheckIsLocalMode.mockResolvedValue(true);
873891
mockGetOverview.mockResolvedValue(overviewData);

0 commit comments

Comments
 (0)