























@@ -4,6 +4,14 @@ import { describe, expect, it, vi } from "vitest";
44import { CONTROL_UI_BOOTSTRAP_CONFIG_PATH } from "../../../../src/gateway/control-ui-contract.js";
55import { loadControlUiBootstrapConfig } from "./control-ui-bootstrap.ts";
667+function requireFetchCall(fetchMock: ReturnType<typeof vi.fn>, index = 0) {
8+const call = fetchMock.mock.calls[index] as [string, RequestInit] | undefined;
9+if (!call) {
10+throw new Error(`expected fetch call #${index + 1}`);
11+}
12+return { url: call[0], init: call[1], headers: call[1].headers as Record<string, string> };
13+}
14+715describe("loadControlUiBootstrapConfig", () => {
816it("loads assistant identity from the bootstrap endpoint", async () => {
917const fetchMock = vi.fn().mockResolvedValue({
@@ -42,10 +50,9 @@ describe("loadControlUiBootstrapConfig", () => {
42504351await loadControlUiBootstrapConfig(state);
445245-expect(fetchMock).toHaveBeenCalledWith(
46-`/openclaw${CONTROL_UI_BOOTSTRAP_CONFIG_PATH}`,
47-expect.objectContaining({ method: "GET" }),
48-);
53+const fetchCall = requireFetchCall(fetchMock);
54+expect(fetchCall.url).toBe(`/openclaw${CONTROL_UI_BOOTSTRAP_CONFIG_PATH}`);
55+expect(fetchCall.init.method).toBe("GET");
4956expect(state.assistantName).toBe("Ops");
5057expect(state.assistantAvatar).toBe("O");
5158expect(state.assistantAvatarSource).toBe("avatars/ops.png");
@@ -213,10 +220,9 @@ describe("loadControlUiBootstrapConfig", () => {
213220214221await loadControlUiBootstrapConfig(state);
215222216-expect(fetchMock).toHaveBeenCalledWith(
217-CONTROL_UI_BOOTSTRAP_CONFIG_PATH,
218-expect.objectContaining({ method: "GET" }),
219-);
223+const fetchCall = requireFetchCall(fetchMock);
224+expect(fetchCall.url).toBe(CONTROL_UI_BOOTSTRAP_CONFIG_PATH);
225+expect(fetchCall.init.method).toBe("GET");
220226expect(state.assistantName).toBe("Assistant");
221227expect(state.embedSandboxMode).toBe("scripts");
222228expect(state.allowExternalEmbedUrls).toBe(false);
@@ -241,10 +247,9 @@ describe("loadControlUiBootstrapConfig", () => {
241247242248await loadControlUiBootstrapConfig(state);
243249244-expect(fetchMock).toHaveBeenCalledWith(
245-`/openclaw${CONTROL_UI_BOOTSTRAP_CONFIG_PATH}`,
246-expect.objectContaining({ method: "GET" }),
247-);
250+const fetchCall = requireFetchCall(fetchMock);
251+expect(fetchCall.url).toBe(`/openclaw${CONTROL_UI_BOOTSTRAP_CONFIG_PATH}`);
252+expect(fetchCall.init.method).toBe("GET");
248253249254vi.unstubAllGlobals();
250255});
@@ -267,16 +272,11 @@ describe("loadControlUiBootstrapConfig", () => {
267272268273await loadControlUiBootstrapConfig(state);
269274270-expect(fetchMock).toHaveBeenCalledWith(
271-`/openclaw${CONTROL_UI_BOOTSTRAP_CONFIG_PATH}`,
272-expect.objectContaining({
273-method: "GET",
274-headers: expect.objectContaining({
275-Accept: "application/json",
276-Authorization: "Bearer session-token",
277-}),
278-}),
279-);
275+const fetchCall = requireFetchCall(fetchMock);
276+expect(fetchCall.url).toBe(`/openclaw${CONTROL_UI_BOOTSTRAP_CONFIG_PATH}`);
277+expect(fetchCall.init.method).toBe("GET");
278+expect(fetchCall.headers.Accept).toBe("application/json");
279+expect(fetchCall.headers.Authorization).toBe("Bearer session-token");
280280281281vi.unstubAllGlobals();
282282});
@@ -373,17 +373,11 @@ describe("loadControlUiBootstrapConfig", () => {
373373374374await loadControlUiBootstrapConfig(state);
375375376-expect(fetchMock).toHaveBeenCalledWith(
377-`//evil.example${CONTROL_UI_BOOTSTRAP_CONFIG_PATH}`,
378-expect.objectContaining({
379-method: "GET",
380-headers: expect.objectContaining({
381-Accept: "application/json",
382-}),
383-}),
384-);
385-const [, init] = fetchMock.mock.calls[0] ?? [];
386-expect((init?.headers as Record<string, string> | undefined)?.Authorization).toBeUndefined();
376+const fetchCall = requireFetchCall(fetchMock);
377+expect(fetchCall.url).toBe(`//evil.example${CONTROL_UI_BOOTSTRAP_CONFIG_PATH}`);
378+expect(fetchCall.init.method).toBe("GET");
379+expect(fetchCall.headers.Accept).toBe("application/json");
380+expect(fetchCall.headers.Authorization).toBeUndefined();
387381388382vi.unstubAllGlobals();
389383});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。