permissionSelection.spec.jsx 3.4 KB

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