mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-26 04:15:48 -06:00
perf(test): speed up model provider page observation polling (#127085)
This commit is contained in:
committed by
GitHub
parent
58127fa73e
commit
8ac7dd254c
@@ -4,6 +4,7 @@ import { afterEach, describe, expect, it, vi } from "vitest";
|
||||
import type { GatewayBrowserClient } from "../../api/gateway.ts";
|
||||
import type { ModelsProbeResult } from "../../api/types.ts";
|
||||
import type { ApplicationContext, ApplicationGatewaySnapshot } from "../../app/context.ts";
|
||||
import { waitForFast } from "../../test-helpers/wait-for.ts";
|
||||
import type { DefaultModelSelection, ModelProviderLogoutTarget } from "./data.ts";
|
||||
import { EMPTY_MODEL_PROVIDERS_DATA, type ModelProvidersData } from "./load.ts";
|
||||
import type { ModelProvidersRouteData } from "./model-providers-page.ts";
|
||||
@@ -191,7 +192,7 @@ describe("ModelProvidersPage agent scope", () => {
|
||||
it("switches application ownership from the concrete agent picker", async () => {
|
||||
const { agentSelection, context } = createHarness("main");
|
||||
const page = appendPage(context);
|
||||
await vi.waitFor(() => expect(page.querySelector("openclaw-agent-select")).not.toBeNull());
|
||||
await waitForFast(() => expect(page.querySelector("openclaw-agent-select")).not.toBeNull());
|
||||
|
||||
page.querySelector<AgentSelectElement>("openclaw-agent-select")?.onSelect("writer");
|
||||
|
||||
@@ -212,7 +213,7 @@ describe("ModelProvidersPage agent scope", () => {
|
||||
it("patches thinking and fast mode through the shared config draft", async () => {
|
||||
const { context, runtimeConfig } = createHarness("main");
|
||||
const page = appendPage(context);
|
||||
await vi.waitFor(() => expect(page.querySelector("#settings-model-behavior")).not.toBeNull());
|
||||
await waitForFast(() => expect(page.querySelector("#settings-model-behavior")).not.toBeNull());
|
||||
|
||||
const groups = page.querySelectorAll<HTMLElement & { value: string }>("wa-radio-group");
|
||||
expect(groups).toHaveLength(2);
|
||||
@@ -236,7 +237,7 @@ describe("ModelProvidersPage agent scope", () => {
|
||||
it("removes thinking and fast overrides through the shared config draft", async () => {
|
||||
const { context, runtimeConfig } = createHarness("main");
|
||||
const page = appendPage(context);
|
||||
await vi.waitFor(() => expect(page.querySelector("#settings-model-behavior")).not.toBeNull());
|
||||
await waitForFast(() => expect(page.querySelector("#settings-model-behavior")).not.toBeNull());
|
||||
|
||||
const groups = page.querySelectorAll<HTMLElement & { value: string }>(
|
||||
"#settings-model-behavior wa-radio-group",
|
||||
@@ -265,7 +266,7 @@ describe("ModelProvidersPage agent scope", () => {
|
||||
agents: { defaults: { thinkingDefault: 42, fastModeDefault: "bogus" } },
|
||||
} as unknown as typeof runtimeConfig.state.configForm;
|
||||
const page = appendPage(context);
|
||||
await vi.waitFor(() => expect(page.querySelector("#settings-model-behavior")).not.toBeNull());
|
||||
await waitForFast(() => expect(page.querySelector("#settings-model-behavior")).not.toBeNull());
|
||||
|
||||
const behavior = page.querySelector("#settings-model-behavior")!;
|
||||
const groups = behavior.querySelectorAll<HTMLElement & { value: string }>("wa-radio-group");
|
||||
@@ -294,7 +295,7 @@ describe("ModelProvidersPage agent scope", () => {
|
||||
runtimeConfig.state.lastError = "config.get failed after provider-key commit";
|
||||
});
|
||||
const page = appendPage(context);
|
||||
await vi.waitFor(() => expect(page.data?.config).toEqual({}));
|
||||
await waitForFast(() => expect(page.data?.config).toEqual({}));
|
||||
page.keyEditorProvider = "openai";
|
||||
page.keyDraft = "replacement";
|
||||
|
||||
@@ -315,7 +316,7 @@ describe("ModelProvidersPage agent scope", () => {
|
||||
runtimeConfig.state.lastError = "config.get failed after provider add";
|
||||
});
|
||||
const page = appendPage(context);
|
||||
await vi.waitFor(() => expect(page.data?.config).toEqual({}));
|
||||
await waitForFast(() => expect(page.data?.config).toEqual({}));
|
||||
page.addProviderOpen = true;
|
||||
page.addProviderId = "anthropic";
|
||||
page.addProviderKey = "new-provider-key";
|
||||
@@ -338,7 +339,7 @@ describe("ModelProvidersPage agent scope", () => {
|
||||
runtimeConfig.state.lastError = "config.get failed after saving default models";
|
||||
});
|
||||
const page = appendPage(context);
|
||||
await vi.waitFor(() => expect(page.data?.config).toEqual({}));
|
||||
await waitForFast(() => expect(page.data?.config).toEqual({}));
|
||||
const selection: DefaultModelSelection = {
|
||||
primary: "openai/gpt-5",
|
||||
fallbacks: [],
|
||||
@@ -362,7 +363,7 @@ describe("ModelProvidersPage agent scope", () => {
|
||||
const gate = deferred<void>();
|
||||
runtimeConfig.ensureLoaded.mockImplementationOnce(async () => gate.promise);
|
||||
const page = appendPage(context);
|
||||
await vi.waitFor(() => expect(page.data?.config).toEqual({}));
|
||||
await waitForFast(() => expect(page.data?.config).toEqual({}));
|
||||
const selection: DefaultModelSelection = {
|
||||
primary: "openai/gpt-5",
|
||||
fallbacks: [],
|
||||
@@ -389,7 +390,7 @@ describe("ModelProvidersPage agent scope", () => {
|
||||
const gate = deferred<void>();
|
||||
runtimeConfig.ensureLoaded.mockImplementationOnce(async () => gate.promise);
|
||||
const page = appendPage(context);
|
||||
await vi.waitFor(() => expect(page.data?.config).toEqual({}));
|
||||
await waitForFast(() => expect(page.data?.config).toEqual({}));
|
||||
page.keyEditorProvider = "openai";
|
||||
page.keyDraft = "main-agent-key";
|
||||
|
||||
@@ -420,7 +421,7 @@ describe("ModelProvidersPage agent scope", () => {
|
||||
const gate = deferred<void>();
|
||||
runtimeConfig.ensureLoaded.mockImplementationOnce(async () => gate.promise);
|
||||
const page = appendPage(context);
|
||||
await vi.waitFor(() => expect(page.data?.config).toEqual({}));
|
||||
await waitForFast(() => expect(page.data?.config).toEqual({}));
|
||||
page.addProviderOpen = true;
|
||||
page.addProviderId = "anthropic";
|
||||
page.addProviderKey = "shared-provider-key";
|
||||
@@ -447,7 +448,7 @@ describe("ModelProvidersPage agent scope", () => {
|
||||
it("stops queued agent-scoped logouts after the selected agent changes", async () => {
|
||||
const { agentSelection, context, notifySelection, request } = createHarness("main");
|
||||
const page = appendPage(context);
|
||||
await vi.waitFor(() => expect(page.data?.config).toEqual({}));
|
||||
await waitForFast(() => expect(page.data?.config).toEqual({}));
|
||||
request.mockClear();
|
||||
const firstLogout = deferred<unknown>();
|
||||
request.mockImplementationOnce(async () => firstLogout.promise);
|
||||
@@ -480,7 +481,7 @@ describe("ModelProvidersPage agent scope", () => {
|
||||
it("stops queued agent-scoped logouts when route data changes the selected agent", async () => {
|
||||
const { agentSelection, context, request, snapshot } = createHarness("main");
|
||||
const page = appendPage(context);
|
||||
await vi.waitFor(() => expect(page.data?.config).toEqual({}));
|
||||
await waitForFast(() => expect(page.data?.config).toEqual({}));
|
||||
request.mockClear();
|
||||
const firstLogout = deferred<unknown>();
|
||||
request.mockImplementationOnce(async () => firstLogout.promise);
|
||||
@@ -532,7 +533,7 @@ describe("ModelProvidersPage agent scope", () => {
|
||||
agentSelection.state.scopeId = "writer";
|
||||
notifySelection();
|
||||
|
||||
await vi.waitFor(() =>
|
||||
await waitForFast(() =>
|
||||
expect(request).toHaveBeenCalledWith(
|
||||
"models.authStatus",
|
||||
{ agentId: "writer" },
|
||||
@@ -549,7 +550,7 @@ describe("ModelProvidersPage agent scope", () => {
|
||||
|
||||
const page = appendPage(context);
|
||||
|
||||
await vi.waitFor(() =>
|
||||
await waitForFast(() =>
|
||||
expect(request).toHaveBeenCalledWith(
|
||||
"models.authStatus",
|
||||
{ agentId: "writer" },
|
||||
@@ -614,14 +615,14 @@ describe("ModelProvidersPage agent scope", () => {
|
||||
notifySelection();
|
||||
release();
|
||||
|
||||
await vi.waitFor(() =>
|
||||
await waitForFast(() =>
|
||||
expect(request).toHaveBeenCalledWith(
|
||||
"models.authStatus",
|
||||
{ agentId: "writer" },
|
||||
{ signal: expect.any(AbortSignal) },
|
||||
),
|
||||
);
|
||||
await vi.waitFor(() => expect(page.data?.updatedAt).toEqual(expect.any(Number)));
|
||||
await waitForFast(() => expect(page.data?.updatedAt).toEqual(expect.any(Number)));
|
||||
});
|
||||
|
||||
it("discards stale route data when selection changes during preload", async () => {
|
||||
@@ -634,7 +635,7 @@ describe("ModelProvidersPage agent scope", () => {
|
||||
page.routeData = { data: staleData, client: snapshot.client, agentId: "main" };
|
||||
document.body.append(page);
|
||||
|
||||
await vi.waitFor(() =>
|
||||
await waitForFast(() =>
|
||||
expect(request).toHaveBeenCalledWith(
|
||||
"models.authStatus",
|
||||
{ agentId: "writer" },
|
||||
@@ -648,7 +649,7 @@ describe("ModelProvidersPage agent scope", () => {
|
||||
it("probes credentials in the selected agent scope", async () => {
|
||||
const { context, request } = createHarness("writer");
|
||||
const page = appendPage(context);
|
||||
await vi.waitFor(() => expect(page.data?.config).toEqual({}));
|
||||
await waitForFast(() => expect(page.data?.config).toEqual({}));
|
||||
request.mockClear();
|
||||
|
||||
await page.probe("openai", ["openai"]);
|
||||
@@ -662,7 +663,7 @@ describe("ModelProvidersPage agent scope", () => {
|
||||
it("stops queued provider probes after switching away from and back to the selected agent", async () => {
|
||||
const { agentSelection, context, notifySelection, request } = createHarness("main");
|
||||
const page = appendPage(context);
|
||||
await vi.waitFor(() => expect(page.data?.config).toEqual({}));
|
||||
await waitForFast(() => expect(page.data?.config).toEqual({}));
|
||||
request.mockClear();
|
||||
const firstProbe = deferred<ModelsProbeResult>();
|
||||
request.mockImplementationOnce(() => firstProbe.promise);
|
||||
@@ -693,7 +694,7 @@ describe("ModelProvidersPage agent scope", () => {
|
||||
it("discards an in-flight probe result after the selected agent changes", async () => {
|
||||
const { agentSelection, context, notifySelection, request } = createHarness("main");
|
||||
const page = appendPage(context);
|
||||
await vi.waitFor(() => expect(page.data?.config).toEqual({}));
|
||||
await waitForFast(() => expect(page.data?.config).toEqual({}));
|
||||
const pending = deferred<ModelsProbeResult>();
|
||||
request.mockImplementationOnce(() => pending.promise);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user