@zuplo/cli 6.69.5 → 6.69.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/dist/__tests__/integration/custom-domain.integration.test.js +4 -4
  2. package/dist/__tests__/integration/custom-domain.integration.test.js.map +1 -1
  3. package/dist/__tests__/integration/jest-mocks-setup.js +1 -0
  4. package/dist/__tests__/integration/jest-mocks-setup.js.map +1 -1
  5. package/dist/__tests__/integration/list.integration.test.js +2 -2
  6. package/dist/__tests__/integration/list.integration.test.js.map +1 -1
  7. package/dist/__tests__/integration/tunnel.integration.test.js +14 -14
  8. package/dist/__tests__/integration/tunnel.integration.test.js.map +1 -1
  9. package/dist/__tests__/integration/variable.integration.test.js +4 -4
  10. package/dist/__tests__/integration/variable.integration.test.js.map +1 -1
  11. package/dist/__tests__/integration/whoami.integration.test.js +2 -5
  12. package/dist/__tests__/integration/whoami.integration.test.js.map +1 -1
  13. package/dist/cli.js +12 -6
  14. package/dist/cli.js.map +1 -1
  15. package/dist/common/api/client.d.ts +40 -0
  16. package/dist/common/api/client.d.ts.map +1 -0
  17. package/dist/common/api/client.js +92 -0
  18. package/dist/common/api/client.js.map +1 -0
  19. package/dist/common/output.d.ts +4 -0
  20. package/dist/common/output.d.ts.map +1 -1
  21. package/dist/common/output.js +4 -1
  22. package/dist/common/output.js.map +1 -1
  23. package/dist/custom-domain/create/handler.d.ts.map +1 -1
  24. package/dist/custom-domain/create/handler.js +12 -27
  25. package/dist/custom-domain/create/handler.js.map +1 -1
  26. package/dist/custom-domain/delete/handler.d.ts.map +1 -1
  27. package/dist/custom-domain/delete/handler.js +25 -54
  28. package/dist/custom-domain/delete/handler.js.map +1 -1
  29. package/dist/custom-domain/list/handler.d.ts.map +1 -1
  30. package/dist/custom-domain/list/handler.js +15 -29
  31. package/dist/custom-domain/list/handler.js.map +1 -1
  32. package/dist/custom-domain/update/handler.d.ts.map +1 -1
  33. package/dist/custom-domain/update/handler.js +12 -27
  34. package/dist/custom-domain/update/handler.js.map +1 -1
  35. package/dist/list/handler.d.ts.map +1 -1
  36. package/dist/list/handler.js +41 -59
  37. package/dist/list/handler.js.map +1 -1
  38. package/dist/mtls-certificates/create/handler.d.ts.map +1 -1
  39. package/dist/mtls-certificates/create/handler.js +9 -23
  40. package/dist/mtls-certificates/create/handler.js.map +1 -1
  41. package/dist/mtls-certificates/delete/handler.d.ts.map +1 -1
  42. package/dist/mtls-certificates/delete/handler.js +8 -20
  43. package/dist/mtls-certificates/delete/handler.js.map +1 -1
  44. package/dist/mtls-certificates/describe/handler.d.ts.map +1 -1
  45. package/dist/mtls-certificates/describe/handler.js +17 -31
  46. package/dist/mtls-certificates/describe/handler.js.map +1 -1
  47. package/dist/mtls-certificates/disable/handler.d.ts.map +1 -1
  48. package/dist/mtls-certificates/disable/handler.js +9 -26
  49. package/dist/mtls-certificates/disable/handler.js.map +1 -1
  50. package/dist/mtls-certificates/list/handler.d.ts.map +1 -1
  51. package/dist/mtls-certificates/list/handler.js +22 -36
  52. package/dist/mtls-certificates/list/handler.js.map +1 -1
  53. package/dist/mtls-certificates/update/handler.d.ts.map +1 -1
  54. package/dist/mtls-certificates/update/handler.js +14 -29
  55. package/dist/mtls-certificates/update/handler.js.map +1 -1
  56. package/dist/proxies/create/handler.d.ts.map +1 -1
  57. package/dist/proxies/create/handler.js +9 -22
  58. package/dist/proxies/create/handler.js.map +1 -1
  59. package/dist/proxies/delete/handler.d.ts.map +1 -1
  60. package/dist/proxies/delete/handler.js +8 -21
  61. package/dist/proxies/delete/handler.js.map +1 -1
  62. package/dist/proxies/describe/handler.d.ts.map +1 -1
  63. package/dist/proxies/describe/handler.js +7 -22
  64. package/dist/proxies/describe/handler.js.map +1 -1
  65. package/dist/proxies/update/handler.d.ts.map +1 -1
  66. package/dist/proxies/update/handler.js +9 -22
  67. package/dist/proxies/update/handler.js.map +1 -1
  68. package/dist/tsconfig.tsbuildinfo +1 -1
  69. package/dist/tunnel/create/handler.d.ts.map +1 -1
  70. package/dist/tunnel/create/handler.js +8 -22
  71. package/dist/tunnel/create/handler.js.map +1 -1
  72. package/dist/tunnel/delete/handler.d.ts.map +1 -1
  73. package/dist/tunnel/delete/handler.js +16 -30
  74. package/dist/tunnel/delete/handler.js.map +1 -1
  75. package/dist/tunnel/describe/handler.d.ts.map +1 -1
  76. package/dist/tunnel/describe/handler.js +7 -21
  77. package/dist/tunnel/describe/handler.js.map +1 -1
  78. package/dist/tunnel/list/handler.d.ts.map +1 -1
  79. package/dist/tunnel/list/handler.js +13 -28
  80. package/dist/tunnel/list/handler.js.map +1 -1
  81. package/dist/tunnel/rotate-token/handler.d.ts.map +1 -1
  82. package/dist/tunnel/rotate-token/handler.js +7 -21
  83. package/dist/tunnel/rotate-token/handler.js.map +1 -1
  84. package/dist/tunnel/services/describe/handler.d.ts.map +1 -1
  85. package/dist/tunnel/services/describe/handler.js +7 -21
  86. package/dist/tunnel/services/describe/handler.js.map +1 -1
  87. package/dist/tunnel/services/update/handler.d.ts.map +1 -1
  88. package/dist/tunnel/services/update/handler.js +18 -32
  89. package/dist/tunnel/services/update/handler.js.map +1 -1
  90. package/dist/variable/create/handler.d.ts.map +1 -1
  91. package/dist/variable/create/handler.js +9 -24
  92. package/dist/variable/create/handler.js.map +1 -1
  93. package/dist/variable/update/handler.d.ts.map +1 -1
  94. package/dist/variable/update/handler.js +9 -24
  95. package/dist/variable/update/handler.js.map +1 -1
  96. package/dist/whoami/handler.d.ts.map +1 -1
  97. package/dist/whoami/handler.js +6 -18
  98. package/dist/whoami/handler.js.map +1 -1
  99. package/node_modules/@zuplo/core/package.json +1 -1
  100. package/node_modules/@zuplo/graphql/package.json +1 -1
  101. package/node_modules/@zuplo/openapi-tools/package.json +1 -1
  102. package/node_modules/@zuplo/otel/package.json +1 -1
  103. package/node_modules/@zuplo/runtime/package.json +1 -1
  104. package/package.json +6 -6
@@ -198,7 +198,7 @@ describe("Custom Domain Command Integration Tests", () => {
198
198
  await expect(executeCustomDomainCommand("list", {
199
199
  account: TEST_ACCOUNT_NAME,
200
200
  "api-key": TEST_AUTH_TOKEN,
201
- })).rejects.toThrow("Process would exit");
201
+ })).rejects.toThrow("Failed to list custom domains for account");
202
202
  expect(scope.isDone()).toBe(true);
203
203
  expect(mockPrintDiagnostics).toHaveBeenCalledWith("Error: Failed to list custom domains for your account. Try again later.", {
204
204
  error: "Forbidden",
@@ -300,7 +300,7 @@ describe("Custom Domain Command Integration Tests", () => {
300
300
  account: TEST_ACCOUNT_NAME,
301
301
  "api-key": TEST_AUTH_TOKEN,
302
302
  hostname: "https://bad.example.com",
303
- })).rejects.toThrow("Process would exit");
303
+ })).rejects.toThrow("Failed to create custom domain for account");
304
304
  expect(scope.isDone()).toBe(true);
305
305
  expect(mockPrintDiagnostics).toHaveBeenCalledWith("Error: Failed to create custom domain for your account. Check the arguments.", {
306
306
  title: "Bad Request",
@@ -386,7 +386,7 @@ describe("Custom Domain Command Integration Tests", () => {
386
386
  account: TEST_ACCOUNT_NAME,
387
387
  "api-key": TEST_AUTH_TOKEN,
388
388
  hostname: "missing.example.com",
389
- })).rejects.toThrow("Process would exit");
389
+ })).rejects.toThrow("Failed to update custom domain for account");
390
390
  expect(scope.isDone()).toBe(true);
391
391
  expect(mockPrintDiagnostics).toHaveBeenCalledWith("Error: Failed to update custom domain for your account. Check the arguments.", {
392
392
  title: "Not Found",
@@ -548,7 +548,7 @@ describe("Custom Domain Command Integration Tests", () => {
548
548
  "api-key": TEST_AUTH_TOKEN,
549
549
  hostname: "missing.example.com",
550
550
  "deployment-name": undefined,
551
- })).rejects.toThrow("Process would exit");
551
+ })).rejects.toThrow("Failed to delete custom domain for account");
552
552
  expect(listScope.isDone()).toBe(true);
553
553
  expect(scope.isDone()).toBe(true);
554
554
  expect(mockPrintDiagnostics).toHaveBeenCalledWith("Error: Failed to delete custom domain for your account. Check the arguments.", {
@@ -1 +1 @@
1
- {"version":3,"file":"custom-domain.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/custom-domain.integration.test.ts"],"names":[],"mappings":"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","sourcesContent":["/// <reference types=\"jest\" />\n\nimport nock from \"nock\";\nimport yargs from \"yargs/yargs\";\nimport customDomainCommand from \"../../cmds/custom-domain/index.js\";\nimport {\n cleanupTest,\n RequestCapture,\n setupAuthenticatedNock,\n setupTestEnvironment,\n TEST_ACCOUNT_NAME,\n TEST_API_BASE,\n TEST_AUTH_TOKEN,\n} from \"./test-utils.js\";\n\ntype CustomDomainSubcommand = \"create\" | \"delete\" | \"list\" | \"update\";\n\nasync function executeCustomDomainCommand(\n subcommand: CustomDomainSubcommand,\n args: {\n account?: string;\n \"api-key\"?: string;\n hostname?: string;\n \"deployment-name\"?: string;\n \"custom-domain-type\"?: \"api\" | \"dev-portal\";\n output?: \"default\" | \"json\";\n }\n) {\n const yargsInstance = yargs([])\n .command(customDomainCommand)\n .help(false)\n .version(false)\n .exitProcess(false);\n\n const commandArgs = [\"custom-domain\", subcommand];\n\n if (args.account) {\n commandArgs.push(\"--account\", args.account);\n }\n\n if (args[\"api-key\"]) {\n commandArgs.push(\"--api-key\", args[\"api-key\"]);\n }\n\n if (args.hostname) {\n commandArgs.push(\"--hostname\", args.hostname);\n }\n\n if (args[\"deployment-name\"]) {\n commandArgs.push(\"--deployment-name\", args[\"deployment-name\"]);\n }\n\n if (args[\"custom-domain-type\"]) {\n commandArgs.push(\"--custom-domain-type\", args[\"custom-domain-type\"]);\n }\n\n if (args.output) {\n commandArgs.push(\"--output\", args.output);\n }\n\n return await yargsInstance.parse(commandArgs);\n}\n\nconst mockPrintResult = jest.mocked(\n require(\"../../common/output.js\").printResultToConsoleAndExitGracefully\n);\nconst mockPrintTable = jest.mocked(\n require(\"../../common/output.js\").printTableToConsoleAndExitGracefully\n);\nconst mockPrintJson = jest.mocked(\n require(\"../../common/output.js\").printJsonToConsoleAndExitGracefully\n);\nconst mockPrintDiagnostics = jest.mocked(\n require(\"../../common/output.js\").printDiagnosticsToConsole\n);\nconst mockPrintCriticalFailure = jest.mocked(\n require(\"../../common/output.js\").printCriticalFailureToConsoleAndExit\n);\n\ndescribe(\"Custom Domain Command Integration Tests\", () => {\n let requestCapture: RequestCapture;\n\n beforeEach(() => {\n setupTestEnvironment();\n requestCapture = new RequestCapture();\n nock.disableNetConnect();\n jest.clearAllMocks();\n jest.spyOn(process, \"exit\").mockImplementation((() => {\n throw new Error(\"Process would exit\");\n }) as typeof process.exit);\n });\n\n afterEach(() => {\n cleanupTest();\n requestCapture.clear();\n });\n\n describe(\"Custom Domain List Command\", () => {\n it(\"should intercept GET request to list custom domains\", async () => {\n const mockResponse = {\n data: [\n {\n id: \"cd_1\",\n accountName: TEST_ACCOUNT_NAME,\n projectName: \"project-a\",\n hostname: \"api.example.com\",\n provider: \"cloudflare\",\n deployments: [\n {\n deploymentName: \"deployment-a\",\n branch: \"main\",\n environmentType: \"PRODUCTION\",\n isDefault: true,\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n },\n ],\n },\n {\n id: \"cd_2\",\n accountName: TEST_ACCOUNT_NAME,\n projectName: \"\",\n hostname: \"orphan.example.com\",\n provider: \"alias\",\n deployments: [],\n },\n ],\n offset: 0,\n limit: 100,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(200, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeCustomDomainCommand(\"list\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintTable).toHaveBeenCalledWith([\n {\n hostname: \"api.example.com\",\n provider: \"cloudflare\",\n \"project-name\": \"project-a\",\n \"deployment-name\": \"deployment-a\",\n branch: \"main\",\n \"environment-type\": \"PRODUCTION\",\n stage: \"api\",\n \"is-default\": true,\n cname: \"cname.zuplo.api\",\n },\n {\n hostname: \"orphan.example.com\",\n provider: \"alias\",\n \"project-name\": \"\",\n \"deployment-name\": \"\",\n branch: \"\",\n \"environment-type\": \"\",\n stage: \"\",\n \"is-default\": \"\",\n cname: \"\",\n },\n ]);\n\n expect(requestCapture.getRequests()).toMatchSnapshot(\n \"custom-domain-list-requests\"\n );\n });\n\n it(\"should output flattened rows as JSON when requested\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(200, {\n data: [\n {\n id: \"cd_1\",\n accountName: TEST_ACCOUNT_NAME,\n projectName: \"project-a\",\n hostname: \"api.example.com\",\n provider: \"cloudflare\",\n deployments: [\n {\n deploymentName: \"deployment-a\",\n branch: \"main\",\n environmentType: \"PRODUCTION\",\n isDefault: true,\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n },\n ],\n },\n ],\n offset: 0,\n limit: 100,\n });\n\n await executeCustomDomainCommand(\"list\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n output: \"json\",\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintJson).toHaveBeenCalledWith([\n {\n hostname: \"api.example.com\",\n provider: \"cloudflare\",\n projectName: \"project-a\",\n deploymentName: \"deployment-a\",\n branch: \"main\",\n environmentType: \"PRODUCTION\",\n stage: \"api\",\n isDefault: true,\n cname: \"cname.zuplo.api\",\n },\n ]);\n });\n\n it(\"should handle empty custom domains list\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(200, {\n data: [],\n offset: 0,\n limit: 100,\n });\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeCustomDomainCommand(\"list\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintResult).toHaveBeenCalledWith(\"No custom domains found\");\n expect(requestCapture.getRequests()).toMatchSnapshot(\n \"custom-domain-list-empty-requests\"\n );\n });\n\n it(\"should handle API error responses\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(403, {\n error: \"Forbidden\",\n message: \"Access denied\",\n statusCode: 403,\n });\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await expect(\n executeCustomDomainCommand(\"list\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n })\n ).rejects.toThrow(\"Process would exit\");\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalledWith(\n \"Error: Failed to list custom domains for your account. Try again later.\",\n {\n error: \"Forbidden\",\n message: \"Access denied\",\n statusCode: 403,\n }\n );\n expect(requestCapture.getRequests()).toMatchSnapshot(\n \"custom-domain-list-error-requests\"\n );\n });\n });\n\n describe(\"Custom Domain Create Command\", () => {\n it(\"should intercept POST request to create custom domain\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .post(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(200, {\n hostname: \"api.example.com\",\n deploymentName: \"deployment-a\",\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n ownershipVerification: {\n name: \"_acme-challenge.api.example.com\",\n type: \"TXT\",\n value: \"verification-token\",\n },\n });\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeCustomDomainCommand(\"create\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"api.example.com\",\n \"deployment-name\": \"deployment-a\",\n \"custom-domain-type\": \"api\",\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintTable).toHaveBeenCalledWith({\n hostname: \"api.example.com\",\n \"deployment-name\": \"deployment-a\",\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n \"ownership-verification-name\": \"_acme-challenge.api.example.com\",\n \"ownership-verification-type\": \"TXT\",\n \"ownership-verification-value\": \"verification-token\",\n });\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"custom-domain-create-requests\");\n expect(capturedRequests[0].body).toEqual({\n hostname: \"api.example.com\",\n deploymentName: \"deployment-a\",\n stage: \"api\",\n });\n });\n\n it(\"should output the mutation result as JSON when requested\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .post(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(200, {\n hostname: \"api.example.com\",\n deploymentName: \"deployment-a\",\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n ownershipVerification: {\n name: \"_acme-challenge.api.example.com\",\n type: \"TXT\",\n value: \"verification-token\",\n },\n });\n\n await executeCustomDomainCommand(\"create\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"api.example.com\",\n \"deployment-name\": \"deployment-a\",\n output: \"json\",\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintJson).toHaveBeenCalledWith({\n hostname: \"api.example.com\",\n deploymentName: \"deployment-a\",\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n ownershipVerification: {\n name: \"_acme-challenge.api.example.com\",\n type: \"TXT\",\n value: \"verification-token\",\n },\n });\n });\n\n it(\"should handle custom domain creation error\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .post(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(400, {\n title: \"Bad Request\",\n detail: \"Invalid hostname\",\n status: 400,\n });\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await expect(\n executeCustomDomainCommand(\"create\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"https://bad.example.com\",\n })\n ).rejects.toThrow(\"Process would exit\");\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalledWith(\n \"Error: Failed to create custom domain for your account. Check the arguments.\",\n {\n title: \"Bad Request\",\n detail: \"Invalid hostname\",\n status: 400,\n }\n );\n expect(requestCapture.getRequests()).toMatchSnapshot(\n \"custom-domain-create-error-requests\"\n );\n });\n });\n\n describe(\"Custom Domain Update Command\", () => {\n it(\"should intercept PATCH request to reassign a custom domain\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .patch(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(200, {\n hostname: \"api.example.com\",\n deploymentName: \"deployment-b\",\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n ownershipVerification: null,\n });\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeCustomDomainCommand(\"update\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"api.example.com\",\n \"deployment-name\": \"deployment-b\",\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintTable).toHaveBeenCalledWith({\n hostname: \"api.example.com\",\n \"deployment-name\": \"deployment-b\",\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n \"ownership-verification-name\": \"\",\n \"ownership-verification-type\": \"\",\n \"ownership-verification-value\": \"\",\n });\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"custom-domain-update-requests\");\n expect(capturedRequests[0].body).toEqual({\n hostname: \"api.example.com\",\n deploymentName: \"deployment-b\",\n });\n });\n\n it(\"should send hostname only when detaching\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .patch(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(200, {\n hostname: \"api.example.com\",\n deploymentName: null,\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n ownershipVerification: null,\n });\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeCustomDomainCommand(\"update\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"api.example.com\",\n });\n\n expect(scope.isDone()).toBe(true);\n expect(requestCapture.getRequests()).toMatchSnapshot(\n \"custom-domain-update-detach-requests\"\n );\n expect(requestCapture.getRequests()[0].body).toEqual({\n hostname: \"api.example.com\",\n });\n });\n\n it(\"should handle update API errors\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .patch(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(404, {\n title: \"Not Found\",\n detail: \"The custom domain was not found on this account\",\n status: 404,\n });\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await expect(\n executeCustomDomainCommand(\"update\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"missing.example.com\",\n })\n ).rejects.toThrow(\"Process would exit\");\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalledWith(\n \"Error: Failed to update custom domain for your account. Check the arguments.\",\n {\n title: \"Not Found\",\n detail: \"The custom domain was not found on this account\",\n status: 404,\n }\n );\n expect(requestCapture.getRequests()).toMatchSnapshot(\n \"custom-domain-update-error-requests\"\n );\n });\n });\n\n describe(\"Custom Domain Delete Command\", () => {\n it(\"should intercept DELETE request with explicit deployment name\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .delete(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains?hostname=api.example.com&deploymentName=deployment-a`\n )\n .reply(204);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeCustomDomainCommand(\"delete\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"api.example.com\",\n \"deployment-name\": \"deployment-a\",\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintResult).toHaveBeenCalledWith(\n \"Custom domain api.example.com deleted successfully.\"\n );\n expect(requestCapture.getRequests()).toMatchSnapshot(\n \"custom-domain-delete-requests\"\n );\n });\n\n it(\"should output JSON for delete when requested\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .delete(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains?hostname=api.example.com&deploymentName=deployment-a`\n )\n .reply(204);\n\n await executeCustomDomainCommand(\"delete\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"api.example.com\",\n \"deployment-name\": \"deployment-a\",\n output: \"json\",\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintJson).toHaveBeenCalledWith({\n deleted: true,\n hostname: \"api.example.com\",\n deploymentName: \"deployment-a\",\n });\n });\n\n it(\"should auto-resolve a single deployment assignment before deleting\", async () => {\n const listScope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(200, {\n data: [\n {\n id: \"cd_1\",\n accountName: TEST_ACCOUNT_NAME,\n projectName: \"project-a\",\n hostname: \"api.example.com\",\n provider: \"cloudflare\",\n deployments: [\n {\n deploymentName: \"deployment-a\",\n branch: \"main\",\n environmentType: \"PRODUCTION\",\n isDefault: true,\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n },\n ],\n },\n ],\n offset: 0,\n limit: 100,\n });\n\n const deleteScope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .delete(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains?hostname=api.example.com&deploymentName=deployment-a`\n )\n .reply(204);\n\n listScope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n deleteScope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeCustomDomainCommand(\"delete\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"api.example.com\",\n });\n\n expect(listScope.isDone()).toBe(true);\n expect(deleteScope.isDone()).toBe(true);\n expect(requestCapture.getRequests()).toMatchSnapshot(\n \"custom-domain-delete-autoresolve-requests\"\n );\n });\n\n it(\"should fail locally when the hostname is assigned to multiple deployments\", async () => {\n const listScope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(200, {\n data: [\n {\n id: \"cd_1\",\n accountName: TEST_ACCOUNT_NAME,\n projectName: \"project-a\",\n hostname: \"api.example.com\",\n provider: \"cloudflare\",\n deployments: [\n {\n deploymentName: \"deployment-a\",\n branch: \"main\",\n environmentType: \"PRODUCTION\",\n isDefault: true,\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n },\n {\n deploymentName: \"deployment-b\",\n branch: \"preview\",\n environmentType: \"PREVIEW\",\n isDefault: false,\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n },\n ],\n },\n ],\n offset: 0,\n limit: 100,\n });\n\n listScope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await expect(\n executeCustomDomainCommand(\"delete\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"api.example.com\",\n })\n ).rejects.toThrow(\"Process would exit\");\n\n expect(listScope.isDone()).toBe(true);\n expect(mockPrintCriticalFailure).toHaveBeenCalledWith(\n \"Error: Custom domain api.example.com is assigned to multiple deployments. Rerun with --deployment-name.\"\n );\n expect(requestCapture.getRequests()).toMatchSnapshot(\n \"custom-domain-delete-multi-assignment-requests\"\n );\n });\n\n it(\"should handle delete API errors\", async () => {\n const listScope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(200, {\n data: [],\n offset: 0,\n limit: 100,\n });\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .delete(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains?hostname=missing.example.com`\n )\n .reply(404, {\n title: \"Not Found\",\n detail: \"The custom domain was not found on this account\",\n status: 404,\n });\n\n listScope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await expect(\n executeCustomDomainCommand(\"delete\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"missing.example.com\",\n \"deployment-name\": undefined,\n })\n ).rejects.toThrow(\"Process would exit\");\n\n expect(listScope.isDone()).toBe(true);\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalledWith(\n \"Error: Failed to delete custom domain for your account. Check the arguments.\",\n {\n title: \"Not Found\",\n detail: \"The custom domain was not found on this account\",\n status: 404,\n }\n );\n expect(requestCapture.getRequests()).toMatchSnapshot(\n \"custom-domain-delete-error-requests\"\n );\n });\n });\n});\n"]}
1
+ {"version":3,"file":"custom-domain.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/custom-domain.integration.test.ts"],"names":[],"mappings":"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","sourcesContent":["/// <reference types=\"jest\" />\n\nimport nock from \"nock\";\nimport yargs from \"yargs/yargs\";\nimport customDomainCommand from \"../../cmds/custom-domain/index.js\";\nimport {\n cleanupTest,\n RequestCapture,\n setupAuthenticatedNock,\n setupTestEnvironment,\n TEST_ACCOUNT_NAME,\n TEST_API_BASE,\n TEST_AUTH_TOKEN,\n} from \"./test-utils.js\";\n\ntype CustomDomainSubcommand = \"create\" | \"delete\" | \"list\" | \"update\";\n\nasync function executeCustomDomainCommand(\n subcommand: CustomDomainSubcommand,\n args: {\n account?: string;\n \"api-key\"?: string;\n hostname?: string;\n \"deployment-name\"?: string;\n \"custom-domain-type\"?: \"api\" | \"dev-portal\";\n output?: \"default\" | \"json\";\n }\n) {\n const yargsInstance = yargs([])\n .command(customDomainCommand)\n .help(false)\n .version(false)\n .exitProcess(false);\n\n const commandArgs = [\"custom-domain\", subcommand];\n\n if (args.account) {\n commandArgs.push(\"--account\", args.account);\n }\n\n if (args[\"api-key\"]) {\n commandArgs.push(\"--api-key\", args[\"api-key\"]);\n }\n\n if (args.hostname) {\n commandArgs.push(\"--hostname\", args.hostname);\n }\n\n if (args[\"deployment-name\"]) {\n commandArgs.push(\"--deployment-name\", args[\"deployment-name\"]);\n }\n\n if (args[\"custom-domain-type\"]) {\n commandArgs.push(\"--custom-domain-type\", args[\"custom-domain-type\"]);\n }\n\n if (args.output) {\n commandArgs.push(\"--output\", args.output);\n }\n\n return await yargsInstance.parse(commandArgs);\n}\n\nconst mockPrintResult = jest.mocked(\n require(\"../../common/output.js\").printResultToConsoleAndExitGracefully\n);\nconst mockPrintTable = jest.mocked(\n require(\"../../common/output.js\").printTableToConsoleAndExitGracefully\n);\nconst mockPrintJson = jest.mocked(\n require(\"../../common/output.js\").printJsonToConsoleAndExitGracefully\n);\nconst mockPrintDiagnostics = jest.mocked(\n require(\"../../common/output.js\").printDiagnosticsToConsole\n);\nconst mockPrintCriticalFailure = jest.mocked(\n require(\"../../common/output.js\").printCriticalFailureToConsoleAndExit\n);\n\ndescribe(\"Custom Domain Command Integration Tests\", () => {\n let requestCapture: RequestCapture;\n\n beforeEach(() => {\n setupTestEnvironment();\n requestCapture = new RequestCapture();\n nock.disableNetConnect();\n jest.clearAllMocks();\n jest.spyOn(process, \"exit\").mockImplementation((() => {\n throw new Error(\"Process would exit\");\n }) as typeof process.exit);\n });\n\n afterEach(() => {\n cleanupTest();\n requestCapture.clear();\n });\n\n describe(\"Custom Domain List Command\", () => {\n it(\"should intercept GET request to list custom domains\", async () => {\n const mockResponse = {\n data: [\n {\n id: \"cd_1\",\n accountName: TEST_ACCOUNT_NAME,\n projectName: \"project-a\",\n hostname: \"api.example.com\",\n provider: \"cloudflare\",\n deployments: [\n {\n deploymentName: \"deployment-a\",\n branch: \"main\",\n environmentType: \"PRODUCTION\",\n isDefault: true,\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n },\n ],\n },\n {\n id: \"cd_2\",\n accountName: TEST_ACCOUNT_NAME,\n projectName: \"\",\n hostname: \"orphan.example.com\",\n provider: \"alias\",\n deployments: [],\n },\n ],\n offset: 0,\n limit: 100,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(200, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeCustomDomainCommand(\"list\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintTable).toHaveBeenCalledWith([\n {\n hostname: \"api.example.com\",\n provider: \"cloudflare\",\n \"project-name\": \"project-a\",\n \"deployment-name\": \"deployment-a\",\n branch: \"main\",\n \"environment-type\": \"PRODUCTION\",\n stage: \"api\",\n \"is-default\": true,\n cname: \"cname.zuplo.api\",\n },\n {\n hostname: \"orphan.example.com\",\n provider: \"alias\",\n \"project-name\": \"\",\n \"deployment-name\": \"\",\n branch: \"\",\n \"environment-type\": \"\",\n stage: \"\",\n \"is-default\": \"\",\n cname: \"\",\n },\n ]);\n\n expect(requestCapture.getRequests()).toMatchSnapshot(\n \"custom-domain-list-requests\"\n );\n });\n\n it(\"should output flattened rows as JSON when requested\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(200, {\n data: [\n {\n id: \"cd_1\",\n accountName: TEST_ACCOUNT_NAME,\n projectName: \"project-a\",\n hostname: \"api.example.com\",\n provider: \"cloudflare\",\n deployments: [\n {\n deploymentName: \"deployment-a\",\n branch: \"main\",\n environmentType: \"PRODUCTION\",\n isDefault: true,\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n },\n ],\n },\n ],\n offset: 0,\n limit: 100,\n });\n\n await executeCustomDomainCommand(\"list\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n output: \"json\",\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintJson).toHaveBeenCalledWith([\n {\n hostname: \"api.example.com\",\n provider: \"cloudflare\",\n projectName: \"project-a\",\n deploymentName: \"deployment-a\",\n branch: \"main\",\n environmentType: \"PRODUCTION\",\n stage: \"api\",\n isDefault: true,\n cname: \"cname.zuplo.api\",\n },\n ]);\n });\n\n it(\"should handle empty custom domains list\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(200, {\n data: [],\n offset: 0,\n limit: 100,\n });\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeCustomDomainCommand(\"list\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintResult).toHaveBeenCalledWith(\"No custom domains found\");\n expect(requestCapture.getRequests()).toMatchSnapshot(\n \"custom-domain-list-empty-requests\"\n );\n });\n\n it(\"should handle API error responses\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(403, {\n error: \"Forbidden\",\n message: \"Access denied\",\n statusCode: 403,\n });\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await expect(\n executeCustomDomainCommand(\"list\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n })\n ).rejects.toThrow(\"Failed to list custom domains for account\");\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalledWith(\n \"Error: Failed to list custom domains for your account. Try again later.\",\n {\n error: \"Forbidden\",\n message: \"Access denied\",\n statusCode: 403,\n }\n );\n expect(requestCapture.getRequests()).toMatchSnapshot(\n \"custom-domain-list-error-requests\"\n );\n });\n });\n\n describe(\"Custom Domain Create Command\", () => {\n it(\"should intercept POST request to create custom domain\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .post(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(200, {\n hostname: \"api.example.com\",\n deploymentName: \"deployment-a\",\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n ownershipVerification: {\n name: \"_acme-challenge.api.example.com\",\n type: \"TXT\",\n value: \"verification-token\",\n },\n });\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeCustomDomainCommand(\"create\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"api.example.com\",\n \"deployment-name\": \"deployment-a\",\n \"custom-domain-type\": \"api\",\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintTable).toHaveBeenCalledWith({\n hostname: \"api.example.com\",\n \"deployment-name\": \"deployment-a\",\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n \"ownership-verification-name\": \"_acme-challenge.api.example.com\",\n \"ownership-verification-type\": \"TXT\",\n \"ownership-verification-value\": \"verification-token\",\n });\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"custom-domain-create-requests\");\n expect(capturedRequests[0].body).toEqual({\n hostname: \"api.example.com\",\n deploymentName: \"deployment-a\",\n stage: \"api\",\n });\n });\n\n it(\"should output the mutation result as JSON when requested\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .post(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(200, {\n hostname: \"api.example.com\",\n deploymentName: \"deployment-a\",\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n ownershipVerification: {\n name: \"_acme-challenge.api.example.com\",\n type: \"TXT\",\n value: \"verification-token\",\n },\n });\n\n await executeCustomDomainCommand(\"create\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"api.example.com\",\n \"deployment-name\": \"deployment-a\",\n output: \"json\",\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintJson).toHaveBeenCalledWith({\n hostname: \"api.example.com\",\n deploymentName: \"deployment-a\",\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n ownershipVerification: {\n name: \"_acme-challenge.api.example.com\",\n type: \"TXT\",\n value: \"verification-token\",\n },\n });\n });\n\n it(\"should handle custom domain creation error\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .post(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(400, {\n title: \"Bad Request\",\n detail: \"Invalid hostname\",\n status: 400,\n });\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await expect(\n executeCustomDomainCommand(\"create\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"https://bad.example.com\",\n })\n ).rejects.toThrow(\"Failed to create custom domain for account\");\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalledWith(\n \"Error: Failed to create custom domain for your account. Check the arguments.\",\n {\n title: \"Bad Request\",\n detail: \"Invalid hostname\",\n status: 400,\n }\n );\n expect(requestCapture.getRequests()).toMatchSnapshot(\n \"custom-domain-create-error-requests\"\n );\n });\n });\n\n describe(\"Custom Domain Update Command\", () => {\n it(\"should intercept PATCH request to reassign a custom domain\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .patch(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(200, {\n hostname: \"api.example.com\",\n deploymentName: \"deployment-b\",\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n ownershipVerification: null,\n });\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeCustomDomainCommand(\"update\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"api.example.com\",\n \"deployment-name\": \"deployment-b\",\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintTable).toHaveBeenCalledWith({\n hostname: \"api.example.com\",\n \"deployment-name\": \"deployment-b\",\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n \"ownership-verification-name\": \"\",\n \"ownership-verification-type\": \"\",\n \"ownership-verification-value\": \"\",\n });\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\"custom-domain-update-requests\");\n expect(capturedRequests[0].body).toEqual({\n hostname: \"api.example.com\",\n deploymentName: \"deployment-b\",\n });\n });\n\n it(\"should send hostname only when detaching\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .patch(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(200, {\n hostname: \"api.example.com\",\n deploymentName: null,\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n ownershipVerification: null,\n });\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeCustomDomainCommand(\"update\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"api.example.com\",\n });\n\n expect(scope.isDone()).toBe(true);\n expect(requestCapture.getRequests()).toMatchSnapshot(\n \"custom-domain-update-detach-requests\"\n );\n expect(requestCapture.getRequests()[0].body).toEqual({\n hostname: \"api.example.com\",\n });\n });\n\n it(\"should handle update API errors\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .patch(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(404, {\n title: \"Not Found\",\n detail: \"The custom domain was not found on this account\",\n status: 404,\n });\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await expect(\n executeCustomDomainCommand(\"update\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"missing.example.com\",\n })\n ).rejects.toThrow(\"Failed to update custom domain for account\");\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalledWith(\n \"Error: Failed to update custom domain for your account. Check the arguments.\",\n {\n title: \"Not Found\",\n detail: \"The custom domain was not found on this account\",\n status: 404,\n }\n );\n expect(requestCapture.getRequests()).toMatchSnapshot(\n \"custom-domain-update-error-requests\"\n );\n });\n });\n\n describe(\"Custom Domain Delete Command\", () => {\n it(\"should intercept DELETE request with explicit deployment name\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .delete(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains?hostname=api.example.com&deploymentName=deployment-a`\n )\n .reply(204);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeCustomDomainCommand(\"delete\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"api.example.com\",\n \"deployment-name\": \"deployment-a\",\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintResult).toHaveBeenCalledWith(\n \"Custom domain api.example.com deleted successfully.\"\n );\n expect(requestCapture.getRequests()).toMatchSnapshot(\n \"custom-domain-delete-requests\"\n );\n });\n\n it(\"should output JSON for delete when requested\", async () => {\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .delete(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains?hostname=api.example.com&deploymentName=deployment-a`\n )\n .reply(204);\n\n await executeCustomDomainCommand(\"delete\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"api.example.com\",\n \"deployment-name\": \"deployment-a\",\n output: \"json\",\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintJson).toHaveBeenCalledWith({\n deleted: true,\n hostname: \"api.example.com\",\n deploymentName: \"deployment-a\",\n });\n });\n\n it(\"should auto-resolve a single deployment assignment before deleting\", async () => {\n const listScope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(200, {\n data: [\n {\n id: \"cd_1\",\n accountName: TEST_ACCOUNT_NAME,\n projectName: \"project-a\",\n hostname: \"api.example.com\",\n provider: \"cloudflare\",\n deployments: [\n {\n deploymentName: \"deployment-a\",\n branch: \"main\",\n environmentType: \"PRODUCTION\",\n isDefault: true,\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n },\n ],\n },\n ],\n offset: 0,\n limit: 100,\n });\n\n const deleteScope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .delete(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains?hostname=api.example.com&deploymentName=deployment-a`\n )\n .reply(204);\n\n listScope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n deleteScope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeCustomDomainCommand(\"delete\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"api.example.com\",\n });\n\n expect(listScope.isDone()).toBe(true);\n expect(deleteScope.isDone()).toBe(true);\n expect(requestCapture.getRequests()).toMatchSnapshot(\n \"custom-domain-delete-autoresolve-requests\"\n );\n });\n\n it(\"should fail locally when the hostname is assigned to multiple deployments\", async () => {\n const listScope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(200, {\n data: [\n {\n id: \"cd_1\",\n accountName: TEST_ACCOUNT_NAME,\n projectName: \"project-a\",\n hostname: \"api.example.com\",\n provider: \"cloudflare\",\n deployments: [\n {\n deploymentName: \"deployment-a\",\n branch: \"main\",\n environmentType: \"PRODUCTION\",\n isDefault: true,\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n },\n {\n deploymentName: \"deployment-b\",\n branch: \"preview\",\n environmentType: \"PREVIEW\",\n isDefault: false,\n stage: \"api\",\n cname: \"cname.zuplo.api\",\n },\n ],\n },\n ],\n offset: 0,\n limit: 100,\n });\n\n listScope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await expect(\n executeCustomDomainCommand(\"delete\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"api.example.com\",\n })\n ).rejects.toThrow(\"Process would exit\");\n\n expect(listScope.isDone()).toBe(true);\n expect(mockPrintCriticalFailure).toHaveBeenCalledWith(\n \"Error: Custom domain api.example.com is assigned to multiple deployments. Rerun with --deployment-name.\"\n );\n expect(requestCapture.getRequests()).toMatchSnapshot(\n \"custom-domain-delete-multi-assignment-requests\"\n );\n });\n\n it(\"should handle delete API errors\", async () => {\n const listScope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(`/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains`)\n .reply(200, {\n data: [],\n offset: 0,\n limit: 100,\n });\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .delete(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/custom-domains?hostname=missing.example.com`\n )\n .reply(404, {\n title: \"Not Found\",\n detail: \"The custom domain was not found on this account\",\n status: 404,\n });\n\n listScope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await expect(\n executeCustomDomainCommand(\"delete\", {\n account: TEST_ACCOUNT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n hostname: \"missing.example.com\",\n \"deployment-name\": undefined,\n })\n ).rejects.toThrow(\"Failed to delete custom domain for account\");\n\n expect(listScope.isDone()).toBe(true);\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalledWith(\n \"Error: Failed to delete custom domain for your account. Check the arguments.\",\n {\n title: \"Not Found\",\n detail: \"The custom domain was not found on this account\",\n status: 404,\n }\n );\n expect(requestCapture.getRequests()).toMatchSnapshot(\n \"custom-domain-delete-error-requests\"\n );\n });\n });\n});\n"]}
@@ -15,6 +15,7 @@ jest.mock("../../common/output.js", () => ({
15
15
  fail: jest.fn(),
16
16
  suffixText: "",
17
17
  }),
18
+ printCriticalFailureToConsole: jest.fn(),
18
19
  printCriticalFailureToConsoleAndExit: jest.fn().mockImplementation(() => {
19
20
  throw new Error("Process would exit");
20
21
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"jest-mocks-setup.js","sourceRoot":"","sources":["../../../src/__tests__/integration/jest-mocks-setup.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Jest mocks setup - loaded before all test modules\n * This file contains all the Jest mocks that need to be applied before any modules are imported\n */\nimport type { Ora } from \"ora\";\n\nconst TEST_AUTH_TOKEN = \"test-auth-token-123\";\n\n// Mock all output functions to prevent actual console output and process.exit calls\njest.mock(\"../../common/output.js\", () => ({\n __esModule: true,\n default: jest.fn((argv: unknown) => argv), // setBlocking middleware function\n printResultToConsoleAndExitGracefully: jest.fn().mockResolvedValue(undefined),\n printTableToConsoleAndExitGracefully: jest.fn().mockResolvedValue(undefined),\n printJsonToConsoleAndExitGracefully: jest.fn().mockResolvedValue(undefined),\n printResultToConsole: jest.fn().mockResolvedValue(undefined),\n printJsonToConsole: jest.fn().mockResolvedValue(undefined),\n printDiagnosticsToConsole: jest.fn(),\n printWarningToConsole: jest.fn(),\n printSpinnerToConsole: jest.fn().mockReturnValue({\n stop: jest.fn(),\n succeed: jest.fn(),\n fail: jest.fn(),\n suffixText: \"\",\n } as unknown as Ora),\n printCriticalFailureToConsoleAndExit: jest.fn().mockImplementation(() => {\n throw new Error(\"Process would exit\");\n }),\n textOrJson: jest.fn((text: string) => {\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n }),\n}));\n\n// Mock analytics\njest.mock(\"../../common/analytics/lib.js\", () => ({\n captureEvent: jest.fn().mockResolvedValue(undefined),\n}));\n\n// Mock authentication middleware to add authToken\njest.mock(\"../../common/middleware/authentication.js\", () => ({\n authenticate: jest.fn((argv: Record<string, unknown>) => {\n argv.authToken = TEST_AUTH_TOKEN;\n return argv;\n }),\n authenticateNoPrompt: jest.fn((argv: Record<string, unknown>) => {\n argv.authToken = TEST_AUTH_TOKEN;\n return argv;\n }),\n}));\n\n// Mock inquirer prompts to return predictable values for tests\njest.mock(\"@inquirer/prompts\", () => {\n class MockSeparator {\n type = \"separator\";\n separator: string;\n constructor(separator = \"──────────────\") {\n this.separator = separator;\n }\n static isSeparator(item: unknown): boolean {\n return (\n item != null &&\n typeof item === \"object\" &&\n (item as { type?: unknown }).type === \"separator\"\n );\n }\n }\n return {\n Separator: MockSeparator,\n select: jest.fn().mockImplementation(({ choices }) => {\n if (Array.isArray(choices) && choices.length > 0) {\n // Skip separators (no `value`) and null-sentinel choices, then return\n // the first real choice's value.\n const firstReal =\n choices.find(\n (c) =>\n !MockSeparator.isSeparator(c) &&\n (c as { value?: unknown }).value !== null\n ) ?? choices[0];\n return Promise.resolve((firstReal as { value: unknown }).value);\n }\n return Promise.resolve(\"test-default\");\n }),\n input: jest.fn().mockResolvedValue(\"test-new-project\"),\n };\n});\n\n// Mock other middleware to pass through arguments\njest.mock(\"../../common/middleware/user-configuration.js\", () => ({\n configure: jest.fn((argv: unknown) => argv),\n}));\n\njest.mock(\"../../common/middleware/user-identification.js\", () => ({\n identify: jest.fn((argv: unknown) => argv),\n}));\n\n// Mock validators to pass through\njest.mock(\"../../common/validators/lib.js\", () => ({\n YargsChecker: jest.fn().mockImplementation(() => ({\n check: jest.fn().mockResolvedValue(true),\n })),\n}));\n\n// Mock showHelpOnNoSubcommand helper for commands with subcommands\njest.mock(\"../../common/handler.js\", () => ({\n showHelpOnNoSubcommand: jest.fn((configure) => ({\n builder: (yargs: unknown) => (configure as (y: unknown) => unknown)(yargs),\n handler: jest.fn(),\n })),\n}));\n\n// Mock token functions to prevent file system and HTTP calls\njest.mock(\"../../login/tokens.js\", () => ({\n getAuthToken: jest.fn().mockResolvedValue(TEST_AUTH_TOKEN),\n refreshAccessToken: jest.fn().mockResolvedValue({\n access_token: TEST_AUTH_TOKEN,\n id_token: \"mock-id-token\",\n expires_in: 3600,\n token_type: \"Bearer\",\n scope: \"openid profile email\",\n }),\n}));\n"]}
1
+ {"version":3,"file":"jest-mocks-setup.js","sourceRoot":"","sources":["../../../src/__tests__/integration/jest-mocks-setup.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Jest mocks setup - loaded before all test modules\n * This file contains all the Jest mocks that need to be applied before any modules are imported\n */\nimport type { Ora } from \"ora\";\n\nconst TEST_AUTH_TOKEN = \"test-auth-token-123\";\n\n// Mock all output functions to prevent actual console output and process.exit calls\njest.mock(\"../../common/output.js\", () => ({\n __esModule: true,\n default: jest.fn((argv: unknown) => argv), // setBlocking middleware function\n printResultToConsoleAndExitGracefully: jest.fn().mockResolvedValue(undefined),\n printTableToConsoleAndExitGracefully: jest.fn().mockResolvedValue(undefined),\n printJsonToConsoleAndExitGracefully: jest.fn().mockResolvedValue(undefined),\n printResultToConsole: jest.fn().mockResolvedValue(undefined),\n printJsonToConsole: jest.fn().mockResolvedValue(undefined),\n printDiagnosticsToConsole: jest.fn(),\n printWarningToConsole: jest.fn(),\n printSpinnerToConsole: jest.fn().mockReturnValue({\n stop: jest.fn(),\n succeed: jest.fn(),\n fail: jest.fn(),\n suffixText: \"\",\n } as unknown as Ora),\n printCriticalFailureToConsole: jest.fn(),\n printCriticalFailureToConsoleAndExit: jest.fn().mockImplementation(() => {\n throw new Error(\"Process would exit\");\n }),\n textOrJson: jest.fn((text: string) => {\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n }),\n}));\n\n// Mock analytics\njest.mock(\"../../common/analytics/lib.js\", () => ({\n captureEvent: jest.fn().mockResolvedValue(undefined),\n}));\n\n// Mock authentication middleware to add authToken\njest.mock(\"../../common/middleware/authentication.js\", () => ({\n authenticate: jest.fn((argv: Record<string, unknown>) => {\n argv.authToken = TEST_AUTH_TOKEN;\n return argv;\n }),\n authenticateNoPrompt: jest.fn((argv: Record<string, unknown>) => {\n argv.authToken = TEST_AUTH_TOKEN;\n return argv;\n }),\n}));\n\n// Mock inquirer prompts to return predictable values for tests\njest.mock(\"@inquirer/prompts\", () => {\n class MockSeparator {\n type = \"separator\";\n separator: string;\n constructor(separator = \"──────────────\") {\n this.separator = separator;\n }\n static isSeparator(item: unknown): boolean {\n return (\n item != null &&\n typeof item === \"object\" &&\n (item as { type?: unknown }).type === \"separator\"\n );\n }\n }\n return {\n Separator: MockSeparator,\n select: jest.fn().mockImplementation(({ choices }) => {\n if (Array.isArray(choices) && choices.length > 0) {\n // Skip separators (no `value`) and null-sentinel choices, then return\n // the first real choice's value.\n const firstReal =\n choices.find(\n (c) =>\n !MockSeparator.isSeparator(c) &&\n (c as { value?: unknown }).value !== null\n ) ?? choices[0];\n return Promise.resolve((firstReal as { value: unknown }).value);\n }\n return Promise.resolve(\"test-default\");\n }),\n input: jest.fn().mockResolvedValue(\"test-new-project\"),\n };\n});\n\n// Mock other middleware to pass through arguments\njest.mock(\"../../common/middleware/user-configuration.js\", () => ({\n configure: jest.fn((argv: unknown) => argv),\n}));\n\njest.mock(\"../../common/middleware/user-identification.js\", () => ({\n identify: jest.fn((argv: unknown) => argv),\n}));\n\n// Mock validators to pass through\njest.mock(\"../../common/validators/lib.js\", () => ({\n YargsChecker: jest.fn().mockImplementation(() => ({\n check: jest.fn().mockResolvedValue(true),\n })),\n}));\n\n// Mock showHelpOnNoSubcommand helper for commands with subcommands\njest.mock(\"../../common/handler.js\", () => ({\n showHelpOnNoSubcommand: jest.fn((configure) => ({\n builder: (yargs: unknown) => (configure as (y: unknown) => unknown)(yargs),\n handler: jest.fn(),\n })),\n}));\n\n// Mock token functions to prevent file system and HTTP calls\njest.mock(\"../../login/tokens.js\", () => ({\n getAuthToken: jest.fn().mockResolvedValue(TEST_AUTH_TOKEN),\n refreshAccessToken: jest.fn().mockResolvedValue({\n access_token: TEST_AUTH_TOKEN,\n id_token: \"mock-id-token\",\n expires_in: 3600,\n token_type: \"Bearer\",\n scope: \"openid profile email\",\n }),\n}));\n"]}
@@ -228,11 +228,11 @@ describe("List Command Integration Tests", () => {
228
228
  scope.on("request", (req, interceptor, body) => {
229
229
  requestCapture.capture(req, interceptor, body);
230
230
  });
231
- await executeListCommand({
231
+ await expect(executeListCommand({
232
232
  account: TEST_ACCOUNT_NAME,
233
233
  project: TEST_PROJECT_NAME,
234
234
  "api-key": TEST_AUTH_TOKEN,
235
- });
235
+ })).rejects.toThrow("Failed to list deployed APIs");
236
236
  expect(scope.isDone()).toBe(true);
237
237
  expect(mockPrintDiagnostics).toHaveBeenCalled();
238
238
  const capturedRequests = requestCapture.getRequests();
@@ -1 +1 @@
1
- {"version":3,"file":"list.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/list.integration.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Integration tests for the list command\n */\n/// <reference types=\"jest\" />\nimport nock from \"nock\";\nimport yargs from \"yargs/yargs\";\nimport listCommand from \"../../cmds/list.js\";\nimport {\n cleanupTest,\n RequestCapture,\n setupAuthenticatedNock,\n setupTestEnvironment,\n TEST_ACCOUNT_NAME,\n TEST_API_BASE,\n TEST_AUTH_TOKEN,\n TEST_PROJECT_NAME,\n} from \"./test-utils.js\";\n\n/**\n * Execute list command with given arguments using actual yargs command\n */\nasync function executeListCommand(args: {\n account?: string;\n project?: string;\n \"api-key\"?: string;\n \"show-details\"?: boolean;\n output?: \"default\" | \"json\";\n \"self-hosted-endpoint\"?: string;\n}) {\n const yargsInstance = yargs([])\n .command(listCommand)\n .help(false)\n .version(false)\n .exitProcess(false);\n\n // Build command line arguments\n const commandArgs = [\"list\"];\n\n if (args.account) {\n commandArgs.push(\"--account\", args.account);\n }\n\n if (args.project) {\n commandArgs.push(\"--project\", args.project);\n }\n\n if (args[\"api-key\"]) {\n commandArgs.push(\"--api-key\", args[\"api-key\"]);\n }\n\n if (args[\"show-details\"]) {\n commandArgs.push(\"--show-details\");\n }\n\n if (args.output) {\n commandArgs.push(\"--output\", args.output);\n }\n\n if (args[\"self-hosted-endpoint\"]) {\n commandArgs.push(\"--self-hosted-endpoint\", args[\"self-hosted-endpoint\"]);\n }\n\n // Parse and execute the command\n return await yargsInstance.parse(commandArgs);\n}\n\n// Get the mocked functions\nconst mockPrintResult = jest.mocked(\n require(\"../../common/output.js\").printResultToConsoleAndExitGracefully\n);\nconst mockPrintTable = jest.mocked(\n require(\"../../common/output.js\").printTableToConsoleAndExitGracefully\n);\nconst mockPrintJson = jest.mocked(\n require(\"../../common/output.js\").printJsonToConsoleAndExitGracefully\n);\nconst mockPrintDiagnostics = jest.mocked(\n require(\"../../common/output.js\").printDiagnosticsToConsole\n);\n\ndescribe(\"List Command Integration Tests\", () => {\n let requestCapture: RequestCapture;\n\n beforeEach(() => {\n setupTestEnvironment();\n requestCapture = new RequestCapture();\n\n // Disable real HTTP requests\n nock.disableNetConnect();\n\n // Clear mock calls from previous tests\n jest.clearAllMocks();\n });\n\n afterEach(() => {\n cleanupTest();\n requestCapture.clear();\n });\n\n describe(\"SaaS version\", () => {\n it(\"should intercept GET request to list deployments with account and project\", async () => {\n const mockResponse = {\n data: [\n { url: \"https://test-project-production.zuplo.app\" },\n { url: \"https://test-project-staging.zuplo.app\" },\n ],\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/deployments`\n )\n .reply(200, mockResponse);\n\n // Capture requests for snapshot testing\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n // Execute the list command through yargs\n await executeListCommand({\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n // Verify the request was made\n expect(scope.isDone()).toBe(true);\n\n // Verify the output function was called with the URLs\n const expectedOutput =\n \"https://test-project-production.zuplo.app\\nhttps://test-project-staging.zuplo.app\";\n expect(mockPrintResult).toHaveBeenCalledWith(expectedOutput);\n\n // Snapshot test for captured requests\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"list-deployments-saas-requests\"\n );\n });\n\n it(\"should handle empty deployments list\", async () => {\n const mockResponse = { data: [] };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/deployments`\n )\n .reply(200, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeListCommand({\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintResult).toHaveBeenCalledWith(\"\");\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"list-deployments-empty-requests\"\n );\n });\n\n it(\"should output deployment details as a table when requested\", async () => {\n const mockResponse = {\n data: [\n {\n projectName: TEST_PROJECT_NAME,\n name: \"test-project-main-3c1ac0c\",\n url: \"https://test-project-main-3c1ac0c.zuplo.app\",\n },\n {\n projectName: TEST_PROJECT_NAME,\n name: \"test-project-main-47839f2\",\n url: \"https://test-project-main-47839f2.d2.zuplo.dev\",\n },\n ],\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/deployments`\n )\n .reply(200, mockResponse);\n\n await executeListCommand({\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"show-details\": true,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintTable).toHaveBeenCalledWith([\n {\n \"project-name\": TEST_PROJECT_NAME,\n name: \"test-project-main-3c1ac0c\",\n url: \"https://test-project-main-3c1ac0c.zuplo.app\",\n },\n {\n \"project-name\": TEST_PROJECT_NAME,\n name: \"test-project-main-47839f2\",\n url: \"https://test-project-main-47839f2.d2.zuplo.dev\",\n },\n ]);\n });\n\n it(\"should support the -d alias for details output\", async () => {\n const mockResponse = {\n data: [\n {\n projectName: TEST_PROJECT_NAME,\n name: \"test-project-main-3c1ac0c\",\n url: \"https://test-project-main-3c1ac0c.zuplo.app\",\n },\n ],\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/deployments`\n )\n .reply(200, mockResponse);\n\n const yargsInstance = yargs([])\n .command(listCommand)\n .help(false)\n .version(false)\n .exitProcess(false);\n\n await yargsInstance.parse([\n \"list\",\n \"--account\",\n TEST_ACCOUNT_NAME,\n \"--project\",\n TEST_PROJECT_NAME,\n \"--api-key\",\n TEST_AUTH_TOKEN,\n \"-d\",\n ]);\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintTable).toHaveBeenCalledWith([\n {\n \"project-name\": TEST_PROJECT_NAME,\n name: \"test-project-main-3c1ac0c\",\n url: \"https://test-project-main-3c1ac0c.zuplo.app\",\n },\n ]);\n });\n\n it(\"should output JSON when requested\", async () => {\n const mockResponse = {\n data: [\n {\n projectName: TEST_PROJECT_NAME,\n name: \"test-project-main-3c1ac0c\",\n url: \"https://test-project-main-3c1ac0c.zuplo.app\",\n },\n ],\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/deployments`\n )\n .reply(200, mockResponse);\n\n await executeListCommand({\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n output: \"json\",\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintJson).toHaveBeenCalledWith([\n \"https://test-project-main-3c1ac0c.zuplo.app\",\n ]);\n });\n\n it(\"should output detailed JSON when requested\", async () => {\n const mockResponse = {\n data: [\n {\n projectName: TEST_PROJECT_NAME,\n name: \"test-project-main-3c1ac0c\",\n url: \"https://test-project-main-3c1ac0c.zuplo.app\",\n },\n ],\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/deployments`\n )\n .reply(200, mockResponse);\n\n await executeListCommand({\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"show-details\": true,\n output: \"json\",\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintJson).toHaveBeenCalledWith([\n {\n projectName: TEST_PROJECT_NAME,\n name: \"test-project-main-3c1ac0c\",\n url: \"https://test-project-main-3c1ac0c.zuplo.app\",\n },\n ]);\n });\n\n it(\"should handle API error responses\", async () => {\n const errorResponse = {\n error: \"Not Found\",\n message: \"Project not found\",\n statusCode: 404,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/deployments`\n )\n .reply(404, errorResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeListCommand({\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalled();\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"list-deployments-error-requests\"\n );\n });\n });\n\n describe(\"Self-hosted version\", () => {\n it(\"should intercept GET request to self-hosted endpoint\", async () => {\n const selfHostedEndpoint = \"https://my-zuplo.company.com\";\n const mockResponse = {\n data: [\n {\n projectName: \"project-1\",\n deploymentName: \"deployment-1\",\n deploymentUrl: \"https://my-zuplo.company.com/project1\",\n },\n {\n projectName: \"project-2\",\n deploymentName: \"deployment-2\",\n deploymentUrl: \"https://my-zuplo.company.com/project2\",\n },\n ],\n };\n\n const scope = setupAuthenticatedNock(nock(selfHostedEndpoint))\n .get(\"/v1/deployments\")\n .reply(200, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeListCommand({\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"self-hosted-endpoint\": selfHostedEndpoint,\n });\n\n expect(scope.isDone()).toBe(true);\n const expectedOutput =\n \"https://my-zuplo.company.com/project1\\nhttps://my-zuplo.company.com/project2\";\n expect(mockPrintResult).toHaveBeenCalledWith(expectedOutput);\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"list-deployments-self-hosted-requests\"\n );\n });\n });\n\n describe(\"Request headers validation\", () => {\n it(\"should include correct authorization headers\", async () => {\n const mockResponse = { data: [{ url: \"https://test.zuplo.app\" }] };\n\n const scope = nock(TEST_API_BASE)\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/deployments`\n )\n .matchHeader(\"authorization\", `Bearer ${TEST_AUTH_TOKEN}`)\n .reply(200, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeListCommand({\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintResult).toHaveBeenCalledWith(\"https://test.zuplo.app\");\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"list-deployments-headers-validation\"\n );\n });\n });\n});\n"]}
1
+ {"version":3,"file":"list.integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/integration/list.integration.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Integration tests for the list command\n */\n/// <reference types=\"jest\" />\nimport nock from \"nock\";\nimport yargs from \"yargs/yargs\";\nimport listCommand from \"../../cmds/list.js\";\nimport {\n cleanupTest,\n RequestCapture,\n setupAuthenticatedNock,\n setupTestEnvironment,\n TEST_ACCOUNT_NAME,\n TEST_API_BASE,\n TEST_AUTH_TOKEN,\n TEST_PROJECT_NAME,\n} from \"./test-utils.js\";\n\n/**\n * Execute list command with given arguments using actual yargs command\n */\nasync function executeListCommand(args: {\n account?: string;\n project?: string;\n \"api-key\"?: string;\n \"show-details\"?: boolean;\n output?: \"default\" | \"json\";\n \"self-hosted-endpoint\"?: string;\n}) {\n const yargsInstance = yargs([])\n .command(listCommand)\n .help(false)\n .version(false)\n .exitProcess(false);\n\n // Build command line arguments\n const commandArgs = [\"list\"];\n\n if (args.account) {\n commandArgs.push(\"--account\", args.account);\n }\n\n if (args.project) {\n commandArgs.push(\"--project\", args.project);\n }\n\n if (args[\"api-key\"]) {\n commandArgs.push(\"--api-key\", args[\"api-key\"]);\n }\n\n if (args[\"show-details\"]) {\n commandArgs.push(\"--show-details\");\n }\n\n if (args.output) {\n commandArgs.push(\"--output\", args.output);\n }\n\n if (args[\"self-hosted-endpoint\"]) {\n commandArgs.push(\"--self-hosted-endpoint\", args[\"self-hosted-endpoint\"]);\n }\n\n // Parse and execute the command\n return await yargsInstance.parse(commandArgs);\n}\n\n// Get the mocked functions\nconst mockPrintResult = jest.mocked(\n require(\"../../common/output.js\").printResultToConsoleAndExitGracefully\n);\nconst mockPrintTable = jest.mocked(\n require(\"../../common/output.js\").printTableToConsoleAndExitGracefully\n);\nconst mockPrintJson = jest.mocked(\n require(\"../../common/output.js\").printJsonToConsoleAndExitGracefully\n);\nconst mockPrintDiagnostics = jest.mocked(\n require(\"../../common/output.js\").printDiagnosticsToConsole\n);\n\ndescribe(\"List Command Integration Tests\", () => {\n let requestCapture: RequestCapture;\n\n beforeEach(() => {\n setupTestEnvironment();\n requestCapture = new RequestCapture();\n\n // Disable real HTTP requests\n nock.disableNetConnect();\n\n // Clear mock calls from previous tests\n jest.clearAllMocks();\n });\n\n afterEach(() => {\n cleanupTest();\n requestCapture.clear();\n });\n\n describe(\"SaaS version\", () => {\n it(\"should intercept GET request to list deployments with account and project\", async () => {\n const mockResponse = {\n data: [\n { url: \"https://test-project-production.zuplo.app\" },\n { url: \"https://test-project-staging.zuplo.app\" },\n ],\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/deployments`\n )\n .reply(200, mockResponse);\n\n // Capture requests for snapshot testing\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n // Execute the list command through yargs\n await executeListCommand({\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n // Verify the request was made\n expect(scope.isDone()).toBe(true);\n\n // Verify the output function was called with the URLs\n const expectedOutput =\n \"https://test-project-production.zuplo.app\\nhttps://test-project-staging.zuplo.app\";\n expect(mockPrintResult).toHaveBeenCalledWith(expectedOutput);\n\n // Snapshot test for captured requests\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"list-deployments-saas-requests\"\n );\n });\n\n it(\"should handle empty deployments list\", async () => {\n const mockResponse = { data: [] };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/deployments`\n )\n .reply(200, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeListCommand({\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintResult).toHaveBeenCalledWith(\"\");\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"list-deployments-empty-requests\"\n );\n });\n\n it(\"should output deployment details as a table when requested\", async () => {\n const mockResponse = {\n data: [\n {\n projectName: TEST_PROJECT_NAME,\n name: \"test-project-main-3c1ac0c\",\n url: \"https://test-project-main-3c1ac0c.zuplo.app\",\n },\n {\n projectName: TEST_PROJECT_NAME,\n name: \"test-project-main-47839f2\",\n url: \"https://test-project-main-47839f2.d2.zuplo.dev\",\n },\n ],\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/deployments`\n )\n .reply(200, mockResponse);\n\n await executeListCommand({\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"show-details\": true,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintTable).toHaveBeenCalledWith([\n {\n \"project-name\": TEST_PROJECT_NAME,\n name: \"test-project-main-3c1ac0c\",\n url: \"https://test-project-main-3c1ac0c.zuplo.app\",\n },\n {\n \"project-name\": TEST_PROJECT_NAME,\n name: \"test-project-main-47839f2\",\n url: \"https://test-project-main-47839f2.d2.zuplo.dev\",\n },\n ]);\n });\n\n it(\"should support the -d alias for details output\", async () => {\n const mockResponse = {\n data: [\n {\n projectName: TEST_PROJECT_NAME,\n name: \"test-project-main-3c1ac0c\",\n url: \"https://test-project-main-3c1ac0c.zuplo.app\",\n },\n ],\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/deployments`\n )\n .reply(200, mockResponse);\n\n const yargsInstance = yargs([])\n .command(listCommand)\n .help(false)\n .version(false)\n .exitProcess(false);\n\n await yargsInstance.parse([\n \"list\",\n \"--account\",\n TEST_ACCOUNT_NAME,\n \"--project\",\n TEST_PROJECT_NAME,\n \"--api-key\",\n TEST_AUTH_TOKEN,\n \"-d\",\n ]);\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintTable).toHaveBeenCalledWith([\n {\n \"project-name\": TEST_PROJECT_NAME,\n name: \"test-project-main-3c1ac0c\",\n url: \"https://test-project-main-3c1ac0c.zuplo.app\",\n },\n ]);\n });\n\n it(\"should output JSON when requested\", async () => {\n const mockResponse = {\n data: [\n {\n projectName: TEST_PROJECT_NAME,\n name: \"test-project-main-3c1ac0c\",\n url: \"https://test-project-main-3c1ac0c.zuplo.app\",\n },\n ],\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/deployments`\n )\n .reply(200, mockResponse);\n\n await executeListCommand({\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n output: \"json\",\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintJson).toHaveBeenCalledWith([\n \"https://test-project-main-3c1ac0c.zuplo.app\",\n ]);\n });\n\n it(\"should output detailed JSON when requested\", async () => {\n const mockResponse = {\n data: [\n {\n projectName: TEST_PROJECT_NAME,\n name: \"test-project-main-3c1ac0c\",\n url: \"https://test-project-main-3c1ac0c.zuplo.app\",\n },\n ],\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/deployments`\n )\n .reply(200, mockResponse);\n\n await executeListCommand({\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"show-details\": true,\n output: \"json\",\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintJson).toHaveBeenCalledWith([\n {\n projectName: TEST_PROJECT_NAME,\n name: \"test-project-main-3c1ac0c\",\n url: \"https://test-project-main-3c1ac0c.zuplo.app\",\n },\n ]);\n });\n\n it(\"should handle API error responses\", async () => {\n const errorResponse = {\n error: \"Not Found\",\n message: \"Project not found\",\n statusCode: 404,\n };\n\n const scope = setupAuthenticatedNock(nock(TEST_API_BASE))\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/deployments`\n )\n .reply(404, errorResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await expect(\n executeListCommand({\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n })\n ).rejects.toThrow(\"Failed to list deployed APIs\");\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintDiagnostics).toHaveBeenCalled();\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"list-deployments-error-requests\"\n );\n });\n });\n\n describe(\"Self-hosted version\", () => {\n it(\"should intercept GET request to self-hosted endpoint\", async () => {\n const selfHostedEndpoint = \"https://my-zuplo.company.com\";\n const mockResponse = {\n data: [\n {\n projectName: \"project-1\",\n deploymentName: \"deployment-1\",\n deploymentUrl: \"https://my-zuplo.company.com/project1\",\n },\n {\n projectName: \"project-2\",\n deploymentName: \"deployment-2\",\n deploymentUrl: \"https://my-zuplo.company.com/project2\",\n },\n ],\n };\n\n const scope = setupAuthenticatedNock(nock(selfHostedEndpoint))\n .get(\"/v1/deployments\")\n .reply(200, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeListCommand({\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n \"self-hosted-endpoint\": selfHostedEndpoint,\n });\n\n expect(scope.isDone()).toBe(true);\n const expectedOutput =\n \"https://my-zuplo.company.com/project1\\nhttps://my-zuplo.company.com/project2\";\n expect(mockPrintResult).toHaveBeenCalledWith(expectedOutput);\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"list-deployments-self-hosted-requests\"\n );\n });\n });\n\n describe(\"Request headers validation\", () => {\n it(\"should include correct authorization headers\", async () => {\n const mockResponse = { data: [{ url: \"https://test.zuplo.app\" }] };\n\n const scope = nock(TEST_API_BASE)\n .get(\n `/v1/accounts/${TEST_ACCOUNT_NAME}/projects/${TEST_PROJECT_NAME}/deployments`\n )\n .matchHeader(\"authorization\", `Bearer ${TEST_AUTH_TOKEN}`)\n .reply(200, mockResponse);\n\n scope.on(\"request\", (req, interceptor, body) => {\n requestCapture.capture(req, interceptor, body);\n });\n\n await executeListCommand({\n account: TEST_ACCOUNT_NAME,\n project: TEST_PROJECT_NAME,\n \"api-key\": TEST_AUTH_TOKEN,\n });\n\n expect(scope.isDone()).toBe(true);\n expect(mockPrintResult).toHaveBeenCalledWith(\"https://test.zuplo.app\");\n\n const capturedRequests = requestCapture.getRequests();\n expect(capturedRequests).toMatchSnapshot(\n \"list-deployments-headers-validation\"\n );\n });\n });\n});\n"]}
@@ -102,11 +102,11 @@ describe("Tunnel Command Integration Tests", () => {
102
102
  scope.on("request", (req, interceptor, body) => {
103
103
  requestCapture.capture(req, interceptor, body);
104
104
  });
105
- await executeTunnelCommand("create", {
105
+ await expect(executeTunnelCommand("create", {
106
106
  account: TEST_ACCOUNT_NAME,
107
107
  "api-key": TEST_AUTH_TOKEN,
108
108
  "tunnel-name": testTunnelName,
109
- });
109
+ })).rejects.toThrow("Failed to create tunnel for account");
110
110
  expect(scope.isDone()).toBe(true);
111
111
  expect(mockPrintDiagnostics).toHaveBeenCalled();
112
112
  const capturedRequests = requestCapture.getRequests();
@@ -169,10 +169,10 @@ describe("Tunnel Command Integration Tests", () => {
169
169
  scope.on("request", (req, interceptor, body) => {
170
170
  requestCapture.capture(req, interceptor, body);
171
171
  });
172
- await executeTunnelCommand("list", {
172
+ await expect(executeTunnelCommand("list", {
173
173
  account: TEST_ACCOUNT_NAME,
174
174
  "api-key": TEST_AUTH_TOKEN,
175
- });
175
+ })).rejects.toThrow("Failed to list tunnels for account");
176
176
  expect(scope.isDone()).toBe(true);
177
177
  expect(mockPrintDiagnostics).toHaveBeenCalled();
178
178
  const capturedRequests = requestCapture.getRequests();
@@ -227,11 +227,11 @@ describe("Tunnel Command Integration Tests", () => {
227
227
  scope.on("request", (req, interceptor, body) => {
228
228
  requestCapture.capture(req, interceptor, body);
229
229
  });
230
- await executeTunnelCommand("delete", {
230
+ await expect(executeTunnelCommand("delete", {
231
231
  account: TEST_ACCOUNT_NAME,
232
232
  "api-key": TEST_AUTH_TOKEN,
233
233
  "tunnel-id": tunnelId,
234
- });
234
+ })).rejects.toThrow("Failed to delete tunnel for account");
235
235
  expect(scope.isDone()).toBe(true);
236
236
  expect(mockPrintDiagnostics).toHaveBeenCalled();
237
237
  const capturedRequests = requestCapture.getRequests();
@@ -276,11 +276,11 @@ describe("Tunnel Command Integration Tests", () => {
276
276
  scope.on("request", (req, interceptor, body) => {
277
277
  requestCapture.capture(req, interceptor, body);
278
278
  });
279
- await executeTunnelCommand("describe", {
279
+ await expect(executeTunnelCommand("describe", {
280
280
  account: TEST_ACCOUNT_NAME,
281
281
  "api-key": TEST_AUTH_TOKEN,
282
282
  "tunnel-id": tunnelId,
283
- });
283
+ })).rejects.toThrow("Failed to describe tunnel for account");
284
284
  expect(scope.isDone()).toBe(true);
285
285
  expect(mockPrintDiagnostics).toHaveBeenCalled();
286
286
  const capturedRequests = requestCapture.getRequests();
@@ -324,11 +324,11 @@ describe("Tunnel Command Integration Tests", () => {
324
324
  scope.on("request", (req, interceptor, body) => {
325
325
  requestCapture.capture(req, interceptor, body);
326
326
  });
327
- await executeTunnelCommand("rotate-token", {
327
+ await expect(executeTunnelCommand("rotate-token", {
328
328
  account: TEST_ACCOUNT_NAME,
329
329
  "api-key": TEST_AUTH_TOKEN,
330
330
  "tunnel-id": tunnelId,
331
- });
331
+ })).rejects.toThrow("Failed to rotate token for tunnel");
332
332
  expect(scope.isDone()).toBe(true);
333
333
  expect(mockPrintDiagnostics).toHaveBeenCalled();
334
334
  const capturedRequests = requestCapture.getRequests();
@@ -374,11 +374,11 @@ describe("Tunnel Command Integration Tests", () => {
374
374
  scope.on("request", (req, interceptor, body) => {
375
375
  requestCapture.capture(req, interceptor, body);
376
376
  });
377
- await executeTunnelServicesCommand("describe", {
377
+ await expect(executeTunnelServicesCommand("describe", {
378
378
  account: TEST_ACCOUNT_NAME,
379
379
  "api-key": TEST_AUTH_TOKEN,
380
380
  "tunnel-id": tunnelId,
381
- });
381
+ })).rejects.toThrow("Failed to describe services for tunnel");
382
382
  expect(scope.isDone()).toBe(true);
383
383
  expect(mockPrintDiagnostics).toHaveBeenCalled();
384
384
  const capturedRequests = requestCapture.getRequests();
@@ -414,12 +414,12 @@ describe("Tunnel Command Integration Tests", () => {
414
414
  scope.on("request", (req, interceptor, body) => {
415
415
  requestCapture.capture(req, interceptor, body);
416
416
  });
417
- await executeTunnelServicesCommand("update", {
417
+ await expect(executeTunnelServicesCommand("update", {
418
418
  account: TEST_ACCOUNT_NAME,
419
419
  "api-key": TEST_AUTH_TOKEN,
420
420
  "tunnel-id": tunnelId,
421
421
  "configuration-file": tempConfigFile,
422
- });
422
+ })).rejects.toThrow("Failed to update tunnel for account");
423
423
  expect(scope.isDone()).toBe(true);
424
424
  expect(mockPrintDiagnostics).toHaveBeenCalled();
425
425
  const capturedRequests = requestCapture.getRequests();