Skip to content

Commit

Permalink
fix(menuSelect): unmount component (#3911)
Browse files Browse the repository at this point in the history
  • Loading branch information
samouss authored Jul 1, 2019
1 parent f6c29e8 commit f6debce
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 29 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`menuSelect render renders correctly 1`] = `
exports[`menuSelect Lifecycle render renders correctly 1`] = `
<MenuSelect
canRefine={true}
cssClasses={
Expand Down Expand Up @@ -40,7 +40,7 @@ exports[`menuSelect render renders correctly 1`] = `
/>
`;

exports[`menuSelect render renders transformed items correctly 1`] = `
exports[`menuSelect Lifecycle render renders transformed items correctly 1`] = `
<MenuSelect
canRefine={true}
cssClasses={
Expand Down
81 changes: 56 additions & 25 deletions src/widgets/menu-select/__tests__/menu-select-test.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import { render } from 'preact-compat';
import { render, unmountComponentAtNode } from 'preact-compat';
import algoliasearchHelper from 'algoliasearch-helper';
import menuSelect from '../menu-select';

jest.mock('preact-compat', () => {
const module = require.requireActual('preact-compat');

module.render = jest.fn();
module.unmountComponentAtNode = jest.fn();

return module;
});
Expand All @@ -22,7 +24,7 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/menu-select
});
});

describe('render', () => {
describe('Lifecycle', () => {
let data;
let results;
let state;
Expand All @@ -31,40 +33,69 @@ See documentation: https://www.algolia.com/doc/api-reference/widgets/menu-select
beforeEach(() => {
data = { data: [{ name: 'foo' }, { name: 'bar' }] };
results = { getFacetValues: jest.fn(() => data) };
state = { toggleRefinement: jest.fn() };
helper = {
toggleRefinement: jest.fn().mockReturnThis(),
search: jest.fn(),
state,
};
helper = algoliasearchHelper({}, 'index_name');
helper.search = jest.fn();
state = helper.state;

render.mockClear();
});

it('renders correctly', () => {
const widget = menuSelect({
container: document.createElement('div'),
attribute: 'test',
describe('render', () => {
it('renders correctly', () => {
const widget = menuSelect({
container: document.createElement('div'),
attribute: 'test',
});

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

expect(render.mock.calls[0][0]).toMatchSnapshot();
});

widget.init({ helper, createURL: () => '#', instantSearchInstance: {} });
widget.render({ results, createURL: () => '#', state });
it('renders transformed items correctly', () => {
const widget = menuSelect({
container: document.createElement('div'),
attribute: 'test',
transformItems: items =>
items.map(item => ({ ...item, transformed: true })),
});

expect(render.mock.calls[0][0]).toMatchSnapshot();
});
widget.init({
helper,
createURL: () => '#',
instantSearchInstance: {},
});
widget.render({ results, createURL: () => '#', state });

it('renders transformed items correctly', () => {
const widget = menuSelect({
container: document.createElement('div'),
attribute: 'test',
transformItems: items =>
items.map(item => ({ ...item, transformed: true })),
expect(render.mock.calls[0][0]).toMatchSnapshot();
});
});

widget.init({ helper, createURL: () => '#', instantSearchInstance: {} });
widget.render({ results, createURL: () => '#', state });
describe('dispose', () => {
it('unmounts the component', () => {
const container = document.createElement('div');
const widget = menuSelect({
attribute: 'test',
container,
});

expect(render.mock.calls[0][0]).toMatchSnapshot();
helper.setState(widget.getConfiguration({}));

expect(unmountComponentAtNode).toHaveBeenCalledTimes(0);

widget.dispose({
state: helper.state,
helper,
});

expect(unmountComponentAtNode).toHaveBeenCalledTimes(1);
expect(unmountComponentAtNode).toHaveBeenCalledWith(container);
});
});
});
});
6 changes: 4 additions & 2 deletions src/widgets/menu-select/menu-select.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { render } from 'preact-compat';
import React, { render, unmountComponentAtNode } from 'preact-compat';
import cx from 'classnames';
import connectMenu from '../../connectors/menu/connectMenu';
import MenuSelect from '../../components/MenuSelect/MenuSelect';
Expand Down Expand Up @@ -112,7 +112,9 @@ export default function menuSelect({
templates,
});

const makeWidget = connectMenu(specializedRenderer);
const makeWidget = connectMenu(specializedRenderer, () =>
unmountComponentAtNode(containerNode)
);

return makeWidget({ attribute, limit, sortBy, transformItems });
}

0 comments on commit f6debce

Please sign in to comment.