Skip to content

Commit

Permalink
✅ Add tests for mergeRequestConfigs util
Browse files Browse the repository at this point in the history
  • Loading branch information
cermakjiri committed Aug 24, 2021
1 parent 8f7fc6c commit 41dc0af
Show file tree
Hide file tree
Showing 5 changed files with 137 additions and 54 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
import Headers from 'fetch-headers';
import { mergeHeaders, mergeRequestConfigs } from '../mergeRequestConfigs';

describe('mergeHeaders', () => {
it('returns empty headers if no args are provided', () => {
expect(mergeHeaders()).toBeInstanceOf(Headers);
expect([...mergeHeaders().keys()]).toHaveLength(0);
});

it('merges object with nothing', () => {
const headersA = { a: 'foo' };
const headersB = undefined;

expect(mergeHeaders(headersA, headersB).get('a')).toBe('foo');
expect([...mergeHeaders(headersA, headersB).entries()]).toHaveLength(1);
});

it('merges object with object', () => {
const headersA = { a: 'foo' };
const headersB = { a: 'bar' };

expect(mergeHeaders(headersA, headersB).get('a')).toBe('bar');
expect([...mergeHeaders(headersA, headersB).entries()]).toHaveLength(1);
});

it('merges object with headers', () => {
const headersA = { a: 'foo' };
const headersB = new Headers({ a: 'bar' });

expect(mergeHeaders(headersA, headersB).get('a')).toBe('bar');
expect([...mergeHeaders(headersA, headersB).entries()]).toHaveLength(1);
});

it('merges headers with headers', () => {
const headersA = new Headers({ a: 'foo' });
const headersB = new Headers({ a: 'bar' });

expect(mergeHeaders(headersA, headersB).get('a')).toBe('bar');
expect(headersA.get('a')).toBe('foo');
expect(headersB.get('a')).toBe('bar');
expect([...mergeHeaders(headersA, headersB).entries()]).toHaveLength(1);
});

it('merges headers with different headers', () => {
const headersA = new Headers({ a: 'foo' });
const headersB = new Headers({ b: 'bar' });

expect(mergeHeaders(headersA, headersB).get('a')).toBe('foo');
expect(mergeHeaders(headersA, headersB).get('b')).toBe('bar');
expect(headersA.get('a')).toBe('foo');
expect(headersB.get('b')).toBe('bar');
expect([...mergeHeaders(headersA, headersB).entries()]).toHaveLength(2);
});
});

describe('mergeRequestConfigs', () => {
let configA;

beforeEach(() => {
configA = {
headers: new Headers(),
};
});

it('assigns cancel to signal', () => {
const configB = {
cancelToken: 'cancelToken',
};

expect(mergeRequestConfigs(configA, configB)).toHaveProperty('signal');
});

it('merges uri params', () => {
const configB = {
uriParams: { id: '1' },
};

expect(mergeRequestConfigs(configA, configB)).toHaveProperty('uriParams');
expect(mergeRequestConfigs(configA, configB).uriParams).toHaveProperty('id');
expect(mergeRequestConfigs(configA, configB).uriParams?.id).toBe('1');
});

it('merges params (object with object)', () => {
// before each creates a new instance of configA object,
// so this mutation is fine
configA.params = {
foo: 'bar',
page: 2,
items: [4, 5, 6],
};
const configB = {
params: {
page: 1,
limit: 20,
items: [1, 2, 3],
},
};

const params = mergeRequestConfigs(configA, configB).params as URLSearchParams;

expect(mergeRequestConfigs(configA, configB)).toHaveProperty('params');
expect(configA).toHaveProperty('params');
expect(configA.params.page).toBe(2);
expect(configA.params.items).toEqual([4, 5, 6]);
expect(configB).toHaveProperty('params');
expect(params.get('page')).toBe('1');
expect(params.get('limit')).toBe('20');
expect(params.get('foo')).toBe('bar');
expect(params.getAll('items')).toEqual(['1', '2', '3']);
});

it('merges params (URLSearchParams with object)', () => {
configA.params = {
foo: 'bar',
page: 2,
};
const configB = {
params: new URLSearchParams({
page: '1',
limit: '20',
}),
};

const params = mergeRequestConfigs(configA, configB).params as URLSearchParams;

expect(mergeRequestConfigs(configA, configB)).toHaveProperty('params');
expect(configA).toHaveProperty('params');
expect(configA.params.page).toBe(2);
expect(configB).toHaveProperty('params');
expect(params.get('page')).toBe('1');
expect(params.get('limit')).toBe('20');
});
});

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import type { GeneralConfig } from '../../../core/general-config';

import type { RequestConfig } from '../../../../types';

import { encodeParamsToSearchParams } from './searchParams';
import { setUriParams } from './uriParams';

const removeSlashAtStartAndAtEnd = (chunk: string) => chunk.replace(/^\/|\/$/g, '');
Expand All @@ -24,7 +23,9 @@ export function createRequestUrl(

const url = joinUrlChunks(requestConfig.baseURL, requestUrl);

url.search = encodeParamsToSearchParams(requestConfig.params).toString();
if (requestConfig.params) {
url.search = requestConfig.params.toString();
}

return url.toString();
} catch (e) {
Expand Down

This file was deleted.

2 changes: 1 addition & 1 deletion packages/@ackee/antonio-core/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ export interface RequestConfig extends Omit<RequestInit, 'body' | 'headers' | 'm
/**
* @deprecated This prop is going to be removed in next major relase. Use `signal` prop instead.
*/
cancelToken?: AbortSignal;
cancelToken?: any;
}

export interface RequestResult<D = any> {
Expand Down

0 comments on commit 41dc0af

Please sign in to comment.