import {ProjectFixture} from 'sentry-fixture/project'; import {render, screen, userEvent, waitFor} from 'sentry-test/reactTestingLibrary'; import {browserHistory} from 'sentry/utils/browserHistory'; import OrganizationProjectsContainer from 'sentry/views/settings/organizationProjects'; describe('OrganizationProjects', function () { let projectsGetMock: jest.Mock; let statsGetMock: jest.Mock; let projectsPutMock: jest.Mock; const project = ProjectFixture(); beforeEach(function () { projectsGetMock = MockApiClient.addMockResponse({ url: '/organizations/org-slug/projects/', body: [project], }); statsGetMock = MockApiClient.addMockResponse({ url: '/organizations/org-slug/stats/', body: [[[], 1]], }); projectsPutMock = MockApiClient.addMockResponse({ method: 'PUT', url: '/projects/org-slug/project-slug/', }); }); afterEach(function () { MockApiClient.clearMockResponses(); }); it('should render the projects in the store', async function () { render(); expect(await screen.findByText('project-slug')).toBeInTheDocument(); expect(projectsGetMock).toHaveBeenCalledTimes(1); expect(statsGetMock).toHaveBeenCalledTimes(1); expect(statsGetMock).toHaveBeenCalledWith( '/organizations/org-slug/stats/', expect.objectContaining({ query: { group: 'project', projectID: [project.id], // Time is frozen in tests since: 1508121680, stat: 'generated', }, }) ); expect(projectsPutMock).toHaveBeenCalledTimes(0); await userEvent.click(await screen.findByRole('button', {name: 'Bookmark'})); expect( await screen.findByRole('button', {name: 'Remove Bookmark', pressed: true}) ).toBeInTheDocument(); expect(projectsPutMock).toHaveBeenCalledTimes(1); }); it('should search organization projects', async function () { render(); expect(await screen.findByText('project-slug')).toBeInTheDocument(); const searchBox = await screen.findByRole('textbox'); await userEvent.type(searchBox, 'random'); await waitFor(() => { expect(browserHistory.replace).toHaveBeenLastCalledWith({ pathname: '/mock-pathname/', query: {query: 'random'}, }); }); }); });