105 lines · 3.5 KB · TypeScript
RawDownload
import { EnvironmentId } from "@t3tools/contracts";import { beforeEach, describe, expect, it, vi } from "vitest"; const mockResolveRemotePairingTarget = vi.fn();const mockFetchRemoteEnvironmentDescriptor = vi.fn();const mockBootstrapRemoteBearerSession = vi.fn();const mockPersistSavedEnvironmentRecord = vi.fn();const mockWriteSavedEnvironmentBearerToken = vi.fn();const mockSetSavedEnvironmentRegistry = vi.fn();const mockUpsert = vi.fn();const mockListSavedEnvironmentRecords = vi.fn(); vi.mock("../remote/target", () => ({  resolveRemotePairingTarget: mockResolveRemotePairingTarget,})); vi.mock("../remote/api", () => ({  bootstrapRemoteBearerSession: mockBootstrapRemoteBearerSession,  fetchRemoteEnvironmentDescriptor: mockFetchRemoteEnvironmentDescriptor,  fetchRemoteSessionState: vi.fn(),  resolveRemoteWebSocketConnectionUrl: vi.fn(),})); vi.mock("~/localApi", () => ({  ensureLocalApi: () => ({    persistence: {      setSavedEnvironmentRegistry: mockSetSavedEnvironmentRegistry,    },  }),})); vi.mock("./catalog", () => ({  getSavedEnvironmentRecord: vi.fn(),  hasSavedEnvironmentRegistryHydrated: vi.fn(),  listSavedEnvironmentRecords: mockListSavedEnvironmentRecords,  persistSavedEnvironmentRecord: mockPersistSavedEnvironmentRecord,  readSavedEnvironmentBearerToken: vi.fn(),  removeSavedEnvironmentBearerToken: vi.fn(),  useSavedEnvironmentRegistryStore: {    getState: () => ({      upsert: mockUpsert,      remove: vi.fn(),      markConnected: vi.fn(),    }),  },  useSavedEnvironmentRuntimeStore: {    getState: () => ({      ensure: vi.fn(),      patch: vi.fn(),      clear: vi.fn(),    }),  },  waitForSavedEnvironmentRegistryHydration: vi.fn(),  writeSavedEnvironmentBearerToken: mockWriteSavedEnvironmentBearerToken,})); vi.mock("./connection", () => ({  createEnvironmentConnection: vi.fn(),})); describe("addSavedEnvironment", () => {  beforeEach(() => {    vi.resetModules();    vi.clearAllMocks();    mockResolveRemotePairingTarget.mockReturnValue({      httpBaseUrl: "https://remote.example.com/",      wsBaseUrl: "wss://remote.example.com/",      credential: "pairing-code",    });    mockFetchRemoteEnvironmentDescriptor.mockResolvedValue({      environmentId: EnvironmentId.makeUnsafe("environment-1"),      label: "Remote environment",    });    mockBootstrapRemoteBearerSession.mockResolvedValue({      sessionToken: "bearer-token",      role: "owner",    });    mockPersistSavedEnvironmentRecord.mockResolvedValue(undefined);    mockWriteSavedEnvironmentBearerToken.mockResolvedValue(false);    mockSetSavedEnvironmentRegistry.mockResolvedValue(undefined);    mockListSavedEnvironmentRecords.mockReturnValue([]);  });   it("rolls back persisted metadata when bearer token persistence fails", async () => {    const { addSavedEnvironment, resetEnvironmentServiceForTests } = await import("./service");     await expect(      addSavedEnvironment({        label: "Remote environment",        host: "remote.example.com",        pairingCode: "123456",      }),    ).rejects.toThrow("Unable to persist saved environment credentials.");     expect(mockPersistSavedEnvironmentRecord).toHaveBeenCalledTimes(1);    expect(mockWriteSavedEnvironmentBearerToken).toHaveBeenCalledWith(      EnvironmentId.makeUnsafe("environment-1"),      "bearer-token",    );    expect(mockSetSavedEnvironmentRegistry).toHaveBeenCalledWith([]);    expect(mockUpsert).not.toHaveBeenCalled();     await resetEnvironmentServiceForTests();  });});