import React from 'react'; import {mount} from 'enzyme'; import Access from 'app/components/acl/access'; import ConfigStore from 'app/stores/configStore'; describe('Access', function() { const organization = TestStubs.Organization({ access: ['project:write', 'project:read'], }); const routerContext = TestStubs.routerContext([{organization}]); describe('as render prop', function() { const childrenMock = jest.fn().mockReturnValue(null); beforeEach(function() { childrenMock.mockClear(); }); it('has access when requireAll is false', function() { mount( {childrenMock} , routerContext ); expect(childrenMock).toHaveBeenCalledWith({ hasAccess: true, hasSuperuser: false, }); }); it('has accesss', function() { mount( {childrenMock}, routerContext ); expect(childrenMock).toHaveBeenCalledWith({ hasAccess: true, hasSuperuser: false, }); }); it('has no access', function() { mount({childrenMock}, routerContext); expect(childrenMock).toHaveBeenCalledWith({ hasAccess: false, hasSuperuser: false, }); }); it('calls render function when no access', function() { const noAccessRenderer = jest.fn(() => null); mount( {childrenMock} , routerContext ); expect(childrenMock).not.toHaveBeenCalled(); expect(noAccessRenderer).toHaveBeenCalled(); }); it('can specify org from props', function() { mount( {childrenMock} , routerContext ); expect(childrenMock).toHaveBeenCalledWith({ hasAccess: true, hasSuperuser: false, }); }); it('handles no org/project', function() { mount( {childrenMock} , routerContext ); expect(childrenMock).toHaveBeenCalledWith({ hasAccess: false, hasSuperuser: false, }); }); it('is superuser', function() { ConfigStore.config = { user: {isSuperuser: true}, }; mount({childrenMock}, routerContext); expect(childrenMock).toHaveBeenCalledWith({ hasAccess: true, hasSuperuser: true, }); }); it('is not superuser', function() { ConfigStore.config = { user: {isSuperuser: false}, }; mount({childrenMock}, routerContext); expect(childrenMock).toHaveBeenCalledWith({ hasAccess: true, hasSuperuser: false, }); }); }); describe('as React node', function() { let wrapper; it('has access', function() { wrapper = mount(
The Child
, routerContext ); expect(wrapper.find('Access div').text()).toBe('The Child'); }); it('has superuser', function() { ConfigStore.config = { user: {isSuperuser: true}, }; wrapper = mount(
The Child
, routerContext ); expect(wrapper.find('Access div').text()).toBe('The Child'); }); it('has no access', function() { wrapper = mount(
The Child
, routerContext ); expect(wrapper.find('Access div')).toHaveLength(0); }); it('has no superuser', function() { ConfigStore.config = { user: {isSuperuser: false}, }; wrapper = mount(
The Child
, routerContext ); expect(wrapper.find('Access div')).toHaveLength(0); }); }); });