import React from 'react'; import { shallow } from 'enzyme'; import each from 'jest-each'; import searchBarCreator from '../../src/short-urls/SearchBar'; import SearchField from '../../src/utils/SearchField'; import Tag from '../../src/tags/helpers/Tag'; import DateRangeRow from '../../src/utils/DateRangeRow'; describe('', () => { let wrapper; const listShortUrlsMock = jest.fn(); const SearchBar = searchBarCreator({}); afterEach(() => { listShortUrlsMock.mockReset(); wrapper && wrapper.unmount(); }); it('renders a SearchField', () => { wrapper = shallow(); expect(wrapper.find(SearchField)).toHaveLength(1); }); it('renders a DateRangeRow', () => { wrapper = shallow(); expect(wrapper.find(DateRangeRow)).toHaveLength(1); }); it('renders no tags when the list of tags is empty', () => { wrapper = shallow(); expect(wrapper.find(Tag)).toHaveLength(0); }); it('renders the proper amount of tags', () => { const tags = [ 'foo', 'bar', 'baz' ]; wrapper = shallow(); expect(wrapper.find(Tag)).toHaveLength(tags.length); }); it('updates short URLs list when search field changes', () => { wrapper = shallow(); const searchField = wrapper.find(SearchField); expect(listShortUrlsMock).not.toHaveBeenCalled(); searchField.simulate('change'); expect(listShortUrlsMock).toHaveBeenCalledTimes(1); }); it('updates short URLs list when a tag is removed', () => { wrapper = shallow( ); const tag = wrapper.find(Tag).first(); expect(listShortUrlsMock).not.toHaveBeenCalled(); tag.simulate('close'); expect(listShortUrlsMock).toHaveBeenCalledTimes(1); }); each([ 'startDateChange', 'endDateChange' ]).it('updates short URLs list when date range changes', (event) => { wrapper = shallow(); const dateRange = wrapper.find(DateRangeRow); expect(listShortUrlsMock).not.toHaveBeenCalled(); dateRange.simulate(event); expect(listShortUrlsMock).toHaveBeenCalledTimes(1); }); });