Skip to content

Commit 6396748

Browse files
authored
feat(request): decode URL strings for better Code Samples (#224)
* chore(request): add support for cookies in request building * test(buildHarRequest): add tests * feat(request): decode URL strings for better Code Samples Closes #223 * chore(request): add contentType to request * test(buildHarRequest): add test for decoding percent-encoded spaces and Unicode characters
1 parent b0f14cc commit 6396748

File tree

5 files changed

+398
-1
lines changed

5 files changed

+398
-1
lines changed

src/lib/codeSamples/buildHarRequest.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ export function buildHarRequest(
66
): HarRequest {
77
const harRequest: HarRequest = {
88
method: oaRequest.method.toUpperCase(),
9-
url: oaRequest.url.toString(),
9+
url: decodeURI(oaRequest.url.toString()),
1010
httpVersion: 'HTTP/1.1',
1111
headers: Object.entries(oaRequest.headers).map(([name, value]) => ({
1212
name: name.replace(/\b\w/g, letter => letter.toUpperCase()), // Convert to title case.

src/lib/codeSamples/buildRequest.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ export function buildRequest({
134134
body = undefined,
135135
headers = undefined,
136136
variables = {},
137+
cookies = {},
137138
}: Partial<OARequest>): OARequest {
138139
const resolvedVariables = setExamplesAsVariables(parameters, variables)
139140

@@ -194,5 +195,7 @@ export function buildRequest({
194195
variables: resolvedVariables,
195196
headers: resolvedHeaders,
196197
query: resolvedQuery,
198+
cookies,
199+
contentType: resolvedHeaders['content-type'],
197200
})
198201
}

test/lib/buildRequest.test.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,31 @@ describe('buildRequest', () => {
223223
})
224224
})
225225

226+
describe('cookies', () => {
227+
it('builds request with cookies', () => {
228+
const request = buildRequest({
229+
path: '/users',
230+
method: 'GET',
231+
baseUrl: 'https://api.example.com',
232+
parameters: [],
233+
cookies: { session: 'abc123' },
234+
})
235+
expect(request.cookies.session).toBe('abc123')
236+
})
237+
238+
it('builds request with multiple cookies', () => {
239+
const request = buildRequest({
240+
path: '/users',
241+
method: 'GET',
242+
baseUrl: 'https://api.example.com',
243+
parameters: [],
244+
cookies: { session: 'abc123', user: 'john' },
245+
})
246+
expect(request.cookies.session).toBe('abc123')
247+
expect(request.cookies.user).toBe('john')
248+
})
249+
})
250+
226251
describe('update request', () => {
227252
it('updates request with new headers', () => {
228253
const request = buildRequest({
@@ -345,4 +370,21 @@ describe('update request', () => {
345370

346371
expect(fixedRequest.query.search).toBeUndefined()
347372
})
373+
374+
it('updates request with new cookies', () => {
375+
const request = buildRequest({
376+
baseUrl: 'https://api.example.com',
377+
path: '/resource',
378+
method: 'GET',
379+
cookies: { session: 'old-session' },
380+
})
381+
382+
const fixedRequest = buildRequest({
383+
...request,
384+
cookies: { session: 'new-session', user: 'john' },
385+
})
386+
387+
expect(fixedRequest.cookies.session).toBe('new-session')
388+
expect(fixedRequest.cookies.user).toBe('john')
389+
})
348390
})

0 commit comments

Comments
 (0)