peijun1's picture
Deploy AI Studio Proxy API to Hugging Face Spaces
a5784e9
Raw
History Blame Contribute Delete
5.53 kB
/**
* Layout Component Tests
*/
import { describe, it, expect, vi, beforeEach } from "vitest";
// Mock the contexts module
vi.mock("@/contexts", () => ({
useTheme: vi.fn(),
}));
// Import after mock
import { useTheme } from "@/contexts";
describe("Layout Logic", () => {
beforeEach(() => {
vi.clearAllMocks();
});
describe("Theme Context", () => {
it("provides dark theme", () => {
vi.mocked(useTheme).mockReturnValue({
theme: "dark",
toggleTheme: vi.fn(),
});
const { theme } = useTheme();
expect(theme).toBe("dark");
});
it("provides light theme", () => {
vi.mocked(useTheme).mockReturnValue({
theme: "light",
toggleTheme: vi.fn(),
});
const { theme } = useTheme();
expect(theme).toBe("light");
});
it("toggleTheme is callable", () => {
const mockToggle = vi.fn();
vi.mocked(useTheme).mockReturnValue({
theme: "dark",
toggleTheme: mockToggle,
});
const { toggleTheme } = useTheme();
toggleTheme();
expect(mockToggle).toHaveBeenCalled();
});
});
describe("Sidebar State Management", () => {
it("initializes left sidebar as open", () => {
const leftSidebarOpen = true;
expect(leftSidebarOpen).toBe(true);
});
it("toggles left sidebar closed", () => {
let leftSidebarOpen = true;
leftSidebarOpen = !leftSidebarOpen;
expect(leftSidebarOpen).toBe(false);
});
it("toggles left sidebar open", () => {
let leftSidebarOpen = false;
leftSidebarOpen = !leftSidebarOpen;
expect(leftSidebarOpen).toBe(true);
});
it("initializes right sidebar as open", () => {
const rightSidebarOpen = true;
expect(rightSidebarOpen).toBe(true);
});
it("toggles right sidebar independently", () => {
const leftSidebarOpen = true;
let rightSidebarOpen = true;
rightSidebarOpen = !rightSidebarOpen;
expect(leftSidebarOpen).toBe(true);
expect(rightSidebarOpen).toBe(false);
});
});
describe("Main View State", () => {
it("initializes with chat view", () => {
const mainView: "chat" | "settings" = "chat";
expect(mainView).toBe("chat");
});
it("switches to settings view", () => {
let mainView: "chat" | "settings" = "chat";
mainView = "settings";
expect(mainView).toBe("settings");
});
it("switches back to chat view", () => {
let mainView: "chat" | "settings" = "settings";
mainView = "chat";
expect(mainView).toBe("chat");
});
});
describe("Conditional Rendering Logic", () => {
it("shows left sidebar only in chat view", () => {
const mainView: string = "chat";
const showLeftSidebar = mainView === "chat";
expect(showLeftSidebar).toBe(true);
});
it("hides left sidebar in settings view", () => {
const mainView: string = "settings";
const showLeftSidebar = mainView === "chat";
expect(showLeftSidebar).toBe(false);
});
it("shows right sidebar only in chat view", () => {
const mainView: string = "chat";
const showRightSidebar = mainView === "chat";
expect(showRightSidebar).toBe(true);
});
it("hides toggle buttons in settings view", () => {
const mainView: string = "settings";
const showToggleButtons = mainView === "chat";
expect(showToggleButtons).toBe(false);
});
});
describe("Aria Labels", () => {
it("generates left sidebar toggle label when open", () => {
const leftSidebarOpen = true;
const label = leftSidebarOpen ? "隐藏设置面板" : "显示设置面板";
expect(label).toBe("隐藏设置面板");
});
it("generates left sidebar toggle label when closed", () => {
const leftSidebarOpen = false;
const label = leftSidebarOpen ? "隐藏设置面板" : "显示设置面板";
expect(label).toBe("显示设置面板");
});
it("generates right sidebar toggle label when open", () => {
const rightSidebarOpen = true;
const label = rightSidebarOpen ? "隐藏日志面板" : "显示日志面板";
expect(label).toBe("隐藏日志面板");
});
it("generates theme toggle label for dark mode", () => {
const theme: string = "dark";
const label = theme === "dark" ? "切换到亮色模式" : "切换到暗色模式";
expect(label).toBe("切换到亮色模式");
});
it("generates theme toggle label for light mode", () => {
const theme: string = "light";
const label = theme === "dark" ? "切换到亮色模式" : "切换到暗色模式";
expect(label).toBe("切换到暗色模式");
});
});
describe("CSS Class Logic", () => {
it("applies collapsed class when sidebar is closed", () => {
const leftSidebarOpen = false;
const className = !leftSidebarOpen ? "collapsed" : "";
expect(className).toBe("collapsed");
});
it("does not apply collapsed class when sidebar is open", () => {
const leftSidebarOpen = true;
const className = !leftSidebarOpen ? "collapsed" : "";
expect(className).toBe("");
});
it("applies active class to current view tab", () => {
const mainView: string = "chat";
const chatTabActive = mainView === "chat" ? "active" : "";
const settingsTabActive = mainView === "settings" ? "active" : "";
expect(chatTabActive).toBe("active");
expect(settingsTabActive).toBe("");
});
});
});