import {mountWithTheme} from 'sentry-test/enzyme'; import * as ActionCreators from 'sentry/actionCreators/formSearch'; import FormSource from 'sentry/components/search/sources/formSource'; import FormSearchStore from 'sentry/stores/formSearchStore'; describe('FormSource', function () { let wrapper; const searchMap = [ { title: 'Test Field', description: 'test-help', route: '/route/', field: { name: 'test-field', label: 'Test Field', help: 'test-help', }, }, { title: 'Foo Field', description: 'foo-help', route: '/foo/', field: { name: 'foo-field', label: 'Foo Field', help: 'foo-help', }, }, ]; beforeEach(function () { jest.spyOn(ActionCreators, 'loadSearchMap').mockImplementation(() => {}); FormSearchStore.loadSearchMap(searchMap); }); afterEach(function () { ActionCreators.loadSearchMap.mockRestore(); }); it('can find a form field', async function () { const mock = jest.fn().mockReturnValue(null); wrapper = mountWithTheme({mock}); await tick(); await tick(); wrapper.update(); expect(mock).toHaveBeenLastCalledWith( expect.objectContaining({ results: [ expect.objectContaining({ item: { field: { label: 'Test Field', name: 'test-field', help: 'test-help', }, title: 'Test Field', description: 'test-help', route: '/route/', resultType: 'field', sourceType: 'field', to: '/route/#test-field', }, }), ], }) ); }); it('does not find any form field', async function () { const mock = jest.fn().mockReturnValue(null); wrapper = mountWithTheme({mock}); await tick(); wrapper.update(); expect(mock).toHaveBeenCalledWith({ isLoading: false, results: [], }); }); });