TeamMemberRow.test.tsx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import React from 'react';
  2. import { shallow } from 'enzyme';
  3. import { TeamMember, TeamPermissionLevel } from '../../types';
  4. import { getMockTeamMember } from './__mocks__/teamMocks';
  5. import { TeamMemberRow, Props } from './TeamMemberRow';
  6. import { SelectOptionItem } from '@grafana/ui';
  7. const setup = (propOverrides?: object) => {
  8. const props: Props = {
  9. member: getMockTeamMember(),
  10. syncEnabled: false,
  11. editorsCanAdmin: false,
  12. signedInUserIsTeamAdmin: false,
  13. updateTeamMember: jest.fn(),
  14. removeTeamMember: jest.fn(),
  15. };
  16. Object.assign(props, propOverrides);
  17. const wrapper = shallow(<TeamMemberRow {...props} />);
  18. const instance = wrapper.instance() as TeamMemberRow;
  19. return {
  20. wrapper,
  21. instance,
  22. };
  23. };
  24. describe('Render', () => {
  25. it('should render team members when sync enabled', () => {
  26. const member = getMockTeamMember();
  27. member.labels = ['LDAP'];
  28. const { wrapper } = setup({ member, syncEnabled: true });
  29. expect(wrapper).toMatchSnapshot();
  30. });
  31. describe('when feature toggle editorsCanAdmin is turned on', () => {
  32. it('should render permissions select if user is team admin', () => {
  33. const { wrapper } = setup({ editorsCanAdmin: true, signedInUserIsTeamAdmin: true });
  34. expect(wrapper).toMatchSnapshot();
  35. });
  36. it('should render span and disable buttons if user is team member', () => {
  37. const { wrapper } = setup({ editorsCanAdmin: true, signedInUserIsTeamAdmin: false });
  38. expect(wrapper).toMatchSnapshot();
  39. });
  40. });
  41. describe('when feature toggle editorsCanAdmin is turned off', () => {
  42. it('should not render permissions', () => {
  43. const { wrapper } = setup({ editorsCanAdmin: false, signedInUserIsTeamAdmin: true });
  44. expect(wrapper).toMatchSnapshot();
  45. });
  46. });
  47. });
  48. describe('Functions', () => {
  49. describe('on remove member', () => {
  50. const member = getMockTeamMember();
  51. const { instance } = setup({ member });
  52. instance.onRemoveMember(member);
  53. expect(instance.props.removeTeamMember).toHaveBeenCalledWith(1);
  54. });
  55. describe('on update permision for user in team', () => {
  56. const member: TeamMember = {
  57. userId: 3,
  58. teamId: 2,
  59. avatarUrl: '',
  60. email: 'user@user.org',
  61. labels: [],
  62. login: 'member',
  63. permission: TeamPermissionLevel.Member,
  64. };
  65. const { instance } = setup({ member });
  66. const permission = TeamPermissionLevel.Admin;
  67. const item: SelectOptionItem<TeamPermissionLevel> = { value: permission };
  68. const expectedTeamMemeber = { ...member, permission };
  69. instance.onPermissionChange(item, member);
  70. expect(instance.props.updateTeamMember).toHaveBeenCalledWith(expectedTeamMemeber);
  71. });
  72. });