role.e2e-spec.ts 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import { CreateRole, GetRole, GetRoles, Permission, Role, UpdateRole } from '@vendure/common/lib/generated-types';
  2. import { omit } from '@vendure/common/lib/omit';
  3. import { CUSTOMER_ROLE_CODE, SUPER_ADMIN_ROLE_CODE } from '@vendure/common/lib/shared-constants';
  4. import path from 'path';
  5. import { CREATE_ROLE, GET_ROLE, GET_ROLES, UPDATE_ROLE } from '../../../admin-ui/src/app/data/definitions/administrator-definitions';
  6. import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
  7. import { TestAdminClient } from './test-client';
  8. import { TestServer } from './test-server';
  9. import { assertThrowsWithMessage } from './utils/assert-throws-with-message';
  10. describe('Role resolver', () => {
  11. const client = new TestAdminClient();
  12. const server = new TestServer();
  13. let createdRole: Role.Fragment;
  14. let defaultRoles: Role.Fragment[];
  15. beforeAll(async () => {
  16. const token = await server.init({
  17. productsCsvPath: path.join(__dirname, 'fixtures/e2e-products-minimal.csv'),
  18. customerCount: 1,
  19. });
  20. await client.init();
  21. }, TEST_SETUP_TIMEOUT_MS);
  22. afterAll(async () => {
  23. await server.destroy();
  24. });
  25. it('roles', async () => {
  26. const result = await client.query<GetRoles.Query, GetRoles.Variables>(GET_ROLES);
  27. defaultRoles = result.roles.items;
  28. expect(result.roles.items.length).toBe(2);
  29. expect(result.roles.totalItems).toBe(2);
  30. });
  31. it('createRole', async () => {
  32. const result = await client.query<CreateRole.Mutation, CreateRole.Variables>(CREATE_ROLE, {
  33. input: {
  34. code: 'test',
  35. description: 'test role',
  36. permissions: [Permission.ReadCustomer, Permission.UpdateCustomer],
  37. },
  38. });
  39. createdRole = result.createRole;
  40. expect(omit(createdRole, ['channels'])).toMatchSnapshot();
  41. });
  42. it('role', async () => {
  43. const result = await client.query<GetRole.Query, GetRole.Variables>(GET_ROLE, { id: createdRole.id });
  44. expect(result.role).toEqual(createdRole);
  45. });
  46. it('updateRole', async () => {
  47. const result = await client.query<UpdateRole.Mutation, UpdateRole.Variables>(UPDATE_ROLE, {
  48. input: {
  49. id: createdRole.id,
  50. code: 'test-modified',
  51. description: 'test role modified',
  52. permissions: [Permission.ReadCustomer, Permission.UpdateCustomer, Permission.DeleteCustomer],
  53. },
  54. });
  55. expect(omit(result.updateRole, ['channels'])).toMatchSnapshot();
  56. });
  57. it('updateRole works with partial input', async () => {
  58. const result = await client.query<UpdateRole.Mutation, UpdateRole.Variables>(UPDATE_ROLE, {
  59. input: {
  60. id: createdRole.id,
  61. code: 'test-modified-again',
  62. },
  63. });
  64. expect(result.updateRole.code).toBe('test-modified-again');
  65. expect(result.updateRole.description).toBe('test role modified');
  66. expect(result.updateRole.permissions).toEqual([
  67. Permission.ReadCustomer,
  68. Permission.UpdateCustomer,
  69. Permission.DeleteCustomer,
  70. ]);
  71. });
  72. it(
  73. 'updateRole is not allowed for SuperAdmin role',
  74. assertThrowsWithMessage(async () => {
  75. const superAdminRole = defaultRoles.find(r => r.code === SUPER_ADMIN_ROLE_CODE);
  76. if (!superAdminRole) {
  77. fail(`Could not find SuperAdmin role`);
  78. return;
  79. }
  80. return client.query<UpdateRole.Mutation, UpdateRole.Variables>(UPDATE_ROLE, {
  81. input: {
  82. id: superAdminRole.id,
  83. code: 'superadmin-modified',
  84. description: 'superadmin modified',
  85. permissions: [Permission.Authenticated],
  86. },
  87. });
  88. }, `The role '${SUPER_ADMIN_ROLE_CODE}' cannot be modified`),
  89. );
  90. it(
  91. 'updateRole is not allowed for Customer role',
  92. assertThrowsWithMessage(async () => {
  93. const customerRole = defaultRoles.find(r => r.code === CUSTOMER_ROLE_CODE);
  94. if (!customerRole) {
  95. fail(`Could not find Customer role`);
  96. return;
  97. }
  98. return client.query<UpdateRole.Mutation, UpdateRole.Variables>(UPDATE_ROLE, {
  99. input: {
  100. id: customerRole.id,
  101. code: 'customer-modified',
  102. description: 'customer modified',
  103. permissions: [Permission.Authenticated, Permission.DeleteAdministrator],
  104. },
  105. });
  106. }, `The role '${CUSTOMER_ROLE_CODE}' cannot be modified`),
  107. );
  108. });