import {fireEvent, render, screen} from 'sentry-test/reactTestingLibrary'; import {textWithMarkupMatcher} from 'sentry-test/utils'; import {openInviteMembersModal} from 'sentry/actionCreators/modal'; import {CommitRow} from 'sentry/components/commitRow'; import {Commit, Repository, User} from 'sentry/types'; jest.mock('sentry/components/hovercard', () => { return { Header: ({children}: {children: React.ReactNode}) => children, Body: ({children}: {children: React.ReactNode}) => children, Hovercard: ({body}) => { return body; }, }; }); jest.mock('sentry/actionCreators/modal', () => { return { ...jest.requireActual('sentry/actionCreators/modal'), openInviteMembersModal: jest.fn(), }; }); const baseCommit: Commit = { dateCreated: '2020-11-30T18:46:31Z', id: 'f7f395d14b2fe29a4e253bf1d3094d61e6ad4434', message: 'ref(commitRow): refactor to fc\n', author: { id: '0', username: 'author', ip_address: '192.168.1.1', email: 'author@commit.com', name: 'Author', } as User, repository: { id: '1', integrationId: '2', name: 'getsentry/sentry', dateCreated: '2019-11-30T18:46:31Z', } as Repository, releases: [], }; // static/app/components/hovercard.tsx describe('commitRow', () => { it('renders custom avatar', () => { render(); expect(screen.getByText(/Custom Avatar/)).toBeInTheDocument(); }); it('renders invite flow for non associated users', () => { const commit: Commit = { ...baseCommit, author: { ...baseCommit.author, id: undefined as unknown as string, }, } as Commit; render(); expect( screen.getByText( textWithMarkupMatcher( /The email author@commit.com is not a member of your organization./ ) ) ).toBeInTheDocument(); fireEvent.click(screen.getByText(/Invite/)); // @ts-ignore we are mocking this import expect(openInviteMembersModal.mock.calls[0][0].initialData[0].emails).toEqual( new Set(['author@commit.com']) ); }); it('renders commit info', () => { const commit: Commit = { ...baseCommit, author: { ...baseCommit.author, id: '0' as unknown as string, }, } as Commit; render(); expect(screen.getByText(/ref\(commitRow\): refactor to fc/)).toBeInTheDocument(); }); });