Skip to content

Commit

Permalink
refactor(connectRefinementList): remove equality check
Browse files Browse the repository at this point in the history
  • Loading branch information
samouss committed Aug 2, 2019
1 parent a811046 commit cbda7f5
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 84 deletions.

This file was deleted.

139 changes: 85 additions & 54 deletions src/connectors/refinement-list/__tests__/connectRefinementList-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,29 +12,31 @@ describe('connectRefinementList', () => {
return { rendering, makeWidget };
};

const getInitializedWidget = (config = {}) => {
const rendering = jest.fn();
const makeWidget = connectRefinementList(rendering);
// @TODO: once we've migrate away from `getConfiguration` update
// the function and use it at least for the lifecycle.
// const getInitializedWidget = (config = {}) => {
// const rendering = jest.fn();
// const makeWidget = connectRefinementList(rendering);

const widget = makeWidget({
attribute: 'facetAttribute',
...config,
});
// const widget = makeWidget({
// attribute: 'facetAttribute',
// ...config,
// });

const initialConfig = widget.getConfiguration(new SearchParameters({}));
const helper = jsHelper({}, '', initialConfig);
helper.search = jest.fn();
// const initialConfig = widget.getConfiguration(new SearchParameters({}));
// const helper = jsHelper({}, '', initialConfig);
// helper.search = jest.fn();

widget.init({
helper,
state: helper.state,
createURL: () => '#',
});
// widget.init({
// helper,
// state: helper.state,
// createURL: () => '#',
// });

const { refine } = rendering.mock.calls[0][0];
// const { refine } = rendering.mock.calls[0][0];

return [widget, helper, refine];
};
// return [widget, helper, refine];
// };

it('throws on bad usage', () => {
expect(connectRefinementList).toThrowErrorMatchingInlineSnapshot(`
Expand Down Expand Up @@ -1971,57 +1973,86 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/refinement-
});

describe('getWidgetState', () => {
test('should give back the object unmodified if the default value is selected', () => {
const [widget, helper] = getInitializedWidget();
const uiStateBefore = {};
const uiStateAfter = widget.getWidgetState(uiStateBefore, {
searchParameters: helper.state,
helper,
test('returns the `uiState` emtpy', () => {
// Uses the function getInitializedWidget once we've removed `getConfiguration`
const render = () => {};
const makeWidget = connectRefinementList(render);
const helper = jsHelper({}, '');
const widget = makeWidget({
attribute: 'brand',
});
expect(uiStateAfter).toBe(uiStateBefore);

const actual = widget.getWidgetState(
{},
{
searchParameters: helper.state,
}
);

expect(actual).toEqual({});
});

test('should add an entry equal to the refinement', () => {
const [widget, helper, refine] = getInitializedWidget();
refine('value');
const uiStateBefore = {};
const uiStateAfter = widget.getWidgetState(uiStateBefore, {
searchParameters: helper.state,
helper,
test('returns the `uiState` with a refinement', () => {
// Uses the function getInitializedWidget once we've removed `getConfiguration`
const render = () => {};
const makeWidget = connectRefinementList(render);
const helper = jsHelper({}, '', {
disjunctiveFacets: ['brand'],
disjunctiveFacetsRefinements: {
brand: ['Apple', 'Microsoft'],
},
});
expect(uiStateAfter).toMatchSnapshot();
});

test('should not override other values in the same namespace', () => {
const [widget, helper, refine] = getInitializedWidget();
refine('value');
const uiStateBefore = {
const widget = makeWidget({
attribute: 'brand',
});

const actual = widget.getWidgetState(
{},
{
searchParameters: helper.state,
}
);

expect(actual).toEqual({
refinementList: {
otherFacetAttribute: ['val'],
brand: ['Apple', 'Microsoft'],
},
};
const uiStateAfter = widget.getWidgetState(uiStateBefore, {
searchParameters: helper.state,
helper,
});
expect(uiStateAfter).toMatchSnapshot();
});

test('should return the same instance if the value is already in the UI state', () => {
const [widget, helper, refine] = getInitializedWidget();
refine('value');
const uiStateBefore = widget.getWidgetState(
{},
test('returns the `uiState` without namespace overridden', () => {
// Uses the function getInitializedWidget once we've removed `getConfiguration`
const render = () => {};
const makeWidget = connectRefinementList(render);
const helper = jsHelper({}, '', {
disjunctiveFacets: ['brand'],
disjunctiveFacetsRefinements: {
brand: ['Apple', 'Microsoft'],
},
});

const widget = makeWidget({
attribute: 'brand',
});

const actual = widget.getWidgetState(
{
refinementList: {
categories: ['Phone', 'Tablet'],
},
},
{
searchParameters: helper.state,
helper,
}
);
const uiStateAfter = widget.getWidgetState(uiStateBefore, {
searchParameters: helper.state,
helper,

expect(actual).toEqual({
refinementList: {
categories: ['Phone', 'Tablet'],
brand: ['Apple', 'Microsoft'],
},
});
expect(uiStateAfter).toBe(uiStateBefore);
});
});

Expand Down
7 changes: 1 addition & 6 deletions src/connectors/refinement-list/connectRefinementList.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import {
checkRendering,
createDocumentationMessageGenerator,
isEqual,
noop,
} from '../../lib/utils';
import {
Expand Down Expand Up @@ -417,11 +416,7 @@ export default function connectRefinementList(renderFn, unmountFn = noop) {
? searchParameters.getDisjunctiveRefinements(attribute)
: searchParameters.getConjunctiveRefinements(attribute);

if (
values.length === 0 ||
(uiState.refinementList &&
isEqual(values, uiState.refinementList[attribute]))
) {
if (!values.length) {
return uiState;
}

Expand Down

0 comments on commit cbda7f5

Please sign in to comment.