From f9f5514cd4bb6f7423580d1a5538a91f36d8e649 Mon Sep 17 00:00:00 2001 From: benpietsch Date: Wed, 10 Sep 2025 14:13:47 +0200 Subject: [PATCH] fix: remove baseUrl from buildUrl method in axios client to prevent duplicate baseUrls --- .../__tests__/utils-buildUrl.test.ts | 57 +++++++++++++++++++ .../@hey-api/client-axios/bundle/utils.ts | 1 - 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 packages/openapi-ts/src/plugins/@hey-api/client-axios/__tests__/utils-buildUrl.test.ts diff --git a/packages/openapi-ts/src/plugins/@hey-api/client-axios/__tests__/utils-buildUrl.test.ts b/packages/openapi-ts/src/plugins/@hey-api/client-axios/__tests__/utils-buildUrl.test.ts new file mode 100644 index 000000000..7b2317217 --- /dev/null +++ b/packages/openapi-ts/src/plugins/@hey-api/client-axios/__tests__/utils-buildUrl.test.ts @@ -0,0 +1,57 @@ +import { afterEach, describe, expect, it, vi } from 'vitest'; + +import type { QuerySerializer } from '../../client-core/bundle/bodySerializer'; + +describe('buildUrl', () => { + afterEach(() => { + vi.resetAllMocks(); + vi.resetModules(); + }); + + it.each([ + { + description: 'with query params', + expectedUrl: '/some-url?param1=some-query-param', + inputOptions: { + baseUrl: 'some-base-url', + path: { param1: 'some-path-param' }, + query: { param1: 'some-query-param' }, + querySerializer: (() => 'param1=some-query-param') as QuerySerializer, + url: '/some-url', + }, + }, + { + description: 'without query params', + expectedUrl: '/some-url', + inputOptions: { + baseUrl: 'some-base-url', + path: { param1: 'some-path-param' }, + query: undefined, + querySerializer: (() => '') as QuerySerializer, + url: '/some-url', + }, + }, + ])( + 'passes correct parameters to getUrl $description', + async ({ expectedUrl, inputOptions }) => { + const getUrlMock = vi.fn().mockReturnValue(expectedUrl); + vi.doMock('../../client-core/bundle/utils', async () => ({ + getUrl: getUrlMock, + })); + + const { buildUrl } = await import('../bundle/utils'); + + const builtUrl = buildUrl(inputOptions); + + expect(builtUrl).toBe(expectedUrl); + + // baseUrl is not included in the URL + expect(getUrlMock).toHaveBeenCalledExactlyOnceWith({ + path: inputOptions.path, + query: inputOptions.query, + querySerializer: inputOptions.querySerializer, + url: inputOptions.url, + }); + }, + ); +}); diff --git a/packages/openapi-ts/src/plugins/@hey-api/client-axios/bundle/utils.ts b/packages/openapi-ts/src/plugins/@hey-api/client-axios/bundle/utils.ts index fe6762acc..b75ffe68d 100644 --- a/packages/openapi-ts/src/plugins/@hey-api/client-axios/bundle/utils.ts +++ b/packages/openapi-ts/src/plugins/@hey-api/client-axios/bundle/utils.ts @@ -125,7 +125,6 @@ export const setAuthParams = async ({ export const buildUrl: Client['buildUrl'] = (options) => getUrl({ - baseUrl: options.baseURL as string, path: options.path, // let `paramsSerializer()` handle query params if it exists query: !options.paramsSerializer ? options.query : undefined, -- 2.54.0