diff --git a/src/lib/chat/__tests__/splash_latest_message.test.ts b/src/lib/chat/__tests__/splash_latest_message.test.ts new file mode 100644 index 00000000..7f905b87 --- /dev/null +++ b/src/lib/chat/__tests__/splash_latest_message.test.ts @@ -0,0 +1,41 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; + +import { Result } from "@/utils"; + +const getHistoryMock = vi.hoisted(() => vi.fn()); + +vi.mock("@/data/repositories/chat_repository", () => ({ + getChatRepository: () => ({ getHistory: getHistoryMock }), +})); + +import { fetchSplashLatestMessagePreview } from "../splash_latest_message"; + +describe("fetchSplashLatestMessagePreview", () => { + beforeEach(() => { + getHistoryMock.mockReset(); + }); + + it("uses the last message returned by history", async () => { + getHistoryMock.mockResolvedValue( + Result.ok({ + messages: [ + { type: "text", content: "Older message" }, + { type: "text", content: "Latest message" }, + ], + }), + ); + + const result = await fetchSplashLatestMessagePreview(); + + expect(getHistoryMock).toHaveBeenCalledWith(1, 0); + expect(Result.isOk(result) && result.data).toBe("Latest message"); + }); + + it("returns null when history is empty", async () => { + getHistoryMock.mockResolvedValue(Result.ok({ messages: [] })); + + const result = await fetchSplashLatestMessagePreview(); + + expect(Result.isOk(result) && result.data).toBeNull(); + }); +}); diff --git a/src/lib/chat/splash_latest_message.ts b/src/lib/chat/splash_latest_message.ts index 0d7c4c09..e5b350b6 100644 --- a/src/lib/chat/splash_latest_message.ts +++ b/src/lib/chat/splash_latest_message.ts @@ -11,6 +11,6 @@ export async function fetchSplashLatestMessagePreview(): Promise< const result = await getChatRepository().getHistory(1, 0); if (Result.isErr(result)) return Result.err(result.error); - const latestMessage = result.data.messages[1] ?? null; + const latestMessage = result.data.messages.at(-1) ?? null; return Result.ok(getSplashLatestMessagePreview(latestMessage)); }