diff --git a/scripts/test-gateway.mjs b/scripts/test-gateway.mjs index 83fff12c..47bb3d3f 100644 --- a/scripts/test-gateway.mjs +++ b/scripts/test-gateway.mjs @@ -25,6 +25,16 @@ function composeArgs(projectName, args) { return ["compose", "-p", projectName, ...args]; } +function usesWindowsPathSyntax(filePath) { + return /^[A-Za-z]:($|[\\/])/.test(filePath) || filePath.startsWith("\\\\") || filePath.includes("\\"); +} + +function pathForInputs(...filePaths) { + const hasWindowsPath = filePaths.some((filePath) => usesWindowsPathSyntax(String(filePath || ""))); + + return hasWindowsPath ? path.win32 : path; +} + async function resolveRootDir(scriptPath) { const cwd = process.cwd(); @@ -66,21 +76,13 @@ export function resolveComposeProjectName(rootDir, env = process.env) { return explicit; } - return path.basename(rootDir); + return pathForInputs(rootDir).basename(rootDir); } export function resolveComposeNetworkName(rootDir, env = process.env) { return `${resolveComposeProjectName(rootDir, env)}_default`; } -function usesWindowsPathSyntax(filePath) { - return /^[A-Za-z]:[\\/]/.test(filePath) || filePath.startsWith("\\\\"); -} - -function pathForInputs(...filePaths) { - return filePaths.some((filePath) => usesWindowsPathSyntax(String(filePath || ""))) ? path.win32 : path; -} - export function resolveConfigDirectory(rootDir, explicitDir = null) { const pathModule = pathForInputs(rootDir, explicitDir); diff --git a/scripts/test-gateway.test.mjs b/scripts/test-gateway.test.mjs index 1441a8f6..254fb9b7 100644 --- a/scripts/test-gateway.test.mjs +++ b/scripts/test-gateway.test.mjs @@ -25,6 +25,10 @@ test("resolveComposeProjectName falls back to backend directory name", () => { assert.equal(resolveComposeProjectName("C:/Users/test/backend-php", {}), "backend-php"); }); +test("resolveComposeProjectName supports Windows backslash paths", () => { + assert.equal(resolveComposeProjectName("C:\\Users\\test\\backend-php", {}), "backend-php"); +}); + test("resolveComposeNetworkName derives the default compose network", () => { assert.equal( resolveComposeNetworkName("C:/Users/test/backend-php", { COMPOSE_PROJECT_NAME: "custom-stack" }), @@ -39,6 +43,20 @@ test("resolveConfigDirectory uses the default temp folder when none is provided" ); }); +test("resolveConfigDirectory supports Windows backslash paths", () => { + assert.equal( + resolveConfigDirectory("C:\\Users\\test\\backend-php"), + "C:\\Users\\test\\backend-php\\.tmp\\test-gateway" + ); +}); + +test("resolveConfigDirectory supports explicit Windows absolute paths", () => { + assert.equal( + resolveConfigDirectory("/workspace/api", "C:\\Users\\test\\gateway-config"), + "C:\\Users\\test\\gateway-config" + ); +}); + test("shouldClaimGateway requires a token when no credentials are present", () => { assert.equal(shouldClaimGateway({}, ""), true); assert.equal(shouldClaimGateway({ gatewayId: 12, agentToken: "secret" }, ""), false);