import { render, renderGlobalModal, screen, userEvent, within, } from 'sentry-test/reactTestingLibrary'; import IgnoreActions from 'sentry/components/actions/ignore'; describe('IgnoreActions', function () { const spy = jest.fn(); afterEach(() => { jest.resetAllMocks(); }); describe('disabled', function () { it('does not call onUpdate when clicked', function () { render(); const button = screen.getByRole('button', {name: 'Ignore'}); expect(button).toBeDisabled(); userEvent.click(button); expect(spy).not.toHaveBeenCalled(); }); }); describe('ignored', function () { it('displays ignored view', function () { render(); const button = screen.getByRole('button', {name: 'Unignore'}); expect(button).toBeInTheDocument(); // Shows icon only expect(button).toHaveTextContent(''); userEvent.click(button); expect(spy).toHaveBeenCalledWith({status: 'unresolved', statusDetails: {}}); }); }); describe('without confirmation', function () { it('calls spy with ignore details when clicked', function () { render(); const button = screen.getByRole('button', {name: 'Ignore'}); userEvent.click(button); expect(spy).toHaveBeenCalledTimes(1); expect(spy).toHaveBeenCalledWith({status: 'ignored', statusDetails: {}}); }); }); describe('with confirmation step', function () { it('displays confirmation modal with message provided', function () { render( 'confirm me'} /> ); renderGlobalModal(); const button = screen.getByRole('button', {name: 'Ignore'}); userEvent.click(button); expect(screen.getByText('confirm me')).toBeInTheDocument(); expect(spy).not.toHaveBeenCalled(); userEvent.click(screen.getByTestId('confirm-button')); expect(spy).toHaveBeenCalled(); }); }); describe('custom', function () { it('can ignore until a custom date/time', function () { render( 'confirm me'} /> ); renderGlobalModal(); userEvent.click(screen.getByRole('button', {name: 'Ignore options'})); userEvent.hover(screen.getByRole('menuitemradio', {name: 'For…'})); userEvent.click(screen.getByRole('menuitemradio', {name: /Custom/})); // opens modal expect(screen.getByRole('dialog')).toBeInTheDocument(); userEvent.click( within(screen.getByRole('dialog')).getByRole('button', {name: 'Ignore'}) ); expect(spy).toHaveBeenCalledWith({ status: 'ignored', statusDetails: { ignoreDuration: expect.any(Number), }, }); }); }); });