import {render, screen, userEvent, waitFor} from 'sentry-test/reactTestingLibrary'; import ConfigStore from 'sentry/stores/configStore'; import ModalStore from 'sentry/stores/modalStore'; import {IssueCategory} from 'sentry/types'; import GroupActions from 'sentry/views/organizationGroupDetails/actions'; const group = TestStubs.Group({ id: '1337', pluginActions: [], pluginIssues: [], issueCategory: IssueCategory.ERROR, }); const project = TestStubs.ProjectDetails({ id: '2448', name: 'project name', slug: 'project', }); const organization = TestStubs.Organization({ id: '4660', slug: 'org', features: ['reprocessing-v2'], }); describe('GroupActions', function () { beforeEach(function () { ConfigStore.init(); jest.spyOn(ConfigStore, 'get').mockImplementation(() => []); }); describe('render()', function () { it('renders correctly', function () { const wrapper = render( ); expect(wrapper.container).toSnapshot(); }); }); describe('subscribing', function () { let issuesApi: any; beforeEach(function () { issuesApi = MockApiClient.addMockResponse({ url: '/projects/org/project/issues/', method: 'PUT', body: TestStubs.Group({isSubscribed: false}), }); }); it('can subscribe', function () { render( ); userEvent.click(screen.getByRole('button', {name: 'Subscribe'})); expect(issuesApi).toHaveBeenCalledWith( expect.anything(), expect.objectContaining({ data: {isSubscribed: true}, }) ); }); }); describe('bookmarking', function () { let issuesApi: any; beforeEach(function () { issuesApi = MockApiClient.addMockResponse({ url: '/projects/org/project/issues/', method: 'PUT', body: TestStubs.Group({isBookmarked: false}), }); }); it('can bookmark', async function () { render( ); userEvent.click(screen.getByLabelText('More Actions')); const bookmark = await screen.findByTestId('bookmark'); userEvent.click(bookmark); expect(issuesApi).toHaveBeenCalledWith( expect.anything(), expect.objectContaining({ data: {isBookmarked: true}, }) ); }); }); describe('reprocessing', function () { it('renders ReprocessAction component if org has feature flag reprocessing-v2 and native exception event', async function () { const event = TestStubs.EventStacktraceException({ platform: 'native', }); render( ); userEvent.click(screen.getByLabelText('More Actions')); const reprocessActionButton = await screen.findByTestId('reprocess'); expect(reprocessActionButton).toBeInTheDocument(); }); it('open dialog by clicking on the ReprocessAction component', async function () { const event = TestStubs.EventStacktraceException({ platform: 'native', }); render( ); const onReprocessEventFunc = jest.spyOn(ModalStore, 'openModal'); userEvent.click(screen.getByLabelText('More Actions')); const reprocessActionButton = await screen.findByTestId('reprocess'); expect(reprocessActionButton).toBeInTheDocument(); userEvent.click(reprocessActionButton); await waitFor(() => expect(onReprocessEventFunc).toHaveBeenCalled()); }); }); });