From a6ec92a50df86978ce5c5d3be910adc2db9e5562 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Wed, 10 Jun 2020 16:49:10 +0200 Subject: [PATCH] Use URLSearchParams --- plugins/catalog/src/api/CatalogClient.test.ts | 28 +++++++++++++++++++ plugins/catalog/src/api/CatalogClient.ts | 8 +----- 2 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 plugins/catalog/src/api/CatalogClient.test.ts diff --git a/plugins/catalog/src/api/CatalogClient.test.ts b/plugins/catalog/src/api/CatalogClient.test.ts new file mode 100644 index 0000000000..027fd41069 --- /dev/null +++ b/plugins/catalog/src/api/CatalogClient.test.ts @@ -0,0 +1,28 @@ +/* + * Copyright 2020 Spotify AB + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { CatalogClient } from './CatalogClient'; +import mockFetch from 'jest-fetch-mock'; + +describe('CatalogClient', () => { + it('builds entity search filters properly', async () => { + mockFetch.mockResponse('[]'); + const client = new CatalogClient({ apiOrigin: '', basePath: '' }); + const entities = await client.getEntities({ a: '1', รถ: '=' }); + expect(entities).toEqual([]); + expect(mockFetch).toBeCalledWith('/entities?a=1&%C3%B6=%3D'); + }); +}); diff --git a/plugins/catalog/src/api/CatalogClient.ts b/plugins/catalog/src/api/CatalogClient.ts index 5717735d9f..dcaab53307 100644 --- a/plugins/catalog/src/api/CatalogClient.ts +++ b/plugins/catalog/src/api/CatalogClient.ts @@ -87,13 +87,7 @@ export class CatalogClient implements CatalogApi { let path = `/entities`; if (filter) { - path += '?'; - path += Object.entries(filter) - .map( - ([key, value]) => - `${encodeURIComponent(key)}=${encodeURIComponent(value)}`, - ) - .join('&'); + path += `?${new URLSearchParams(filter).toString()}`; } return await this.getRequired(path);