import {mountWithTheme} from 'sentry-test/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 () {
mountWithTheme(
{childrenMock}
,
routerContext
);
expect(childrenMock).toHaveBeenCalledWith({
hasAccess: true,
hasSuperuser: false,
});
});
it('has access', function () {
mountWithTheme(
{childrenMock},
routerContext
);
expect(childrenMock).toHaveBeenCalledWith({
hasAccess: true,
hasSuperuser: false,
});
});
it('has no access', function () {
mountWithTheme(
{childrenMock},
routerContext
);
expect(childrenMock).toHaveBeenCalledWith({
hasAccess: false,
hasSuperuser: false,
});
});
it('calls render function when no access', function () {
const noAccessRenderer = jest.fn(() => null);
mountWithTheme(
{childrenMock}
,
routerContext
);
expect(childrenMock).not.toHaveBeenCalled();
expect(noAccessRenderer).toHaveBeenCalled();
});
it('can specify org from props', function () {
mountWithTheme(
{childrenMock}
,
routerContext
);
expect(childrenMock).toHaveBeenCalledWith({
hasAccess: true,
hasSuperuser: false,
});
});
it('handles no org/project', function () {
mountWithTheme(
{childrenMock},
routerContext
);
expect(childrenMock).toHaveBeenCalledWith(
expect.objectContaining({
hasAccess: false,
hasSuperuser: false,
})
);
});
it('handles no user', function () {
// Regression test for the share sheet.
ConfigStore.config = {
user: null,
};
mountWithTheme({childrenMock}, routerContext);
expect(childrenMock).toHaveBeenCalledWith({
hasAccess: true,
hasSuperuser: false,
});
});
it('is superuser', function () {
ConfigStore.config = {
user: {isSuperuser: true},
};
mountWithTheme({childrenMock}, routerContext);
expect(childrenMock).toHaveBeenCalledWith({
hasAccess: true,
hasSuperuser: true,
});
});
it('is not superuser', function () {
ConfigStore.config = {
user: {isSuperuser: false},
};
mountWithTheme({childrenMock}, routerContext);
expect(childrenMock).toHaveBeenCalledWith({
hasAccess: true,
hasSuperuser: false,
});
});
});
describe('as React node', function () {
let wrapper;
it('has access', function () {
wrapper = mountWithTheme(
The Child
,
routerContext
);
expect(wrapper.find('Access div').text()).toBe('The Child');
});
it('has superuser', function () {
ConfigStore.config = {
user: {isSuperuser: true},
};
wrapper = mountWithTheme(
The Child
,
routerContext
);
expect(wrapper.find('Access div').text()).toBe('The Child');
});
it('has no access', function () {
wrapper = mountWithTheme(
The Child
,
routerContext
);
expect(wrapper.find('Access div')).toHaveLength(0);
});
it('has no superuser', function () {
ConfigStore.config = {
user: {isSuperuser: false},
};
wrapper = mountWithTheme(
The Child
,
routerContext
);
expect(wrapper.find('Access div')).toHaveLength(0);
});
});
});