Files
fusion/packages/dashboard/app/utils/__tests__/shell-connection-settings.test.ts
Fusion e411e3ce06 feat(FN-3403): add shell multi-profile support with connection manager onbo
Merges shell multi-profile support for desktop (FN-3403) — spanning new connection-manager flows, shell onboarding interoperability, mobile connection profiles, desktop IPC/shell-settings plumbing, and tokenized titlebar styles — with a secondary migration of the WhatsApp plugin to the Baileys pairi

Fusion-Task-Id: FN-3403
2026-05-07 18:35:45 -07:00

52 lines
2.1 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
import {
createOrUpdateProfile,
DEFAULT_WEB_SHELL_STATE,
deleteProfile,
normalizeShellState,
selectActiveProfile,
} from "../shell-connection-settings";
describe("shell-connection-settings", () => {
it("normalizes missing active profile to null", () => {
const state = normalizeShellState({
host: "mobile-shell",
activeProfileId: "missing",
profiles: [{ id: "p1", name: "Prod", serverUrl: "https://fusion.example.com", createdAt: "", updatedAt: "" }],
});
expect(state.activeProfileId).toBeNull();
expect(state.profiles).toHaveLength(1);
});
it("returns web fallback for empty shell state", () => {
expect(normalizeShellState(undefined)).toEqual(DEFAULT_WEB_SHELL_STATE);
});
it("throws unsupported errors in browser mode", async () => {
await expect(createOrUpdateProfile(null, { name: "Prod", serverUrl: "https://fusion.example.com" })).rejects.toThrow(
"Saving connection profiles is only available in native shell mode",
);
await expect(deleteProfile(null, "p1")).rejects.toThrow("Deleting connection profiles is only available in native shell mode");
await expect(selectActiveProfile(null, "p1")).rejects.toThrow(
"Switching connection profiles is only available in native shell mode",
);
});
it("delegates profile actions to shell API", async () => {
const shellApi = {
saveProfile: vi.fn(async () => ({ id: "p1", name: "Prod", serverUrl: "https://fusion.example.com", createdAt: "", updatedAt: "" })),
deleteProfile: vi.fn(async () => undefined),
setActiveProfile: vi.fn(async () => ({ host: "mobile-shell", activeProfileId: "p1", profiles: [] })),
} as const;
await createOrUpdateProfile(shellApi as never, { name: "Prod", serverUrl: "https://fusion.example.com" });
await deleteProfile(shellApi as never, "p1");
await selectActiveProfile(shellApi as never, "p1");
expect(shellApi.saveProfile).toHaveBeenCalled();
expect(shellApi.deleteProfile).toHaveBeenCalledWith("p1");
expect(shellApi.setActiveProfile).toHaveBeenCalledWith("p1");
});
});