import {mountWithTheme} from 'sentry-test/enzyme'; import {openModal} from 'sentry/actionCreators/modal'; import {Client} from 'sentry/api'; import ProjectOwnership from 'sentry/views/settings/project/projectOwnership'; jest.mock('sentry/actionCreators/modal'); describe('Project Ownership', function () { let org = TestStubs.Organization(); const project = TestStubs.ProjectDetails(); beforeEach(function () { Client.clearMockResponses(); Client.addMockResponse({ url: `/projects/${org.slug}/${project.slug}/ownership/`, method: 'GET', body: { fallthrough: false, autoAssignment: false, }, }); Client.addMockResponse({ url: `/organizations/${org.slug}/code-mappings/`, query: {project: project.id}, method: 'GET', body: [], }); Client.addMockResponse({ url: `/organizations/${org.slug}/integrations/`, query: {features: 'codeowners'}, method: 'GET', body: [TestStubs.GithubIntegrationConfig()], }); Client.addMockResponse({ url: `/projects/${org.slug}/${project.slug}/codeowners/`, features: {expand: 'codeMapping'}, method: 'GET', body: [], }); }); describe('without codeowners', function () { it('renders', function () { const wrapper = mountWithTheme( ); expect(wrapper).toSnapshot(); // only rendered when `integrations-codeowners` feature flag enabled expect(wrapper.find('CodeOwnerButton').exists()).toBe(false); }); }); describe('codeowner action button', function () { it('renders button', function () { org = TestStubs.Organization({ features: ['integrations-codeowners'], access: ['org:integrations'], }); const wrapper = mountWithTheme( , TestStubs.routerContext([{organization: org}]) ); expect(wrapper.find('CodeOwnerButton').exists()).toBe(true); }); it('clicking button opens modal', function () { org = TestStubs.Organization({ features: ['integrations-codeowners'], access: ['org:integrations'], }); const wrapper = mountWithTheme( , TestStubs.routerContext([{organization: org}]) ); wrapper.find('[data-test-id="add-codeowner-button"] button').simulate('click'); expect(openModal).toHaveBeenCalled(); }); it('render request to add if no permissions', function () { org = TestStubs.Organization({features: ['integrations-codeowners'], access: []}); const wrapper = mountWithTheme( , TestStubs.routerContext([{organization: org}]) ); expect( wrapper.find('[data-test-id="add-codeowner-request-button"] button').exists() ).toBe(true); }); }); });