fix: sync debug polling with route changes (#1373) (thanks @yazinsai)
This commit is contained in:
91
ui/src/ui/app-settings.test.ts
Normal file
91
ui/src/ui/app-settings.test.ts
Normal file
@@ -0,0 +1,91 @@
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
import type { Tab } from "./navigation";
|
||||
|
||||
type SettingsHost = Parameters<typeof import("./app-settings").setTabFromRoute>[0];
|
||||
|
||||
const createHost = (tab: Tab): SettingsHost => ({
|
||||
settings: {
|
||||
gatewayUrl: "",
|
||||
token: "",
|
||||
sessionKey: "main",
|
||||
lastActiveSessionKey: "main",
|
||||
theme: "system",
|
||||
chatFocusMode: false,
|
||||
chatShowThinking: true,
|
||||
splitRatio: 0.6,
|
||||
navCollapsed: false,
|
||||
navGroupsCollapsed: {},
|
||||
},
|
||||
theme: "system",
|
||||
themeResolved: "dark",
|
||||
applySessionKey: "main",
|
||||
sessionKey: "main",
|
||||
tab,
|
||||
connected: false,
|
||||
chatHasAutoScrolled: false,
|
||||
logsAtBottom: false,
|
||||
eventLog: [],
|
||||
eventLogBuffer: [],
|
||||
basePath: "",
|
||||
themeMedia: null,
|
||||
themeMediaHandler: null,
|
||||
});
|
||||
|
||||
describe("setTabFromRoute", () => {
|
||||
beforeEach(() => {
|
||||
vi.resetModules();
|
||||
});
|
||||
|
||||
it("starts and stops log polling based on the tab", async () => {
|
||||
const startLogsPolling = vi.fn();
|
||||
const stopLogsPolling = vi.fn();
|
||||
const startDebugPolling = vi.fn();
|
||||
const stopDebugPolling = vi.fn();
|
||||
|
||||
vi.doMock("./app-polling", () => ({
|
||||
startLogsPolling,
|
||||
stopLogsPolling,
|
||||
startDebugPolling,
|
||||
stopDebugPolling,
|
||||
}));
|
||||
|
||||
const { setTabFromRoute } = await import("./app-settings");
|
||||
const host = createHost("chat");
|
||||
|
||||
setTabFromRoute(host, "logs");
|
||||
expect(startLogsPolling).toHaveBeenCalledTimes(1);
|
||||
expect(stopLogsPolling).not.toHaveBeenCalled();
|
||||
expect(startDebugPolling).not.toHaveBeenCalled();
|
||||
expect(stopDebugPolling).toHaveBeenCalledTimes(1);
|
||||
|
||||
setTabFromRoute(host, "chat");
|
||||
expect(stopLogsPolling).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it("starts and stops debug polling based on the tab", async () => {
|
||||
const startLogsPolling = vi.fn();
|
||||
const stopLogsPolling = vi.fn();
|
||||
const startDebugPolling = vi.fn();
|
||||
const stopDebugPolling = vi.fn();
|
||||
|
||||
vi.doMock("./app-polling", () => ({
|
||||
startLogsPolling,
|
||||
stopLogsPolling,
|
||||
startDebugPolling,
|
||||
stopDebugPolling,
|
||||
}));
|
||||
|
||||
const { setTabFromRoute } = await import("./app-settings");
|
||||
const host = createHost("chat");
|
||||
|
||||
setTabFromRoute(host, "debug");
|
||||
expect(startDebugPolling).toHaveBeenCalledTimes(1);
|
||||
expect(stopDebugPolling).not.toHaveBeenCalled();
|
||||
expect(startLogsPolling).not.toHaveBeenCalled();
|
||||
expect(stopLogsPolling).toHaveBeenCalledTimes(1);
|
||||
|
||||
setTabFromRoute(host, "chat");
|
||||
expect(stopDebugPolling).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
});
|
||||
@@ -264,6 +264,9 @@ export function setTabFromRoute(host: SettingsHost, next: Tab) {
|
||||
if (next === "logs")
|
||||
startLogsPolling(host as unknown as Parameters<typeof startLogsPolling>[0]);
|
||||
else stopLogsPolling(host as unknown as Parameters<typeof stopLogsPolling>[0]);
|
||||
if (next === "debug")
|
||||
startDebugPolling(host as unknown as Parameters<typeof startDebugPolling>[0]);
|
||||
else stopDebugPolling(host as unknown as Parameters<typeof stopDebugPolling>[0]);
|
||||
if (host.connected) void refreshActiveTab(host);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user