|
@@ -4,8 +4,25 @@ import { TeamMembers, Props, State } from './TeamMembers';
|
|
|
import { TeamMember, TeamPermissionLevel } from '../../types';
|
|
import { TeamMember, TeamPermissionLevel } from '../../types';
|
|
|
import { getMockTeamMember, getMockTeamMembers } from './__mocks__/teamMocks';
|
|
import { getMockTeamMember, getMockTeamMembers } from './__mocks__/teamMocks';
|
|
|
import { SelectOptionItem } from '@grafana/ui';
|
|
import { SelectOptionItem } from '@grafana/ui';
|
|
|
|
|
+import { contextSrv } from 'app/core/services/context_srv';
|
|
|
|
|
|
|
|
-const setup = (propOverrides?: object) => {
|
|
|
|
|
|
|
+jest.mock('app/core/services/context_srv', () => ({
|
|
|
|
|
+ contextSrv: {
|
|
|
|
|
+ isGrafanaAdmin: false,
|
|
|
|
|
+ hasRole: role => false,
|
|
|
|
|
+ user: { id: 1 },
|
|
|
|
|
+ },
|
|
|
|
|
+}));
|
|
|
|
|
+
|
|
|
|
|
+const originalContextSrv = contextSrv;
|
|
|
|
|
+
|
|
|
|
|
+interface SetupProps {
|
|
|
|
|
+ propOverrides?: object;
|
|
|
|
|
+ isGrafanaAdmin?: boolean;
|
|
|
|
|
+ isOrgAdmin?: boolean;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+const setup = (setupProps: SetupProps) => {
|
|
|
const props: Props = {
|
|
const props: Props = {
|
|
|
members: [] as TeamMember[],
|
|
members: [] as TeamMember[],
|
|
|
searchMemberQuery: '',
|
|
searchMemberQuery: '',
|
|
@@ -15,9 +32,13 @@ const setup = (propOverrides?: object) => {
|
|
|
removeTeamMember: jest.fn(),
|
|
removeTeamMember: jest.fn(),
|
|
|
updateTeamMember: jest.fn(),
|
|
updateTeamMember: jest.fn(),
|
|
|
syncEnabled: false,
|
|
syncEnabled: false,
|
|
|
|
|
+ editorsCanAdmin: false,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
- Object.assign(props, propOverrides);
|
|
|
|
|
|
|
+ contextSrv.isGrafanaAdmin = setupProps.isGrafanaAdmin || false;
|
|
|
|
|
+ contextSrv.hasRole = role => setupProps.isOrgAdmin || false;
|
|
|
|
|
+
|
|
|
|
|
+ Object.assign(props, setupProps.propOverrides);
|
|
|
|
|
|
|
|
const wrapper = shallow(<TeamMembers {...props} />);
|
|
const wrapper = shallow(<TeamMembers {...props} />);
|
|
|
const instance = wrapper.instance() as TeamMembers;
|
|
const instance = wrapper.instance() as TeamMembers;
|
|
@@ -29,15 +50,22 @@ const setup = (propOverrides?: object) => {
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
describe('Render', () => {
|
|
describe('Render', () => {
|
|
|
|
|
+ beforeEach(() => {
|
|
|
|
|
+ contextSrv.isGrafanaAdmin = originalContextSrv.isGrafanaAdmin;
|
|
|
|
|
+ contextSrv.hasRole = originalContextSrv.hasRole;
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
it('should render component', () => {
|
|
it('should render component', () => {
|
|
|
- const { wrapper } = setup();
|
|
|
|
|
|
|
+ const { wrapper } = setup({});
|
|
|
|
|
|
|
|
expect(wrapper).toMatchSnapshot();
|
|
expect(wrapper).toMatchSnapshot();
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
it('should render team members', () => {
|
|
it('should render team members', () => {
|
|
|
const { wrapper } = setup({
|
|
const { wrapper } = setup({
|
|
|
- members: getMockTeamMembers(5),
|
|
|
|
|
|
|
+ propOverrides: {
|
|
|
|
|
+ members: getMockTeamMembers(5),
|
|
|
|
|
+ },
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
expect(wrapper).toMatchSnapshot();
|
|
expect(wrapper).toMatchSnapshot();
|
|
@@ -45,18 +73,58 @@ describe('Render', () => {
|
|
|
|
|
|
|
|
it('should render team members when sync enabled', () => {
|
|
it('should render team members when sync enabled', () => {
|
|
|
const { wrapper } = setup({
|
|
const { wrapper } = setup({
|
|
|
- members: getMockTeamMembers(5),
|
|
|
|
|
- syncEnabled: true,
|
|
|
|
|
|
|
+ propOverrides: {
|
|
|
|
|
+ members: getMockTeamMembers(5),
|
|
|
|
|
+ syncEnabled: true,
|
|
|
|
|
+ },
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
expect(wrapper).toMatchSnapshot();
|
|
expect(wrapper).toMatchSnapshot();
|
|
|
});
|
|
});
|
|
|
|
|
+
|
|
|
|
|
+ describe('when feature toggle editorsCanAdmin is turned on', () => {
|
|
|
|
|
+ it('should render permissions select if user is Grafana Admin', () => {
|
|
|
|
|
+ const members = getMockTeamMembers(5);
|
|
|
|
|
+ members[4].permission = TeamPermissionLevel.Admin;
|
|
|
|
|
+ const { wrapper } = setup({
|
|
|
|
|
+ propOverrides: { members, editorsCanAdmin: true },
|
|
|
|
|
+ isGrafanaAdmin: true,
|
|
|
|
|
+ isOrgAdmin: false,
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ expect(wrapper).toMatchSnapshot();
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ it('should render permissions select if user is Org Admin', () => {
|
|
|
|
|
+ const members = getMockTeamMembers(5);
|
|
|
|
|
+ members[4].permission = TeamPermissionLevel.Admin;
|
|
|
|
|
+ const { wrapper } = setup({
|
|
|
|
|
+ propOverrides: { members, editorsCanAdmin: true },
|
|
|
|
|
+ isGrafanaAdmin: false,
|
|
|
|
|
+ isOrgAdmin: true,
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ expect(wrapper).toMatchSnapshot();
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ it('should render permissions select if user is team admin', () => {
|
|
|
|
|
+ const members = getMockTeamMembers(5);
|
|
|
|
|
+ members[0].permission = TeamPermissionLevel.Admin;
|
|
|
|
|
+ const { wrapper } = setup({
|
|
|
|
|
+ propOverrides: { members, editorsCanAdmin: true },
|
|
|
|
|
+ isGrafanaAdmin: false,
|
|
|
|
|
+ isOrgAdmin: false,
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ expect(wrapper).toMatchSnapshot();
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
describe('Functions', () => {
|
|
describe('Functions', () => {
|
|
|
describe('on search member query change', () => {
|
|
describe('on search member query change', () => {
|
|
|
it('it should call setSearchMemberQuery', () => {
|
|
it('it should call setSearchMemberQuery', () => {
|
|
|
- const { instance } = setup();
|
|
|
|
|
|
|
+ const { instance } = setup({});
|
|
|
|
|
|
|
|
instance.onSearchQueryChange('member');
|
|
instance.onSearchQueryChange('member');
|
|
|
|
|
|
|
@@ -65,7 +133,7 @@ describe('Functions', () => {
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
describe('on remove member', () => {
|
|
describe('on remove member', () => {
|
|
|
- const { instance } = setup();
|
|
|
|
|
|
|
+ const { instance } = setup({});
|
|
|
const mockTeamMember = getMockTeamMember();
|
|
const mockTeamMember = getMockTeamMember();
|
|
|
|
|
|
|
|
instance.onRemoveMember(mockTeamMember);
|
|
instance.onRemoveMember(mockTeamMember);
|
|
@@ -74,7 +142,7 @@ describe('Functions', () => {
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
describe('on add user to team', () => {
|
|
describe('on add user to team', () => {
|
|
|
- const { wrapper, instance } = setup();
|
|
|
|
|
|
|
+ const { wrapper, instance } = setup({});
|
|
|
const state = wrapper.state() as State;
|
|
const state = wrapper.state() as State;
|
|
|
|
|
|
|
|
state.newTeamMember = {
|
|
state.newTeamMember = {
|
|
@@ -90,7 +158,7 @@ describe('Functions', () => {
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
describe('on update permision for user in team', () => {
|
|
describe('on update permision for user in team', () => {
|
|
|
- const { instance } = setup();
|
|
|
|
|
|
|
+ const { instance } = setup({});
|
|
|
const permission = TeamPermissionLevel.Admin;
|
|
const permission = TeamPermissionLevel.Admin;
|
|
|
const item: SelectOptionItem = { value: permission };
|
|
const item: SelectOptionItem = { value: permission };
|
|
|
const member: TeamMember = {
|
|
const member: TeamMember = {
|