From f4608ac80d1d536105b15d3d0160d7b068a151ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Chalifour?= Date: Fri, 4 May 2018 17:51:12 +0200 Subject: [PATCH] test: Test `searchClient` --- .../src/core/createInstantSearch.test.js | 68 +++++++++++++++++++ ...createInstantSearchManager.derived.test.js | 8 +-- .../createInstantSearchManager.error.test.js | 8 +-- .../createInstantSearchManager.result.test.js | 25 ++----- .../core/createInstantSearchManager.test.js | 35 ++++------ 5 files changed, 94 insertions(+), 50 deletions(-) diff --git a/packages/react-instantsearch/src/core/createInstantSearch.test.js b/packages/react-instantsearch/src/core/createInstantSearch.test.js index cf27b14353..f2796c9cad 100644 --- a/packages/react-instantsearch/src/core/createInstantSearch.test.js +++ b/packages/react-instantsearch/src/core/createInstantSearch.test.js @@ -43,6 +43,45 @@ describe('createInstantSearch', () => { ); }); + it('throws if algoliaClient is given with searchClient', () => { + const trigger = () => + shallow( + + ); + + expect(() => trigger()).toThrow(); + }); + + it('throws if appId is given with searchClient', () => { + const trigger = () => + shallow( + + ); + + expect(() => trigger()).toThrow(); + }); + + it('throws if apiKey is given with searchClient', () => { + const trigger = () => + shallow( + + ); + + expect(() => trigger()).toThrow(); + }); + it('updates the algoliaClient when appId or apiKey changes', () => { const wrapper = shallow( @@ -56,6 +95,16 @@ describe('createInstantSearch', () => { expect(algoliaClientFactory.mock.calls[2]).toEqual(['app', 'key2']); }); + it('uses the provided searchClient', () => { + const wrapper = shallow( + + ); + + expect(algoliaClientFactory).toHaveBeenCalledTimes(0); + expect(algoliaClient.addAlgoliaAgent).toHaveBeenCalledTimes(1); + expect(wrapper.props().searchClient).toBe(algoliaClient); + }); + it('uses the provided algoliaClient', () => { const wrapper = shallow( @@ -85,6 +134,25 @@ describe('createInstantSearch', () => { expect(newAlgoliaClient.addAlgoliaAgent).toHaveBeenCalledTimes(1); }); + it('updates the searchClient when provided searchClient is passed down', () => { + const newAlgoliaClient = { + addAlgoliaAgent: jest.fn(), + }; + + const wrapper = shallow( + + ); + + expect(algoliaClient.addAlgoliaAgent).toHaveBeenCalledTimes(1); + + wrapper.setProps({ + searchClient: newAlgoliaClient, + }); + + expect(wrapper.props().searchClient).toBe(newAlgoliaClient); + expect(newAlgoliaClient.addAlgoliaAgent).toHaveBeenCalledTimes(1); + }); + it('expect to create InstantSearch with a custom root props', () => { const root = { Root: 'span', diff --git a/packages/react-instantsearch/src/core/createInstantSearchManager.derived.test.js b/packages/react-instantsearch/src/core/createInstantSearchManager.derived.test.js index 7cb6649f74..c532a3bad7 100644 --- a/packages/react-instantsearch/src/core/createInstantSearchManager.derived.test.js +++ b/packages/react-instantsearch/src/core/createInstantSearchManager.derived.test.js @@ -47,7 +47,7 @@ describe('createInstantSearchManager', () => { indexName: 'first', initialState: {}, searchParameters: {}, - algoliaClient: client, + searchClient: client, }); ism.widgetsManager.registerWidget({ @@ -133,7 +133,7 @@ describe('createInstantSearchManager', () => { indexName: 'first', initialState: {}, searchParameters: {}, - algoliaClient: client, + searchClient: client, }); // @@ -199,7 +199,7 @@ describe('createInstantSearchManager', () => { indexName: 'first', initialState: {}, searchParameters: {}, - algoliaClient: client, + searchClient: client, }); ism.widgetsManager.registerWidget({ @@ -247,7 +247,7 @@ describe('createInstantSearchManager', () => { indexName: 'first', initialState: {}, searchParameters: {}, - algoliaClient: client, + searchClient: client, }); ism.widgetsManager.registerWidget({ diff --git a/packages/react-instantsearch/src/core/createInstantSearchManager.error.test.js b/packages/react-instantsearch/src/core/createInstantSearchManager.error.test.js index e68db97110..0e4582fe6d 100644 --- a/packages/react-instantsearch/src/core/createInstantSearchManager.error.test.js +++ b/packages/react-instantsearch/src/core/createInstantSearchManager.error.test.js @@ -43,7 +43,7 @@ describe('createInstantSearchManager errors', () => { indexName: 'index', initialState: {}, searchParameters: {}, - algoliaClient: client, + searchClient: client, }); ism.widgetsManager.registerWidget({ @@ -80,7 +80,7 @@ describe('createInstantSearchManager errors', () => { indexName: 'index', initialState: {}, searchParameters: {}, - algoliaClient: client, + searchClient: client, }); ism.onExternalStateUpdate({}); @@ -101,7 +101,7 @@ describe('createInstantSearchManager errors', () => { indexName: 'index', initialState: {}, searchParameters: {}, - algoliaClient: client, + searchClient: client, }); ism.onSearchForFacetValues({ facetName: 'facetName', query: 'query' }); @@ -124,7 +124,7 @@ describe('createInstantSearchManager errors', () => { indexName: 'index', initialState: {}, searchParameters: {}, - algoliaClient: client, + searchClient: client, }); ism.widgetsManager.registerWidget({ diff --git a/packages/react-instantsearch/src/core/createInstantSearchManager.result.test.js b/packages/react-instantsearch/src/core/createInstantSearchManager.result.test.js index b41286c118..d5f124a2c1 100644 --- a/packages/react-instantsearch/src/core/createInstantSearchManager.result.test.js +++ b/packages/react-instantsearch/src/core/createInstantSearchManager.result.test.js @@ -20,22 +20,7 @@ jest.mock('algoliasearch-helper', () => { }); const client = algoliaClient('latency', '249078a3d4337a8231f1665ec5a44966'); -client.addAlgoliaAgent = () => {}; -client.search = jest.fn((queries, cb) => { - if (cb) { - setImmediate(() => { - // We do not care about the returned values because we also control how - // it will handle in the helper - cb(null, null); - }); - return undefined; - } - - return new Promise(resolve => { - // cf comment above - resolve(null); - }); -}); +client.search = jest.fn(() => Promise.resolve({ results: [{ hits: [] }] })); describe('createInstantSearchManager', () => { describe('with correct result from algolia', () => { @@ -57,7 +42,7 @@ describe('createInstantSearchManager', () => { indexName: 'index', initialState: {}, searchParameters: {}, - algoliaClient: client, + searchClient: client, }); ism.widgetsManager.registerWidget({ @@ -108,7 +93,7 @@ describe('createInstantSearchManager', () => { indexName: 'index', initialState: {}, searchParameters: {}, - algoliaClient: client, + searchClient: client, }); ism.onExternalStateUpdate({}); @@ -157,7 +142,7 @@ describe('createInstantSearchManager', () => { indexName: 'index', initialState: {}, searchParameters: {}, - algoliaClient: client, + searchClient: client, }); ism.onSearchForFacetValues({ facetName: 'facetName', query: 'query' }); @@ -203,7 +188,7 @@ describe('createInstantSearchManager', () => { indexName: 'index', initialState: {}, searchParameters: {}, - algoliaClient: client, + searchClient: client, }); ism.onSearchForFacetValues({ diff --git a/packages/react-instantsearch/src/core/createInstantSearchManager.test.js b/packages/react-instantsearch/src/core/createInstantSearchManager.test.js index c232a11c90..b083c59eb6 100644 --- a/packages/react-instantsearch/src/core/createInstantSearchManager.test.js +++ b/packages/react-instantsearch/src/core/createInstantSearchManager.test.js @@ -25,7 +25,7 @@ describe('createInstantSearchManager', () => { indexName: 'index', initialState: {}, searchParameters: {}, - algoliaClient: makeClient(defaultResponse()), + searchClient: makeClient(defaultResponse()), }); const store = ism.store.getState(); @@ -55,7 +55,7 @@ describe('createInstantSearchManager', () => { indexName: 'index', initialState: {}, searchParameters: {}, - algoliaClient: makeClient(defaultResponse()), + searchClient: makeClient(defaultResponse()), resultsState: { some: 'results' }, }); @@ -79,7 +79,7 @@ describe('createInstantSearchManager', () => { indexName: 'index', initialState: {}, searchParameters: {}, - algoliaClient: makeClient(defaultResponse()), + searchClient: makeClient(defaultResponse()), }); ism.widgetsManager.registerWidget({ @@ -107,7 +107,7 @@ describe('createInstantSearchManager', () => { indexName: 'index', initialState: {}, searchParameters: {}, - algoliaClient: makeClient(defaultResponse()), + searchClient: makeClient(defaultResponse()), }); const nextSearchState = {}; @@ -133,11 +133,13 @@ describe('createInstantSearchManager', () => { describe('getWidgetsIds', () => { it('returns the list of ids of all registered widgets', () => { + expect.assertions(2); + const ism = createInstantSearchManager({ indexName: 'index', initialState: {}, searchParameters: {}, - algoliaClient: makeClient(defaultResponse()), + searchClient: makeClient(defaultResponse()), }); const widgetIDsT0 = ism.getWidgetsIds().sort(); @@ -163,7 +165,7 @@ describe('createInstantSearchManager', () => { indexName: 'index', initialState: {}, searchParameters: {}, - algoliaClient: managedClient, + searchClient: managedClient, }); ism.widgetsManager.registerWidget({ @@ -236,7 +238,7 @@ describe('createInstantSearchManager', () => { indexName: 'index', initialState: {}, searchParameters: {}, - algoliaClient: client0, + searchClient: client0, }); ism.widgetsManager.registerWidget({ @@ -257,7 +259,7 @@ describe('createInstantSearchManager', () => { indexName: 'index', initialState: {}, searchParameters: {}, - algoliaClient: client0, + searchClient: client0, }); const client1 = makeClient(defaultResponse()); @@ -277,7 +279,7 @@ describe('createInstantSearchManager', () => { indexName: 'index', initialState: {}, searchParameters: {}, - algoliaClient: client0, + searchClient: client0, }); ism.skipSearch(); @@ -299,19 +301,9 @@ function makeClient(response) { 'latency', '249078a3d4337a8231f1665ec5a44966' ); - clientInstance.addAlgoliaAgent = () => {}; - clientInstance.search = jest.fn((queries, cb) => { + clientInstance.search = jest.fn(() => { const clonedResponse = JSON.parse(JSON.stringify(response)); - if (cb) { - setTimeout(() => { - cb(null, clonedResponse); - }, 1); - return undefined; - } - - return new Promise(resolve => { - resolve(clonedResponse); - }); + return Promise.resolve(clonedResponse); }); return clientInstance; @@ -329,7 +321,6 @@ function makeManagedClient() { }); searchResultsPromises.push(p); }), - addAlgoliaAgent: () => {}, searchResultsPromises, searchResultsResolvers, };