import styled from '@emotion/styled'; import {MemberFixture} from 'sentry-fixture/member'; import {OrganizationFixture} from 'sentry-fixture/organization'; import {TeamFixture} from 'sentry-fixture/team'; import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary'; import {makeCloseButton} from 'sentry/components/globalModal/components'; import type {CreateTeamAccessRequestModalProps} from 'sentry/components/modals/teamAccessRequestModal'; import TeamAccessRequestModal from 'sentry/components/modals/teamAccessRequestModal'; describe('TeamAccessRequestModal', function () { let createMock; const closeModal = jest.fn(); const orgId = OrganizationFixture().slug; const memberId = MemberFixture().id; const teamId = TeamFixture().slug; const styledWrapper = styled(c => c.children); const modalRenderProps: CreateTeamAccessRequestModalProps = { Body: styledWrapper(), Footer: styledWrapper(), Header: p => {p.children}, closeModal, orgId, teamId, memberId, CloseButton: makeCloseButton(() => {}), api: new MockApiClient(), }; function renderComponent() { return render(); } beforeEach(function () { MockApiClient.clearMockResponses(); createMock = MockApiClient.addMockResponse({ url: `/organizations/${orgId}/members/${memberId}/teams/${teamId}/`, method: 'POST', }); }); it('renders', function () { const {container} = renderComponent(); expect(container).toHaveTextContent( `You do not have permission to add members to the #${teamId} team, but we will send a request to your organization admins for approval.` ); }); it('creates access request on continue', async function () { renderComponent(); await userEvent.click(screen.getByRole('button', {name: 'Continue'})); expect(createMock).toHaveBeenCalled(); }); it('closes modal on cancel', async function () { renderComponent(); await userEvent.click(screen.getByRole('button', {name: 'Cancel'})); expect(createMock).not.toHaveBeenCalled(); expect(closeModal).toHaveBeenCalled(); }); });