From 25cfe915d2720ddd7bab22965d775e24b132509a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 20 Dec 2025 06:44:30 +0000 Subject: [PATCH] Add tests for Azure OpenAI URL normalization Co-authored-by: Siumauricio <47042324+Siumauricio@users.noreply.github.com> --- .../__test__/utils/azure-ai-provider.test.ts | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 apps/dokploy/__test__/utils/azure-ai-provider.test.ts diff --git a/apps/dokploy/__test__/utils/azure-ai-provider.test.ts b/apps/dokploy/__test__/utils/azure-ai-provider.test.ts new file mode 100644 index 000000000..2f44cc34d --- /dev/null +++ b/apps/dokploy/__test__/utils/azure-ai-provider.test.ts @@ -0,0 +1,83 @@ +import { describe, expect, it } from "vitest"; + +/** + * Test for Azure OpenAI endpoint URL normalization + * These tests verify that Azure OpenAI URLs are properly cleaned up + * to remove duplicate /v1 paths that would cause API errors + */ +describe("Azure OpenAI URL Normalization", () => { + it("should strip /openai/v1 from Azure URL", () => { + const input = "https://workspacename.openai.azure.com/openai/v1"; + let result = input; + result = result.replace(/\/openai\/v1\/?$/, ""); + result = result.replace(/\/v1\/?$/, ""); + result = result.replace(/\/$/, ""); + + expect(result).toBe("https://workspacename.openai.azure.com"); + }); + + it("should strip /v1 from Azure URL", () => { + const input = "https://workspacename.openai.azure.com/v1"; + let result = input; + result = result.replace(/\/openai\/v1\/?$/, ""); + result = result.replace(/\/v1\/?$/, ""); + result = result.replace(/\/$/, ""); + + expect(result).toBe("https://workspacename.openai.azure.com"); + }); + + it("should strip trailing slash from Azure URL", () => { + const input = "https://workspacename.openai.azure.com/"; + let result = input; + result = result.replace(/\/openai\/v1\/?$/, ""); + result = result.replace(/\/v1\/?$/, ""); + result = result.replace(/\/$/, ""); + + expect(result).toBe("https://workspacename.openai.azure.com"); + }); + + it("should handle clean Azure URL without modification", () => { + const input = "https://workspacename.openai.azure.com"; + let result = input; + result = result.replace(/\/openai\/v1\/?$/, ""); + result = result.replace(/\/v1\/?$/, ""); + result = result.replace(/\/$/, ""); + + expect(result).toBe("https://workspacename.openai.azure.com"); + }); + + it("should strip /openai/v1/ with trailing slash", () => { + const input = "https://workspacename.openai.azure.com/openai/v1/"; + let result = input; + result = result.replace(/\/openai\/v1\/?$/, ""); + result = result.replace(/\/v1\/?$/, ""); + result = result.replace(/\/$/, ""); + + expect(result).toBe("https://workspacename.openai.azure.com"); + }); + + it("should build correct deployments endpoint for Azure", () => { + const input = "https://workspacename.openai.azure.com/openai/v1"; + let apiUrl = input; + apiUrl = apiUrl.replace(/\/openai\/v1\/?$/, ""); + apiUrl = apiUrl.replace(/\/v1\/?$/, ""); + apiUrl = apiUrl.replace(/\/$/, ""); + + const deploymentsUrl = `${apiUrl}/openai/deployments?api-version=2023-05-15`; + + expect(deploymentsUrl).toBe( + "https://workspacename.openai.azure.com/openai/deployments?api-version=2023-05-15", + ); + }); + + it("should not strip /v1 from middle of path", () => { + const input = "https://workspacename.openai.azure.com/v1/something"; + let result = input; + result = result.replace(/\/openai\/v1\/?$/, ""); + result = result.replace(/\/v1\/?$/, ""); + result = result.replace(/\/$/, ""); + + // Should only strip trailing /v1, not /v1 in the middle + expect(result).toBe("https://workspacename.openai.azure.com/v1/something"); + }); +});