import {browserHistory} from 'react-router'; import {mountWithTheme} from 'sentry-test/enzyme'; import {mountGlobalModal} from 'sentry-test/modal'; import GroupSimilarIssues from 'sentry/views/organizationGroupDetails/groupSimilarIssues'; describe('Issues Similar View', function () { let mock; const project = TestStubs.Project({ features: ['similarity-view'], }); const routerContext = TestStubs.routerContext([ { router: { ...TestStubs.router(), params: {orgId: 'org-slug', projectId: 'project-slug', groupId: 'group-id'}, }, }, ]); const scores = [ {'exception:stacktrace:pairs': 0.375}, {'exception:stacktrace:pairs': 0.01264}, {'exception:stacktrace:pairs': 0.875}, { 'exception:stacktrace:pairs': 0.001488, }, ]; const mockData = { similar: TestStubs.Groups().map((issue, i) => [issue, scores[i]]), }; beforeEach(function () { mock = MockApiClient.addMockResponse({ url: '/issues/group-id/similar/?limit=50&version=1', body: mockData.similar, }); }); it('renders initially with loading component', function () { const component = mountWithTheme( , routerContext ); expect(component).toSnapshot(); }); it('renders with mocked data', async function () { const wrapper = mountWithTheme( , routerContext ); await tick(); await tick(); wrapper.update(); expect(mock).toHaveBeenCalled(); expect(wrapper.find('SimilarStackTrace')).toSnapshot(); }); it('can merge and redirect to new parent', async function () { const wrapper = mountWithTheme( , routerContext ); const merge = MockApiClient.addMockResponse({ method: 'PUT', url: '/projects/org-slug/project-slug/issues/', body: { merge: {children: ['123'], parent: '321'}, }, }); await tick(); await tick(); wrapper.update(); wrapper.find('[data-test-id="similar-item-row"]').first().simulate('click'); await tick(); wrapper.update(); wrapper.find('[data-test-id="merge"] button').simulate('click'); const modal = await mountGlobalModal(); modal.find('Button[data-test-id="confirm-button"]').simulate('click'); await tick(); wrapper.update(); expect(merge).toHaveBeenCalledWith( '/projects/org-slug/project-slug/issues/', expect.objectContaining({ data: {merge: 1}, }) ); expect(browserHistory.push).toHaveBeenCalledWith( '/organizations/org-slug/issues/321/similar/' ); }); });