diff --git a/packages/core/src/http/requestBuilder.ts b/packages/core/src/http/requestBuilder.ts index 316897c..0d57a98 100644 --- a/packages/core/src/http/requestBuilder.ts +++ b/packages/core/src/http/requestBuilder.ts @@ -112,7 +112,7 @@ export interface RequestBuilder { acceptJson(): void; accept(acceptHeaderValue: string): void; contentType(contentTypeHeaderValue: string): void; - header(name: string, value?: string | boolean | number | bigint | null): void; + header(name: string, value?: unknown): void; headers(headersToMerge: Record): void; query( name: string, @@ -271,14 +271,16 @@ export class DefaultRequestBuilder public contentType(contentTypeHeaderValue: string): void { this._contentType = contentTypeHeaderValue; } - public header( - name: string, - value?: string | boolean | number | bigint | null - ): void { + public header(name: string, value?: unknown): void { if (value === null || typeof value === 'undefined') { return; } - setHeader(this._headers, name, value.toString()); + if (typeof value === 'object') { + setHeader(this._headers, name, JSON.stringify(value)); + return; + } + // String() is used to convert boolean, number, bigint, or unknown types + setHeader(this._headers, name, String(value)); } public headers(headersToMerge: Record): void { mergeHeaders(this._headers, headersToMerge); diff --git a/packages/core/test/http/requestBuilder.test.ts b/packages/core/test/http/requestBuilder.test.ts index 5b34bc7..970b720 100644 --- a/packages/core/test/http/requestBuilder.test.ts +++ b/packages/core/test/http/requestBuilder.test.ts @@ -562,6 +562,30 @@ describe('test default request builder behavior with succesful responses', () => ); expect(optionalString.result).toEqual(undefined); }); + it('should test request builder configured with all kind of headers', async () => { + const reqBuilder = defaultRequestBuilder('GET', '/test/requestBuilder'); + reqBuilder.baseUrl('default'); + reqBuilder.header('test-header-missing1'); + reqBuilder.header('test-header-missing2', null); + reqBuilder.header('test-header1', 'test-value\'"\n1'); + reqBuilder.header('test-header2', true); + reqBuilder.header('test-header3', false); + reqBuilder.header('test-header4', 12345); + reqBuilder.header('test-header5', BigInt(12345)); + reqBuilder.header('test-header6', { key: 'v a l u e' }); + reqBuilder.header('test-header7', Symbol()); + + const apiResponse = await reqBuilder.callAsText(); + expect(apiResponse.request.headers).toEqual({ + 'test-header1': 'test-value\'"\n1', + 'test-header2': 'true', + 'test-header3': 'false', + 'test-header4': '12345', + 'test-header5': '12345', + 'test-header6': '{"key":"v a l u e"}', + 'test-header7': 'Symbol()', + }); + }); function customRequestBuilder( response: HttpResponse