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);
});
});
});