permissionSelection.spec.jsx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import {mountWithTheme} from 'sentry-test/enzyme';
  2. import {openMenu, selectByValue} from 'sentry-test/select-new';
  3. import Form from 'sentry/components/forms/form';
  4. import PermissionSelection from 'sentry/views/settings/organizationDeveloperSettings/permissionSelection';
  5. describe('PermissionSelection', () => {
  6. let wrapper;
  7. let onChange;
  8. beforeEach(() => {
  9. onChange = jest.fn();
  10. wrapper = mountWithTheme(
  11. <Form>
  12. <PermissionSelection
  13. permissions={{
  14. Event: 'no-access',
  15. Team: 'no-access',
  16. Project: 'write',
  17. Release: 'admin',
  18. Organization: 'admin',
  19. }}
  20. onChange={onChange}
  21. />
  22. </Form>
  23. );
  24. });
  25. it('renders a row for each resource', () => {
  26. expect(wrapper.find('SelectField[key="Project"]')).toBeDefined();
  27. expect(wrapper.find('SelectField[key="Team"]')).toBeDefined();
  28. expect(wrapper.find('SelectField[key="Release"]')).toBeDefined();
  29. expect(wrapper.find('SelectField[key="Event"]')).toBeDefined();
  30. expect(wrapper.find('SelectField[key="Organization"]')).toBeDefined();
  31. expect(wrapper.find('SelectField[key="Member"]')).toBeDefined();
  32. });
  33. it('lists human readable permissions', () => {
  34. const findOptions = name => {
  35. openMenu(wrapper, {name: `${name}--permission`});
  36. return wrapper
  37. .find(`SelectField[name="${name}--permission"] Option`)
  38. .map(o => o.text());
  39. };
  40. expect(findOptions('Project')).toEqual([
  41. 'No Access',
  42. 'Read',
  43. 'Read & Write',
  44. 'Admin',
  45. ]);
  46. expect(findOptions('Team')).toEqual(['No Access', 'Read', 'Read & Write', 'Admin']);
  47. expect(findOptions('Release')).toEqual(['No Access', 'Admin']);
  48. expect(findOptions('Event')).toEqual(['No Access', 'Read', 'Read & Write', 'Admin']);
  49. expect(findOptions('Organization')).toEqual([
  50. 'No Access',
  51. 'Read',
  52. 'Read & Write',
  53. 'Admin',
  54. ]);
  55. expect(findOptions('Member')).toEqual(['No Access', 'Read', 'Read & Write', 'Admin']);
  56. });
  57. it('converts permission state to a list of raw scopes', () => {
  58. const instance = wrapper.find('PermissionSelection').instance();
  59. instance.setState({
  60. permissions: {
  61. Project: 'write',
  62. Release: 'admin',
  63. Organization: 'read',
  64. },
  65. });
  66. expect(instance.permissionStateToList()).toEqual([
  67. 'project:read',
  68. 'project:write',
  69. 'project:releases',
  70. 'org:read',
  71. ]);
  72. });
  73. it('stores the permissions the User has selected', () => {
  74. const instance = wrapper.find('PermissionSelection').instance();
  75. const getStateValue = resource => instance.state.permissions[resource];
  76. selectByValue(wrapper, 'write', {name: 'Project--permission'});
  77. selectByValue(wrapper, 'read', {name: 'Team--permission'});
  78. selectByValue(wrapper, 'admin', {name: 'Release--permission'});
  79. selectByValue(wrapper, 'admin', {name: 'Event--permission'});
  80. selectByValue(wrapper, 'read', {name: 'Organization--permission'});
  81. selectByValue(wrapper, 'no-access', {name: 'Member--permission'});
  82. expect(getStateValue('Project')).toEqual('write');
  83. expect(getStateValue('Team')).toEqual('read');
  84. expect(getStateValue('Release')).toEqual('admin');
  85. expect(getStateValue('Event')).toEqual('admin');
  86. expect(getStateValue('Organization')).toEqual('read');
  87. expect(getStateValue('Member')).toEqual('no-access');
  88. });
  89. });