























@@ -152,6 +152,38 @@ function getWizardNoteCalls(note: WizardPrompter["note"]) {
152152return (note as unknown as { mock: { calls: unknown[][] } }).mock.calls;
153153}
154154155+function requireRecord(value: unknown, label: string): Record<string, unknown> {
156+if (typeof value !== "object" || value === null || Array.isArray(value)) {
157+throw new Error(`expected ${label} to be an object`);
158+}
159+return value as Record<string, unknown>;
160+}
161+162+function expectRecordFields(
163+value: unknown,
164+expected: Record<string, unknown>,
165+label: string,
166+): Record<string, unknown> {
167+const record = requireRecord(value, label);
168+for (const [key, expectedValue] of Object.entries(expected)) {
169+expect(record[key], `${label}.${key}`).toEqual(expectedValue);
170+}
171+return record;
172+}
173+174+function getMockCallArg(
175+mock: { mock: { calls: readonly unknown[][] } },
176+callIndex: number,
177+argIndex: number,
178+label: string,
179+): unknown {
180+const call = (mock.mock.calls as unknown[][])[callIndex];
181+if (!call) {
182+throw new Error(`expected ${label} call ${callIndex}`);
183+}
184+return call[argIndex];
185+}
186+155187vi.mock("../commands/onboard-channels.js", () => ({
156188 setupChannels,
157189}));
@@ -379,8 +411,10 @@ describe("runSetupWizard", () => {
379411prompter,
380412),
381413).resolves.toBeUndefined();
382-expect(resolvePreferredProviderForAuthChoice).toHaveBeenCalledWith(
383-expect.objectContaining({ choice: "ollama" }),
414+expectRecordFields(
415+getMockCallArg(resolvePreferredProviderForAuthChoice, 0, 0, "preferred provider lookup"),
416+{ choice: "ollama" },
417+"preferred provider lookup params",
384418);
385419expect(resolvePluginProvidersRuntime).toHaveBeenCalled();
386420setupChannels.mockClear();
@@ -488,23 +522,31 @@ describe("runSetupWizard", () => {
488522prompter,
489523);
490524491-expect(replaceConfigFile).toHaveBeenCalledWith(
492-expect.objectContaining({
493-nextConfig: expect.objectContaining({
494-agents: expect.objectContaining({
495-defaults: expect.objectContaining({
496-skipBootstrap: true,
497-workspace: workspaceDir,
498-}),
499-}),
500-}),
501-writeOptions: expect.objectContaining({ allowConfigSizeDrop: true }),
502-}),
525+const replaceParams = requireRecord(
526+getMockCallArg(replaceConfigFile, 0, 0, "config replacement"),
527+"config replacement params",
503528);
504-expect(ensureWorkspaceAndSessions).toHaveBeenCalledWith(
505-workspaceDir,
506-runtime,
507-expect.objectContaining({ skipBootstrap: true }),
529+const nextConfig = requireRecord(replaceParams.nextConfig, "next config");
530+const agents = requireRecord(nextConfig.agents, "next config agents");
531+expectRecordFields(
532+requireRecord(agents.defaults, "next config agent defaults"),
533+{
534+skipBootstrap: true,
535+workspace: workspaceDir,
536+},
537+"next config agent defaults",
538+);
539+expectRecordFields(
540+replaceParams.writeOptions,
541+{ allowConfigSizeDrop: true },
542+"config replacement write options",
543+);
544+expect(getMockCallArg(ensureWorkspaceAndSessions, 0, 0, "workspace setup")).toBe(workspaceDir);
545+expect(getMockCallArg(ensureWorkspaceAndSessions, 0, 1, "workspace setup")).toBe(runtime);
546+expectRecordFields(
547+getMockCallArg(ensureWorkspaceAndSessions, 0, 2, "workspace setup"),
548+{ skipBootstrap: true },
549+"workspace setup options",
508550);
509551});
510552@@ -569,12 +611,14 @@ describe("runSetupWizard", () => {
569611prompter,
570612);
571613572-expect(runTui).toHaveBeenCalledWith(
573-expect.objectContaining({
614+expectRecordFields(
615+getMockCallArg(runTui, 0, 0, "tui launch"),
616+{
574617local: true,
575618deliver: false,
576619message: params.expectedMessage,
577-}),
620+},
621+"tui launch options",
578622);
579623}
580624@@ -651,14 +695,16 @@ describe("runSetupWizard", () => {
651695prompter,
652696);
653697654-expect(setupChannels).toHaveBeenCalledWith(
655-expect.anything(),
656-expect.anything(),
657-expect.anything(),
658-expect.objectContaining({
698+expect(getMockCallArg(setupChannels, 0, 0, "channel setup")).not.toBeNull();
699+expect(getMockCallArg(setupChannels, 0, 1, "channel setup")).not.toBeNull();
700+expect(getMockCallArg(setupChannels, 0, 2, "channel setup")).not.toBeNull();
701+expectRecordFields(
702+getMockCallArg(setupChannels, 0, 3, "channel setup"),
703+{
659704deferStatusUntilSelection: true,
660705quickstartDefaults: true,
661-}),
706+},
707+"channel setup options",
662708);
663709});
664710@@ -710,16 +756,20 @@ describe("runSetupWizard", () => {
710756prompter,
711757);
712758713-expect(promptDefaultModel).toHaveBeenCalledWith(
714-expect.objectContaining({
759+expectRecordFields(
760+getMockCallArg(promptDefaultModel, 0, 0, "default model prompt"),
761+{
715762allowKeep: false,
716763browseCatalogOnDemand: true,
717-}),
764+},
765+"default model prompt params",
718766);
719-expect(warnIfModelConfigLooksOff).toHaveBeenCalledWith(
720-expect.anything(),
721-expect.anything(),
722-expect.objectContaining({ validateCatalog: false }),
767+expect(getMockCallArg(warnIfModelConfigLooksOff, 0, 0, "model warning")).not.toBeNull();
768+expect(getMockCallArg(warnIfModelConfigLooksOff, 0, 1, "model warning")).not.toBeNull();
769+expectRecordFields(
770+getMockCallArg(warnIfModelConfigLooksOff, 0, 2, "model warning"),
771+{ validateCatalog: false },
772+"model warning options",
723773);
724774});
725775@@ -774,9 +824,9 @@ describe("runSetupWizard", () => {
774824775825expect(promptAuthChoiceGrouped).toHaveBeenCalledTimes(2);
776826expect(applyAuthChoice).toHaveBeenCalledTimes(2);
777-expect(applyAuthChoice).toHaveBeenNthCalledWith(
778-2,
779-expect.objectContaining({
827+expectRecordFields(
828+getMockCallArg(applyAuthChoice, 1, 0, "retry auth choice"),
829+{
780830authChoice: "demo-provider-two",
781831config: {
782832plugins: {
@@ -787,7 +837,8 @@ describe("runSetupWizard", () => {
787837},
788838},
789839},
790-}),
840+},
841+"retry auth choice params",
791842);
792843});
793844@@ -914,11 +965,13 @@ describe("runSetupWizard", () => {
914965}
915966}
916967917-expect(probeGatewayReachable).toHaveBeenCalledWith(
918-expect.objectContaining({
968+expectRecordFields(
969+getMockCallArg(probeGatewayReachable, 0, 0, "gateway probe"),
970+{
919971url: "ws://127.0.0.1:18789",
920972password: "gateway-ref-password", // pragma: allowlist secret
921-}),
973+},
974+"gateway probe params",
922975);
923976});
924977@@ -945,10 +998,12 @@ describe("runSetupWizard", () => {
945998prompter,
946999);
9471000948-expect(configureGatewayForSetup).toHaveBeenCalledWith(
949-expect.objectContaining({
1001+expectRecordFields(
1002+getMockCallArg(configureGatewayForSetup, 0, 0, "gateway setup"),
1003+{
9501004secretInputMode: "ref", // pragma: allowlist secret
951-}),
1005+},
1006+"gateway setup params",
9521007);
9531008});
9541009@@ -1038,13 +1093,19 @@ describe("runSetupWizard", () => {
10381093prompter,
10391094);
104010951041-expect(resolvePluginSetupProvider).toHaveBeenCalledWith(
1042-expect.objectContaining({
1096+expectRecordFields(
1097+getMockCallArg(resolvePluginSetupProvider, 0, 0, "plugin setup provider"),
1098+{
10431099provider: "openai-codex",
10441100pluginIds: ["openai"],
1045-}),
1101+},
1102+"plugin setup provider params",
10461103);
10471104expect(resolvePluginProvidersRuntime).not.toHaveBeenCalled();
1048-expect(promptDefaultModel).toHaveBeenCalledWith(expect.objectContaining({ allowKeep: false }));
1105+expectRecordFields(
1106+getMockCallArg(promptDefaultModel, 0, 0, "default model prompt"),
1107+{ allowKeep: false },
1108+"default model prompt params",
1109+);
10491110});
10501111});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。