import {Organization} from 'sentry-fixture/organization'; import {initializeOrg} from 'sentry-test/initializeOrg'; import {render, screen, waitFor} from 'sentry-test/reactTestingLibrary'; import {pinFilter} from 'sentry/actionCreators/pageFilters'; import OrganizationStore from 'sentry/stores/organizationStore'; import PageFiltersStore from 'sentry/stores/pageFiltersStore'; import ProjectsStore from 'sentry/stores/projectsStore'; import OrganizationDetails from 'sentry/views/organizationDetails'; jest.mock( 'sentry/components/sidebar', () => function () { return
; } ); describe('OrganizationDetails', function () { const {routerProps} = initializeOrg(); let getTeamsMock; let getProjectsMock; beforeEach(function () { OrganizationStore.reset(); ProjectsStore.reset(); PageFiltersStore.reset(); MockApiClient.clearMockResponses(); MockApiClient.addMockResponse({ url: '/organizations/org-slug/broadcasts/', body: [], }); MockApiClient.addMockResponse({ url: '/organizations/org-slug/environments/', body: [], }); getTeamsMock = MockApiClient.addMockResponse({ url: '/organizations/org-slug/teams/', body: [TestStubs.Team()], }); getProjectsMock = MockApiClient.addMockResponse({ url: '/organizations/org-slug/projects/', body: [TestStubs.Project()], }); }); it('can fetch projects and teams', function () { MockApiClient.addMockResponse({ url: '/organizations/org-slug/', body: Organization({ slug: 'org-slug', }), }); render(
); expect(getTeamsMock).toHaveBeenCalled(); expect(getProjectsMock).toHaveBeenCalled(); }); describe('deletion states', () => { it('should render a restoration prompt', async function () { MockApiClient.addMockResponse({ url: '/organizations/org-slug/', body: Organization({ slug: 'org-slug', status: { id: 'pending_deletion', name: 'pending deletion', }, }), }); render(
); expect(await screen.findByText('Deletion Scheduled')).toBeInTheDocument(); expect(screen.getByLabelText('Restore Organization')).toBeInTheDocument(); expect( screen.getByText( 'Would you like to cancel this process and restore the organization back to the original state?' ) ).toBeInTheDocument(); }); it('should render a restoration prompt without action for members', async function () { MockApiClient.addMockResponse({ url: '/organizations/org-slug/', body: Organization({ slug: 'org-slug', access: [], status: { id: 'pending_deletion', name: 'pending deletion', }, }), }); render(
); expect(await screen.findByText('Deletion Scheduled')).toBeInTheDocument(); const mistakeText = screen.getByText( 'If this is a mistake, contact an organization owner and ask them to restore this organization.' ); expect(mistakeText).toBeInTheDocument(); expect(screen.queryByLabelText('Restore Organization')).not.toBeInTheDocument(); }); }); it('should render a deletion in progress prompt', async function () { MockApiClient.addMockResponse({ url: '/organizations/org-slug/', body: Organization({ slug: 'org-slug', status: { id: 'deletion_in_progress', name: 'deletion in progress', }, }), }); render(
); const inProgress = await screen.findByText( 'currently in the process of being deleted from Sentry.', {exact: false} ); expect(inProgress).toBeInTheDocument(); expect(screen.queryByLabelText('Restore Organization')).not.toBeInTheDocument(); }); it('should switch organization', async function () { const body = Organization({slug: 'org-slug'}); MockApiClient.addMockResponse({url: '/organizations/org-slug/', body}); MockApiClient.addMockResponse({url: '/organizations/other-org/', body}); MockApiClient.addMockResponse({url: '/organizations/other-org/teams/', body: []}); MockApiClient.addMockResponse({url: '/organizations/other-org/projects/', body: []}); const {rerender} = render(
); pinFilter('projects', true); await waitFor(() => expect(PageFiltersStore.getState().pinnedFilters).toEqual(new Set(['projects'])) ); rerender(
); expect(PageFiltersStore.getState().pinnedFilters).toEqual(new Set(['projects'])); rerender(
); await waitFor(() => expect(PageFiltersStore.getState().pinnedFilters).toEqual(new Set()) ); }); });