Skip to content

Commit 0ca805c

Browse files
committed
✅ Add tests for encodeParamsToSearchParams
1 parent 10fbdb2 commit 0ca805c

File tree

4 files changed

+25
-50
lines changed

4 files changed

+25
-50
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,28 @@
1-
import { getValidSearchParams, encodeParamsToSearchParams } from '../searchParams';
1+
import { encodeParamsToSearchParams } from '../searchParams';
22

3-
describe('getValidSearchParams', () => {
4-
it('returns params without null, undefined or empty string', () => {
5-
const params = new URLSearchParams({
6-
a: 'null',
7-
b: 'undefined',
8-
c: '',
9-
d: 'foo',
10-
});
11-
12-
const validParams = getValidSearchParams(params);
13-
14-
expect(validParams.has('d')).toBe(true);
15-
expect(Array.from(validParams.entries()).length).toBe(1);
16-
});
17-
});
18-
19-
describe.only('encodeParamsToSearchParams', () => {
3+
describe('encodeParamsToSearchParams', () => {
204
it(`returns undefined if undefined params received`, () => {
21-
expect(encodeParamsToSearchParams()).toBe(undefined);
5+
expect(encodeParamsToSearchParams()).toBeInstanceOf(URLSearchParams);
226
});
237

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

29-
// TODO:
30-
it.skip(`encodes object literal to an instance of URLSearchParams`, () => {
13+
it(`encodes object literal to an instance of URLSearchParams`, () => {
3114
const params = {
3215
a: 1,
33-
b: ['a', 'b'],
16+
b: [1, 2],
3417
c: 'foo',
18+
d: true,
3519
};
3620

37-
// TODO: continue here
38-
// const result = encodeParamsToSearchParams(params);
21+
const result = encodeParamsToSearchParams(params);
22+
23+
expect(result.get('a')).toBe('1');
24+
expect(result.getAll('b')).toEqual(['1', '2']);
25+
expect(result.get('c')).toBe('foo');
26+
expect(result.get('d')).toBe('true');
3927
});
4028
});

packages/@ackee/antonio-core/src/modules/request/utils/url/index.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { GeneralConfig } from '../../../core/general-config';
22

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

5-
import { getValidSearchParams, encodeParamsToSearchParams } from './searchParams';
5+
import { encodeParamsToSearchParams } from './searchParams';
66
import { setUriParams } from './uriParams';
77

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

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

27-
const searchParams = encodeParamsToSearchParams(requestConfig.params);
28-
url.search = getValidSearchParams(searchParams).toString();
27+
url.search = encodeParamsToSearchParams(requestConfig.params).toString();
2928

3029
return url.toString();
3130
} catch (e) {

packages/@ackee/antonio-core/src/modules/request/utils/url/searchParams.ts

+3-17
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,8 @@
11
import type { RequestSearchParams } from '../../../../types';
22

3-
// TODO: add test
4-
export function getValidSearchParams(searchParams?: URLSearchParams): URLSearchParams {
5-
const validSearchParams = new URLSearchParams();
6-
7-
if (searchParams !== undefined) {
8-
for (const [name, value] of searchParams.entries()) {
9-
validSearchParams.append(name, value);
10-
}
11-
}
12-
13-
return validSearchParams;
14-
}
15-
16-
// TODO: add test
17-
export function encodeParamsToSearchParams(params?: RequestSearchParams): URLSearchParams | undefined {
3+
export function encodeParamsToSearchParams(params?: RequestSearchParams) {
184
if (params === undefined) {
19-
return;
5+
return new URLSearchParams();
206
}
217

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

3218
for (const [name, value] of Object.entries(params)) {
3319
if (Array.isArray(value)) {
34-
value.forEach(item => searchParams.append(name, item));
20+
value.forEach(item => searchParams.append(name, String(item)));
3521
} else {
3622
searchParams.append(name, String(value));
3723
}

packages/@ackee/antonio-core/src/types.ts

+8-6
Original file line numberDiff line numberDiff line change
@@ -82,10 +82,6 @@ export type ResponseData =
8282
| IterableStream
8383
| null;
8484

85-
interface Params {
86-
[key: string]: string | number;
87-
}
88-
8985
export type RequestHeaders =
9086
| Headers
9187
| HeadersInit
@@ -103,7 +99,9 @@ export type RequestHeaders =
10399
* console.assert(data.id === '1');
104100
* ```
105101
*/
106-
export type RequestUriParams = Params;
102+
export type RequestUriParams = {
103+
[key: string]: string | number;
104+
};
107105

108106
/**
109107
* An instace of `URLSearchParams` or a plain object.
@@ -126,7 +124,11 @@ export type RequestUriParams = Params;
126124
* });
127125
* ```
128126
*/
129-
export type RequestSearchParams = URLSearchParams | Params;
127+
export type RequestSearchParams =
128+
| URLSearchParams
129+
| {
130+
[key: string]: string | number | boolean | (string | number | boolean)[];
131+
};
130132

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

0 commit comments

Comments
 (0)