Skip to content

Commit ceb3d50

Browse files
ygrishajevphryneas
andauthored
Ensures there is no unexpected slash in url before query params (#2470)
Co-authored-by: Lenz Weber-Tronic <[email protected]>
1 parent 4822769 commit ceb3d50

File tree

2 files changed

+21
-26
lines changed

2 files changed

+21
-26
lines changed

packages/toolkit/src/query/tests/utils.test.ts

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -74,31 +74,25 @@ describe('isDocumentVisible', () => {
7474
})
7575

7676
describe('joinUrls', () => {
77-
test('correctly joins variations of relative urls', () => {
78-
expect(joinUrls('/api/', '/banana')).toBe('/api/banana')
79-
expect(joinUrls('/api/', 'banana')).toBe('/api/banana')
80-
81-
expect(joinUrls('/api', 'banana')).toBe('/api/banana')
82-
expect(joinUrls('/api', '/banana/')).toBe('/api/banana/')
83-
84-
expect(joinUrls('', '/banana')).toBe('/banana')
85-
expect(joinUrls('', 'banana')).toBe('banana')
86-
})
87-
88-
test('correctly joins variations of absolute urls', () => {
89-
expect(joinUrls('https://example.com/api', 'banana')).toBe(
90-
'https://example.com/api/banana'
91-
)
92-
expect(joinUrls('https://example.com/api', '/banana')).toBe(
93-
'https://example.com/api/banana'
94-
)
95-
96-
expect(joinUrls('https://example.com/api/', 'banana')).toBe(
97-
'https://example.com/api/banana'
98-
)
99-
expect(joinUrls('https://example.com/api/', '/banana/')).toBe(
100-
'https://example.com/api/banana/'
101-
)
77+
test.each([
78+
['/api/', '/banana', '/api/banana'],
79+
['/api/', 'banana', '/api/banana'],
80+
['/api', '/banana', '/api/banana'],
81+
['/api', 'banana', '/api/banana'],
82+
['', '/banana', '/banana'],
83+
['', 'banana', 'banana'],
84+
['api', '?a=1', 'api?a=1'],
85+
['api/', '?a=1', 'api/?a=1'],
86+
['api', 'banana?a=1', 'api/banana?a=1'],
87+
['api/', 'banana?a=1', 'api/banana?a=1'],
88+
['https://example.com/api', 'banana', 'https://example.com/api/banana'],
89+
['https://example.com/api', '/banana', 'https://example.com/api/banana'],
90+
['https://example.com/api/', 'banana', 'https://example.com/api/banana'],
91+
['https://example.com/api/', '/banana', 'https://example.com/api/banana'],
92+
['https://example.com/api/', 'https://example.org', 'https://example.org'],
93+
['https://example.com/api/', '//example.org', '//example.org'],
94+
])('%s and %s join to %s', (base, url, expected) => {
95+
expect(joinUrls(base, url)).toBe(expected)
10296
})
10397
})
10498

packages/toolkit/src/query/utils/joinUrls.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@ export function joinUrls(
1818
return url
1919
}
2020

21+
const delimiter = base.endsWith('/') || !url.startsWith('?') ? '/' : ''
2122
base = withoutTrailingSlash(base)
2223
url = withoutLeadingSlash(url)
2324

24-
return `${base}/${url}`
25+
return `${base}${delimiter}${url}`;
2526
}

0 commit comments

Comments
 (0)