@dataroadinc/setup-auth
Version:
CLI tool and programmatic API for automated OAuth setup across cloud platforms
152 lines (151 loc) • 6.29 kB
JavaScript
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/);
});
});