UNPKG

cruk-searchkit

Version:

Set of overriden and new searchkit components designed specifically for Cancer Research UK

95 lines (85 loc) 3.68 kB
import React from 'react'; import { mount } from 'enzyme'; import CRUKSearchkitAutocompleteList from '../CRUKSearchkitAutocompleteList.jsx'; import { SearchkitManager } from 'searchkit'; const div = document.createElement('div'); div.id = 'searchPrototypeApp'; document.body.appendChild(div); describe('Cruk searchkit autocomplete tests', () => { beforeEach(function() { this.searchkit = SearchkitManager.mock(); const toggleMock = (flag) => { this.wrapper.setProps({ autocompleteActive: flag }); } this.createWrapper = (classNames, items=['Item 1', 'Item 2'], autocompleteActive=true) => { this.wrapper = mount( <CRUKSearchkitAutocompleteList searchkit={this.searchkit} autocompleteItems={items} autocompleteActive={autocompleteActive} listClasses={classNames} toggle={toggleMock} inputState={() => null} /> ); } this.searchkit.accessors.accessors = [ { key: 'xss-q', state: { value: '' } } ]; }); it('Render with default classes', function() { this.createWrapper(); const secondListItem = this.wrapper.find('.cr-autocomplete').children().get(1); expect(secondListItem.innerHTML).toBe('Item 2'); expect(secondListItem.className).toBe('cr-autocomplete__list-item'); }); it('Render with specific classes', function() { // Define classes that will go into the ul tag and its items. const classes = ['custom-class1', 'custom-class2']; const items = ['List item 1', 'List item 2', 'List item 3']; // Mount the component. this.createWrapper(classes, items); const autoComplete = this.wrapper.find('.custom-class1'); // Check to see if the second class is present expect(autoComplete.hasClass('custom-class2')).toBe(true); // Check the number the children expect(autoComplete.children().length).toBe(3); // Child shoud have bem generated classname of first class in the listClasses prop. expect(autoComplete.children().get(1).className).toBe('custom-class1__list-item'); }); it('Hide/Show autocomplete depending on the autocompleteActive prop', function() { this.createWrapper(); // Component is mounted and rendered. expect(this.wrapper.find('.cr-autocomplete').length).toBe(1); // Set autocompleteActive prop to false. this.wrapper.setProps({ autocompleteActive: false }); // The component should not be rendered. expect(this.wrapper.find('.cr-autocomplete').length).toBe(0); }); it('Hide/Show autocomplete depending on the autocompleteItems prop', function() { this.createWrapper(); // Component is mounted and rendered. expect(this.wrapper.find('.cr-autocomplete').length).toBe(1); // Empty array for autocompleteItems prop. this.wrapper.setProps({ autocompleteItems: [] }); // The component should not be rendered. expect(this.wrapper.find('.cr-autocomplete').length).toBe(0); }); it('Click on an autocomplete list item', function() { this.createWrapper(); // Fake QueryAccessor should have empty state.value. expect(this.searchkit.accessors.accessors[0].state.value).toBe(''); // Autocomplete list should be visible. expect(this.wrapper.find('.cr-autocomplete').length).toBe(1); // Select second item from the autocomplete. this.wrapper.find('.cr-autocomplete').childAt(1).simulate('click'); // Accessor value should be equal 'Item 2'. expect(this.searchkit.accessors.accessors[0].state.value).toBe('Item 2'); // Autocomplete list should not be visible. expect(this.wrapper.find('.cr-autocomplete').length).toBe(0); }); });