UNPKG

@dataroadinc/setup-auth

Version:

CLI tool and programmatic API for automated OAuth setup across cloud platforms

152 lines (151 loc) 6.29 kB
import { describe, it, expect } from "vitest"; import { GcpOAuthWebClientManager } from "./client.js"; class MockGcpCloudCliClient { async run(args, _expectJson) { if (args.includes("create") && args.some(arg => arg.includes("fail"))) { throw new Error("gcloud error: creation failed"); } if (args.includes("list")) { if (args.some(arg => arg.includes("fail"))) { throw new Error("gcloud error: list failed"); } return "NAME DISPLAY_NAME\nid1 App1\nid2 App2"; } for (let i = 0; i < args.length - 1; i++) { if (String(args[i]) === "credentials" && String(args[i + 1]) === "describe") { if (args.some(arg => String(arg).includes("fail"))) { throw new Error("gcloud error: credential describe failed"); } return { secret: "mock-client-secret-12345", clientSecret: "mock-client-secret-12345", }; } } if (args.includes("describe")) { if (args[args.indexOf("describe") + 1] === "fail") { throw new Error("gcloud error: describe failed"); } return "name: oauth-clients/id1\ndisplayName: App1\nredirectUris: cb\norigins: o"; } if (args.includes("credentials") && args.includes("create")) { if (args.some(arg => arg.includes("fail"))) { throw new Error("gcloud error: credential creation failed"); } return ""; } if (args.includes("update")) { if (args[args.indexOf("update") + 1] === "fail") { throw new Error("gcloud error: update failed"); } } if (args.includes("delete")) { if (args[args.indexOf("delete") + 1] === "fail") { throw new Error("gcloud error: delete failed"); } } return ""; } async checkInstalled() { return; } async checkAuthenticated() { return; } async checkAlphaComponent() { return; } async autoAuthenticate() { return; } async checkApplicationDefaultAuthenticated() { return; } async autoApplicationDefaultAuthenticate() { return; } async ensureAlphaCommandAuth() { return; } async getVersion() { return "Google Cloud SDK 999.0.0"; } async getActiveAccount() { return "test@example.com"; } async getAdcEmail() { return "test@example.com"; } } describe("GcpOAuthWebClientManager Unit Tests", () => { it("createClient calls CLI with correct args and returns placeholder secret", async () => { const manager = new GcpOAuthWebClientManager("mock-project"); manager.cli = new MockGcpCloudCliClient(); const result = await manager.createClient("Test App", ["https://cb"], []); expect(result.clientId).toMatch(/^test-app-\d+$/); expect(result.clientSecret).toBe("mock-client-secret-12345"); }); it("createClient propagates errors from CLI", async () => { const manager = new GcpOAuthWebClientManager("mock-project"); manager.cli = new MockGcpCloudCliClient(); await expect(manager.createClient("fail", ["https://cb"], [])).rejects.toThrow(/gcloud error: creation failed/); }); it("listClients calls CLI and parses result", async () => { const manager = new GcpOAuthWebClientManager("mock-project"); manager.cli = new MockGcpCloudCliClient(); const result = await manager.listClients(); expect(result).toEqual([ { clientId: "id1", displayName: "App1" }, { clientId: "id2", displayName: "App2" }, ]); }); it("getClientDetails calls CLI and parses result", async () => { const manager = new GcpOAuthWebClientManager("mock-project"); manager.cli = new MockGcpCloudCliClient(); const result = await manager.getClientDetails("id1"); expect(result).toEqual({ clientId: "id1", displayName: "App1", redirectUris: ["cb"], origins: ["o"], }); }); it("updateRedirectUris calls CLI and does not throw on success", async () => { const manager = new GcpOAuthWebClientManager("mock-project"); manager.cli = new MockGcpCloudCliClient(); await expect(manager.updateRedirectUris("id1", ["cb"])).resolves.not.toThrow(); }); it("deleteClient calls CLI and does not throw on success", async () => { const manager = new GcpOAuthWebClientManager("mock-project"); manager.cli = new MockGcpCloudCliClient(); await expect(manager.deleteClient("id1")).resolves.not.toThrow(); }); it("listClients propagates errors from CLI", async () => { const manager = new GcpOAuthWebClientManager("fail-project"); const mockCli = new MockGcpCloudCliClient(); mockCli.run = async (args) => { if (args.includes("list")) { throw new Error("gcloud error: list failed"); } return {}; }; manager.cli = mockCli; await expect(manager.listClients()).rejects.toThrow(/gcloud error: list failed/); }); it("getClientDetails propagates errors from CLI", async () => { const manager = new GcpOAuthWebClientManager("mock-project"); manager.cli = new MockGcpCloudCliClient(); await expect(manager.getClientDetails("fail")).rejects.toThrow(/gcloud error/); }); it("updateRedirectUris propagates errors from CLI", async () => { const manager = new GcpOAuthWebClientManager("mock-project"); manager.cli = new MockGcpCloudCliClient(); await expect(manager.updateRedirectUris("fail", ["cb"])).rejects.toThrow(/gcloud error/); }); it("deleteClient propagates errors from CLI", async () => { const manager = new GcpOAuthWebClientManager("mock-project"); manager.cli = new MockGcpCloudCliClient(); await expect(manager.deleteClient("fail")).rejects.toThrow(/gcloud error/); }); });