diff --git a/ui/src/stores/messages.test.ts b/ui/src/stores/messages.test.ts index df6533e..aca02a6 100644 --- a/ui/src/stores/messages.test.ts +++ b/ui/src/stores/messages.test.ts @@ -41,6 +41,7 @@ const { UNDO_WINDOW_MS, clearFilters, clearInbox, + clearInboxPrompt, connectWebSocket, disconnectWebSocket, deleteWithUndo, @@ -2436,3 +2437,32 @@ describe("read notices", () => { ); }); }); + +describe("clearInboxPrompt", () => { + const everything = + "Every message in the inbox will be permanently deleted, including those outside the current search and filters."; + + it("counts the inbox when nothing narrows the list", async () => { + await seed(range(3)); + + expect(clearInboxPrompt().message).toBe( + "All 3 messages will be permanently deleted.", + ); + }); + + it("does not quote a filtered total for a clear that deletes everything", async () => { + await seed(range(100)); + listMessages.mockResolvedValue(page(range(2), 2)); + toggleFilter("starred"); + await vi.waitFor(() => expect(total()).toBe(2)); + + expect(clearInboxPrompt().message).toBe(everything); + }); + + it("does not quote a search total for a clear that deletes everything", async () => { + await seed(range(100)); + setSearch("invoice"); + + expect(clearInboxPrompt().message).toBe(everything); + }); +}); diff --git a/ui/src/stores/messages.ts b/ui/src/stores/messages.ts index 00dbefa..9bfcedb 100644 --- a/ui/src/stores/messages.ts +++ b/ui/src/stores/messages.ts @@ -517,7 +517,10 @@ function quoted(id: string): string { function clearInboxPrompt(): ConfirmDialogOptions { return { title: "Clear all messages", - message: `All ${total()} messages will be permanently deleted.`, + message: + search() || hasActiveFilters() + ? "Every message in the inbox will be permanently deleted, including those outside the current search and filters." + : `All ${total()} messages will be permanently deleted.`, confirmLabel: "Clear all", }; }