PermissionsStore.jest.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import { PermissionsStore } from './PermissionsStore';
  2. import { backendSrv } from 'test/mocks/common';
  3. describe('PermissionsStore', () => {
  4. let store;
  5. beforeEach(async () => {
  6. backendSrv.get.mockReturnValue(
  7. Promise.resolve([
  8. { id: 2, dashboardId: 1, role: 'Viewer', permission: 1, permissionName: 'View' },
  9. { id: 3, dashboardId: 1, role: 'Editor', permission: 1, permissionName: 'Edit' },
  10. {
  11. id: 4,
  12. dashboardId: 10,
  13. permission: 1,
  14. permissionName: 'View',
  15. teamId: 1,
  16. team: 'MyTestTeam',
  17. inherited: true,
  18. },
  19. {
  20. id: 5,
  21. dashboardId: 1,
  22. permission: 1,
  23. permissionName: 'View',
  24. userId: 1,
  25. userLogin: 'MyTestUser',
  26. },
  27. {
  28. id: 6,
  29. dashboardId: 1,
  30. permission: 1,
  31. permissionName: 'Edit',
  32. teamId: 2,
  33. team: 'MyTestTeam2',
  34. },
  35. ])
  36. );
  37. backendSrv.post = jest.fn(() => Promise.resolve({}));
  38. store = PermissionsStore.create(
  39. {
  40. fetching: false,
  41. items: [],
  42. },
  43. {
  44. backendSrv: backendSrv,
  45. }
  46. );
  47. await store.load(1, false, false);
  48. });
  49. it('should save update on permission change', async () => {
  50. expect(store.items[0].permission).toBe(1);
  51. expect(store.items[0].permissionName).toBe('View');
  52. await store.updatePermissionOnIndex(0, 2, 'Edit');
  53. expect(store.items[0].permission).toBe(2);
  54. expect(store.items[0].permissionName).toBe('Edit');
  55. expect(backendSrv.post.mock.calls.length).toBe(1);
  56. expect(backendSrv.post.mock.calls[0][0]).toBe('/api/dashboards/id/1/permissions');
  57. });
  58. it('should save removed permissions automatically', async () => {
  59. expect(store.items.length).toBe(5);
  60. await store.removeStoreItem(2);
  61. expect(store.items.length).toBe(4);
  62. expect(backendSrv.post.mock.calls.length).toBe(1);
  63. expect(backendSrv.post.mock.calls[0][0]).toBe('/api/dashboards/id/1/permissions');
  64. });
  65. it('should be sorted by sort rank and alphabetically', async () => {
  66. expect(store.items[0].name).toBe('MyTestTeam');
  67. expect(store.items[0].dashboardId).toBe(10);
  68. expect(store.items[1].name).toBe('Editor');
  69. expect(store.items[2].name).toBe('Viewer');
  70. expect(store.items[3].name).toBe('MyTestTeam2');
  71. expect(store.items[4].name).toBe('MyTestUser');
  72. });
  73. describe('when one inherited and one not inherited team permission are added', () => {
  74. beforeEach(async () => {
  75. const overridingItemForChildDashboard = {
  76. team: 'MyTestTeam',
  77. dashboardId: 1,
  78. teamId: 1,
  79. permission: 2,
  80. };
  81. store.resetNewType();
  82. store.newItem.setTeam(overridingItemForChildDashboard.teamId, overridingItemForChildDashboard.team);
  83. store.newItem.setPermission(overridingItemForChildDashboard.permission);
  84. await store.addStoreItem();
  85. });
  86. it('should add new overriding permission', () => {
  87. expect(store.items.length).toBe(6);
  88. });
  89. it('should be sorted by sort rank and alphabetically', async () => {
  90. expect(store.items[0].name).toBe('MyTestTeam');
  91. expect(store.items[0].dashboardId).toBe(10);
  92. expect(store.items[1].name).toBe('Editor');
  93. expect(store.items[2].name).toBe('Viewer');
  94. expect(store.items[3].name).toBe('MyTestTeam');
  95. expect(store.items[3].dashboardId).toBe(1);
  96. expect(store.items[4].name).toBe('MyTestTeam2');
  97. expect(store.items[5].name).toBe('MyTestUser');
  98. });
  99. });
  100. });