import * as PropTypes from 'prop-types'; import {mountWithTheme} from 'sentry-test/enzyme'; import {mountGlobalModal} from 'sentry-test/modal'; import ProjectKeys from 'sentry/views/settings/project/projectKeys/list'; describe('ProjectKeys', function () { let org, project, wrapper; let deleteMock; let projectKeys; beforeEach(function () { org = TestStubs.Organization(); project = TestStubs.Project(); projectKeys = TestStubs.ProjectKeys(); MockApiClient.clearMockResponses(); MockApiClient.addMockResponse({ url: `/projects/${org.slug}/${project.slug}/keys/`, method: 'GET', body: projectKeys, }); deleteMock = MockApiClient.addMockResponse({ url: `/projects/${org.slug}/${project.slug}/keys/${projectKeys[0].id}/`, method: 'DELETE', }); wrapper = mountWithTheme( , { context: { project: TestStubs.Project(), }, childContextTypes: { project: PropTypes.object, }, } ); }); it('renders empty', function () { MockApiClient.clearMockResponses(); MockApiClient.addMockResponse({ url: `/projects/${org.slug}/${project.slug}/keys/`, method: 'GET', body: [], }); wrapper = mountWithTheme( ); expect(wrapper.find('EmptyMessage')).toHaveLength(1); }); it('has clippable box', function () { const clipFade = wrapper.find('ClipFade'); expect(clipFade).toHaveLength(1); const clipFadeButton = clipFade.find('button'); expect(clipFadeButton).toHaveLength(1); clipFadeButton.simulate('click'); expect(wrapper.find('ClipFade button')).toHaveLength(0); }); it('deletes key', async function () { wrapper.find('PanelHeader Button').last().simulate('click'); // Confirm modal const modal = await mountGlobalModal(); modal.find('Button[priority="danger"]').simulate('click'); expect(deleteMock).toHaveBeenCalled(); }); it('disable and enables key', function () { const enableMock = MockApiClient.addMockResponse({ url: `/projects/${org.slug}/${project.slug}/keys/${projectKeys[0].id}/`, method: 'PUT', }); wrapper.find('PanelHeader Button').at(1).simulate('click'); expect(enableMock).toHaveBeenCalledWith( expect.anything(), expect.objectContaining({ data: {isActive: false}, }) ); wrapper.find('PanelHeader Button').at(1).simulate('click'); expect(enableMock).toHaveBeenCalledWith( expect.anything(), expect.objectContaining({ data: {isActive: true}, }) ); }); });