Skip to content
This repository has been archived by the owner on Dec 30, 2022. It is now read-only.

Commit

Permalink
test: Test searchClient
Browse files Browse the repository at this point in the history
  • Loading branch information
francoischalifour committed May 4, 2018
1 parent c94de4a commit f4608ac
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 50 deletions.
68 changes: 68 additions & 0 deletions packages/react-instantsearch/src/core/createInstantSearch.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,45 @@ describe('createInstantSearch', () => {
);
});

it('throws if algoliaClient is given with searchClient', () => {
const trigger = () =>
shallow(
<CustomInstantSearch
indexName="name"
searchClient={algoliaClient}
algoliaClient={algoliaClient}
/>
);

expect(() => trigger()).toThrow();
});

it('throws if appId is given with searchClient', () => {
const trigger = () =>
shallow(
<CustomInstantSearch
indexName="name"
appId="appId"
searchClient={algoliaClient}
/>
);

expect(() => trigger()).toThrow();
});

it('throws if apiKey is given with searchClient', () => {
const trigger = () =>
shallow(
<CustomInstantSearch
indexName="name"
apiKey="apiKey"
searchClient={algoliaClient}
/>
);

expect(() => trigger()).toThrow();
});

it('updates the algoliaClient when appId or apiKey changes', () => {
const wrapper = shallow(
<CustomInstantSearch appId="app" apiKey="key" indexName="name" />
Expand All @@ -56,6 +95,16 @@ describe('createInstantSearch', () => {
expect(algoliaClientFactory.mock.calls[2]).toEqual(['app', 'key2']);
});

it('uses the provided searchClient', () => {
const wrapper = shallow(
<CustomInstantSearch searchClient={algoliaClient} indexName="name" />
);

expect(algoliaClientFactory).toHaveBeenCalledTimes(0);
expect(algoliaClient.addAlgoliaAgent).toHaveBeenCalledTimes(1);
expect(wrapper.props().searchClient).toBe(algoliaClient);
});

it('uses the provided algoliaClient', () => {
const wrapper = shallow(
<CustomInstantSearch algoliaClient={algoliaClient} indexName="name" />
Expand Down Expand Up @@ -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(
<CustomInstantSearch searchClient={algoliaClient} indexName="name" />
);

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',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ describe('createInstantSearchManager', () => {
indexName: 'first',
initialState: {},
searchParameters: {},
algoliaClient: client,
searchClient: client,
});

ism.widgetsManager.registerWidget({
Expand Down Expand Up @@ -133,7 +133,7 @@ describe('createInstantSearchManager', () => {
indexName: 'first',
initialState: {},
searchParameters: {},
algoliaClient: client,
searchClient: client,
});

// <SearchBox defaultRefinement="query" />
Expand Down Expand Up @@ -199,7 +199,7 @@ describe('createInstantSearchManager', () => {
indexName: 'first',
initialState: {},
searchParameters: {},
algoliaClient: client,
searchClient: client,
});

ism.widgetsManager.registerWidget({
Expand Down Expand Up @@ -247,7 +247,7 @@ describe('createInstantSearchManager', () => {
indexName: 'first',
initialState: {},
searchParameters: {},
algoliaClient: client,
searchClient: client,
});

ism.widgetsManager.registerWidget({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ describe('createInstantSearchManager errors', () => {
indexName: 'index',
initialState: {},
searchParameters: {},
algoliaClient: client,
searchClient: client,
});

ism.widgetsManager.registerWidget({
Expand Down Expand Up @@ -80,7 +80,7 @@ describe('createInstantSearchManager errors', () => {
indexName: 'index',
initialState: {},
searchParameters: {},
algoliaClient: client,
searchClient: client,
});

ism.onExternalStateUpdate({});
Expand All @@ -101,7 +101,7 @@ describe('createInstantSearchManager errors', () => {
indexName: 'index',
initialState: {},
searchParameters: {},
algoliaClient: client,
searchClient: client,
});

ism.onSearchForFacetValues({ facetName: 'facetName', query: 'query' });
Expand All @@ -124,7 +124,7 @@ describe('createInstantSearchManager errors', () => {
indexName: 'index',
initialState: {},
searchParameters: {},
algoliaClient: client,
searchClient: client,
});

ism.widgetsManager.registerWidget({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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', () => {
Expand All @@ -57,7 +42,7 @@ describe('createInstantSearchManager', () => {
indexName: 'index',
initialState: {},
searchParameters: {},
algoliaClient: client,
searchClient: client,
});

ism.widgetsManager.registerWidget({
Expand Down Expand Up @@ -108,7 +93,7 @@ describe('createInstantSearchManager', () => {
indexName: 'index',
initialState: {},
searchParameters: {},
algoliaClient: client,
searchClient: client,
});

ism.onExternalStateUpdate({});
Expand Down Expand Up @@ -157,7 +142,7 @@ describe('createInstantSearchManager', () => {
indexName: 'index',
initialState: {},
searchParameters: {},
algoliaClient: client,
searchClient: client,
});

ism.onSearchForFacetValues({ facetName: 'facetName', query: 'query' });
Expand Down Expand Up @@ -203,7 +188,7 @@ describe('createInstantSearchManager', () => {
indexName: 'index',
initialState: {},
searchParameters: {},
algoliaClient: client,
searchClient: client,
});

ism.onSearchForFacetValues({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ describe('createInstantSearchManager', () => {
indexName: 'index',
initialState: {},
searchParameters: {},
algoliaClient: makeClient(defaultResponse()),
searchClient: makeClient(defaultResponse()),
});

const store = ism.store.getState();
Expand Down Expand Up @@ -55,7 +55,7 @@ describe('createInstantSearchManager', () => {
indexName: 'index',
initialState: {},
searchParameters: {},
algoliaClient: makeClient(defaultResponse()),
searchClient: makeClient(defaultResponse()),
resultsState: { some: 'results' },
});

Expand All @@ -79,7 +79,7 @@ describe('createInstantSearchManager', () => {
indexName: 'index',
initialState: {},
searchParameters: {},
algoliaClient: makeClient(defaultResponse()),
searchClient: makeClient(defaultResponse()),
});

ism.widgetsManager.registerWidget({
Expand Down Expand Up @@ -107,7 +107,7 @@ describe('createInstantSearchManager', () => {
indexName: 'index',
initialState: {},
searchParameters: {},
algoliaClient: makeClient(defaultResponse()),
searchClient: makeClient(defaultResponse()),
});

const nextSearchState = {};
Expand All @@ -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();
Expand All @@ -163,7 +165,7 @@ describe('createInstantSearchManager', () => {
indexName: 'index',
initialState: {},
searchParameters: {},
algoliaClient: managedClient,
searchClient: managedClient,
});

ism.widgetsManager.registerWidget({
Expand Down Expand Up @@ -236,7 +238,7 @@ describe('createInstantSearchManager', () => {
indexName: 'index',
initialState: {},
searchParameters: {},
algoliaClient: client0,
searchClient: client0,
});

ism.widgetsManager.registerWidget({
Expand All @@ -257,7 +259,7 @@ describe('createInstantSearchManager', () => {
indexName: 'index',
initialState: {},
searchParameters: {},
algoliaClient: client0,
searchClient: client0,
});

const client1 = makeClient(defaultResponse());
Expand All @@ -277,7 +279,7 @@ describe('createInstantSearchManager', () => {
indexName: 'index',
initialState: {},
searchParameters: {},
algoliaClient: client0,
searchClient: client0,
});

ism.skipSearch();
Expand All @@ -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;
Expand All @@ -329,7 +321,6 @@ function makeManagedClient() {
});
searchResultsPromises.push(p);
}),
addAlgoliaAgent: () => {},
searchResultsPromises,
searchResultsResolvers,
};
Expand Down

0 comments on commit f4608ac

Please sign in to comment.