mirror of
https://github.com/murashit/codex-panel.git
synced 2026-07-22 06:57:10 +00:00
31 lines
1.2 KiB
TypeScript
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();
|
|
});
|
|
});
|