murashit_codex-panel/tests/features/chat/controllers/view/message-scroll-controller.test.ts
2026-05-29 07:26:35 +09:00

31 lines
1.2 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
import { createChatState, createChatStateStore } from "../../../../../src/features/chat/chat-state";
import { ChatMessageScrollController } from "../../../../../src/features/chat/controllers/view/message-scroll-controller";
describe("ChatMessageScrollController", () => {
it("consumes one-shot scroll intents", () => {
const controller = new ChatMessageScrollController({
stateStore: createChatStateStore(createChatState()),
render: vi.fn(),
});
controller.preservePosition();
expect(controller.consumeIntent()).toBe("preserve");
expect(controller.consumeIntent()).toBe("auto");
});
it("pins messages and renders when focusing the view", () => {
const stateStore = createChatStateStore(createChatState());
stateStore.dispatch({ type: "ui/messages-pinned-set", pinned: false });
const render = vi.fn();
const controller = new ChatMessageScrollController({ stateStore, render });
controller.scrollToBottomOnFocus();
expect(stateStore.getState().messagesPinnedToBottom).toBe(true);
expect(controller.consumeIntent()).toBe("force-bottom");
expect(render).toHaveBeenCalledOnce();
});
});