Skip to content

Commit

Permalink
✅ Add tests for encodeParamsToSearchParams
Browse files Browse the repository at this point in the history
  • Loading branch information
cermakjiri committed Jun 30, 2021
1 parent 10fbdb2 commit 0ca805c
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 50 deletions.
Original file line number Diff line number Diff line change
@@ -1,40 +1,28 @@
import { getValidSearchParams, encodeParamsToSearchParams } from '../searchParams';
import { encodeParamsToSearchParams } from '../searchParams';

describe('getValidSearchParams', () => {
it('returns params without null, undefined or empty string', () => {
const params = new URLSearchParams({
a: 'null',
b: 'undefined',
c: '',
d: 'foo',
});

const validParams = getValidSearchParams(params);

expect(validParams.has('d')).toBe(true);
expect(Array.from(validParams.entries()).length).toBe(1);
});
});

describe.only('encodeParamsToSearchParams', () => {
describe('encodeParamsToSearchParams', () => {
it(`returns undefined if undefined params received`, () => {
expect(encodeParamsToSearchParams()).toBe(undefined);
expect(encodeParamsToSearchParams()).toBeInstanceOf(URLSearchParams);
});

it(`returns received params if they're instace of URLSearchParams`, () => {
const params = new URLSearchParams();
expect(encodeParamsToSearchParams(params)).toBe(params);
});

// TODO:
it.skip(`encodes object literal to an instance of URLSearchParams`, () => {
it(`encodes object literal to an instance of URLSearchParams`, () => {
const params = {
a: 1,
b: ['a', 'b'],
b: [1, 2],
c: 'foo',
d: true,
};

// TODO: continue here
// const result = encodeParamsToSearchParams(params);
const result = encodeParamsToSearchParams(params);

expect(result.get('a')).toBe('1');
expect(result.getAll('b')).toEqual(['1', '2']);
expect(result.get('c')).toBe('foo');
expect(result.get('d')).toBe('true');
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import type { GeneralConfig } from '../../../core/general-config';

import type { DefaultRequestConfig } from '../../config';

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

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

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

const searchParams = encodeParamsToSearchParams(requestConfig.params);
url.search = getValidSearchParams(searchParams).toString();
url.search = encodeParamsToSearchParams(requestConfig.params).toString();

return url.toString();
} catch (e) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,8 @@
import type { RequestSearchParams } from '../../../../types';

// TODO: add test
export function getValidSearchParams(searchParams?: URLSearchParams): URLSearchParams {
const validSearchParams = new URLSearchParams();

if (searchParams !== undefined) {
for (const [name, value] of searchParams.entries()) {
validSearchParams.append(name, value);
}
}

return validSearchParams;
}

// TODO: add test
export function encodeParamsToSearchParams(params?: RequestSearchParams): URLSearchParams | undefined {
export function encodeParamsToSearchParams(params?: RequestSearchParams) {
if (params === undefined) {
return;
return new URLSearchParams();
}

if (params instanceof URLSearchParams) {
Expand All @@ -31,7 +17,7 @@ export function encodeParamsToSearchParams(params?: RequestSearchParams): URLSea

for (const [name, value] of Object.entries(params)) {
if (Array.isArray(value)) {
value.forEach(item => searchParams.append(name, item));
value.forEach(item => searchParams.append(name, String(item)));
} else {
searchParams.append(name, String(value));
}
Expand Down
14 changes: 8 additions & 6 deletions packages/@ackee/antonio-core/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,10 +82,6 @@ export type ResponseData =
| IterableStream
| null;

interface Params {
[key: string]: string | number;
}

export type RequestHeaders =
| Headers
| HeadersInit
Expand All @@ -103,7 +99,9 @@ export type RequestHeaders =
* console.assert(data.id === '1');
* ```
*/
export type RequestUriParams = Params;
export type RequestUriParams = {
[key: string]: string | number;
};

/**
* An instace of `URLSearchParams` or a plain object.
Expand All @@ -126,7 +124,11 @@ export type RequestUriParams = Params;
* });
* ```
*/
export type RequestSearchParams = URLSearchParams | Params;
export type RequestSearchParams =
| URLSearchParams
| {
[key: string]: string | number | boolean | (string | number | boolean)[];
};

export interface FullRequestConfig extends Omit<RequestInit, 'body' | 'headers' | 'method'> {
/**
Expand Down

0 comments on commit 0ca805c

Please sign in to comment.