import {mountWithTheme} from 'sentry-test/enzyme'; import {findOption, openMenu, selectByValue} from 'sentry-test/select-new'; import {RenderField} from 'sentry/components/forms/projectMapperField'; describe('ProjectMapperField', () => { let wrapper; const mappedDropdown = { placholder: 'hi', items: [ {value: '1', label: 'label 1'}, {value: '2', label: 'label 2'}, {value: '3', label: 'label 3'}, ], }; const sentryProjects = [ {id: '23', slug: 'cool', platform: 'javascript', name: 'Cool'}, {id: '24', slug: 'beans', platform: 'python', name: 'Beans'}, ]; let onBlur, onChange, props, existingValues; beforeEach(() => { existingValues = [['23', '2']]; onBlur = jest.fn(); onChange = jest.fn(); props = { mappedDropdown, sentryProjects, nextButton: { url: 'https://vercel.com/dashboard/integrations/icfg_fuqLnwH3IYmcpAKAWY8eoYlR', next: 'Return to Vercel', }, value: existingValues, onChange, onBlur, }; }); it('clicking add updates values with current dropdown values', () => { wrapper = mountWithTheme(); selectByValue(wrapper, '24', {control: true, name: 'project'}); selectByValue(wrapper, '1', {control: true, name: 'mappedDropdown'}); wrapper.find('AddProjectWrapper Button').simulate('click'); expect(onBlur).toHaveBeenCalledWith( [ ['23', '2'], ['24', '1'], ], [] ); expect(onChange).toHaveBeenCalledWith( [ ['23', '2'], ['24', '1'], ], [] ); }); it('can delete item', () => { existingValues = [ ['23', '2'], ['24', '1'], ]; wrapper = mountWithTheme(); wrapper.find('Button[aria-label="Delete"]').first().simulate('click'); expect(onBlur).toHaveBeenCalledWith([['24', '1']], []); expect(onChange).toHaveBeenCalledWith([['24', '1']], []); }); it('allows a single Sentry project to map to multiple items but not the value', () => { existingValues = [['24', '1']]; wrapper = mountWithTheme(); // can find the same project again openMenu(wrapper, {control: true, name: 'project'}); expect( findOption(wrapper, {value: '24'}, {control: true, name: 'project'}) ).toHaveLength(1); // but not the value openMenu(wrapper, {control: true, name: 'mappedDropdown'}); expect( findOption(wrapper, {value: '1'}, {control: true, name: 'mappedDropdown'}) ).toHaveLength(0); // validate we can still find 2 expect( findOption(wrapper, {value: '2'}, {control: true, name: 'mappedDropdown'}) ).toHaveLength(1); }); });