From c6dbf5ae390c6b64c9fc9075912e473ba8806b49 Mon Sep 17 00:00:00 2001 From: Ghansham Jadhav Date: Fri, 24 Jul 2026 03:25:32 +0000 Subject: [PATCH 1/5] fix(ui): resolve the merge conflict --- .../renderer/components/settings/ReportProblemDialog.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/renderer/components/settings/ReportProblemDialog.tsx b/frontend/src/renderer/components/settings/ReportProblemDialog.tsx index d62afdf8af..a36fb3efa3 100644 --- a/frontend/src/renderer/components/settings/ReportProblemDialog.tsx +++ b/frontend/src/renderer/components/settings/ReportProblemDialog.tsx @@ -98,7 +98,7 @@ export function ReportProblemDialog({ open, onOpenChange }: ReportProblemDialogP const input = { summary, details }; const draft = formatReportProblemDraft(input, diagnostics, selectedOutput); const destination = DESTINATIONS.find((option) => option.value === selectedOutput) ?? DESTINATIONS[0]; - const canCopy = summary.trim().length > 0; + const canSubmit = summary.trim().length > 0 && details.trim().length > 0; const clearStatus = () => { setCopiedOutput(null); @@ -106,7 +106,7 @@ export function ReportProblemDialog({ open, onOpenChange }: ReportProblemDialogP }; const copyDraft = async () => { - if (!canCopy) return; + if (!canSubmit) return; setCopyError(null); const output = selectedOutput; try { @@ -230,7 +230,7 @@ export function ReportProblemDialog({ open, onOpenChange }: ReportProblemDialogP From 72c19abf2d480f6e3844c5eaca9a1404b8b6d43d Mon Sep 17 00:00:00 2001 From: Ghansham Jadhav Date: Sat, 25 Jul 2026 17:25:15 +0000 Subject: [PATCH 5/5] test(ui): enhance ReportProblemDialog validation for whitespace-only inputs --- .../src/renderer/components/GlobalSettingsForm.test.tsx | 4 ++++ .../components/settings/ReportProblemDialog.test.tsx | 9 +++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/frontend/src/renderer/components/GlobalSettingsForm.test.tsx b/frontend/src/renderer/components/GlobalSettingsForm.test.tsx index 86b30a8dd4..2aaa0db637 100644 --- a/frontend/src/renderer/components/GlobalSettingsForm.test.tsx +++ b/frontend/src/renderer/components/GlobalSettingsForm.test.tsx @@ -280,6 +280,7 @@ describe("GlobalSettingsForm", () => { await user.click(await screen.findByRole("button", { name: "Report a problem" })); expect(await screen.findByRole("dialog", { name: "Report a problem" })).toBeInTheDocument(); await user.type(screen.getByLabelText("Title"), "Need help with setup"); + await user.type(screen.getByLabelText("What happened?"), "The setup flow stalls after the first prompt."); await user.click(screen.getByRole("radio", { name: "Discord" })); expect(screen.getByRole("button", { name: /copy & open discord/i })).toBeInTheDocument(); @@ -288,6 +289,8 @@ describe("GlobalSettingsForm", () => { await waitFor(() => expect(writeText).toHaveBeenCalledTimes(1)); expect(writeText.mock.calls[0][0]).toContain("**AO feedback**"); expect(screen.getByText("Discord draft copied.")).toBeInTheDocument(); + expect(screen.getByLabelText("Title")).toHaveValue(""); + expect(screen.getByLabelText("What happened?")).toHaveValue(""); await user.click(screen.getByRole("radio", { name: "Email" })); expect(screen.getByRole("button", { name: /copy & open email/i })).toBeInTheDocument(); @@ -295,6 +298,7 @@ describe("GlobalSettingsForm", () => { expect(screen.queryByText("Discord draft copied.")).not.toBeInTheDocument(); expect(screen.getByRole("button", { name: /copy & open email/i })).toBeDisabled(); await user.type(screen.getByLabelText("Title"), "Need help with setup"); + await user.type(screen.getByLabelText("What happened?"), "The setup flow stalls after the first prompt."); await user.click(screen.getByRole("button", { name: /copy & open email/i })); await waitFor(() => expect(writeText).toHaveBeenCalledTimes(2)); diff --git a/frontend/src/renderer/components/settings/ReportProblemDialog.test.tsx b/frontend/src/renderer/components/settings/ReportProblemDialog.test.tsx index 38920eb13b..5ef22934ed 100644 --- a/frontend/src/renderer/components/settings/ReportProblemDialog.test.tsx +++ b/frontend/src/renderer/components/settings/ReportProblemDialog.test.tsx @@ -7,7 +7,7 @@ import { describe, expect, it, vi } from "vitest"; import { ReportProblemDialog } from "./ReportProblemDialog"; describe("ReportProblemDialog", () => { - it("disables primary action when fields are empty, and enables only when both summary and details contain text", async () => { + it("disables primary action when fields are empty or whitespace-only, and enables when both summary and details contain non-whitespace text", async () => { await act(async () => { render(); await Promise.resolve(); @@ -22,11 +22,16 @@ describe("ReportProblemDialog", () => { fireEvent.change(summaryInput, { target: { value: "Test Summary" } }); expect(submitButton).toBeDisabled(); - fireEvent.change(summaryInput, { target: { value: "" } }); + fireEvent.change(summaryInput, { target: { value: " " } }); fireEvent.change(detailsInput, { target: { value: "Test Details" } }); expect(submitButton).toBeDisabled(); fireEvent.change(summaryInput, { target: { value: "Test Summary" } }); + fireEvent.change(detailsInput, { target: { value: " " } }); + expect(submitButton).toBeDisabled(); + + fireEvent.change(summaryInput, { target: { value: "Test Summary" } }); + fireEvent.change(detailsInput, { target: { value: "Test Details" } }); expect(submitButton).toBeEnabled(); }); });