administrator.e2e-spec.ts 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. import { createTestEnvironment } from '@vendure/testing';
  2. import gql from 'graphql-tag';
  3. import path from 'path';
  4. import { initialData } from '../../../e2e-common/e2e-initial-data';
  5. import { TEST_SETUP_TIMEOUT_MS, testConfig } from '../../../e2e-common/test-config';
  6. import { ADMINISTRATOR_FRAGMENT } from './graphql/fragments';
  7. import {
  8. Administrator,
  9. CreateAdministrator,
  10. DeleteAdministrator,
  11. DeletionResult,
  12. GetAdministrator,
  13. GetAdministrators,
  14. UpdateAdministrator,
  15. } from './graphql/generated-e2e-admin-types';
  16. import { CREATE_ADMINISTRATOR } from './graphql/shared-definitions';
  17. import { assertThrowsWithMessage } from './utils/assert-throws-with-message';
  18. describe('Administrator resolver', () => {
  19. const { server, adminClient } = createTestEnvironment(testConfig);
  20. let createdAdmin: Administrator.Fragment;
  21. beforeAll(async () => {
  22. await server.init({
  23. initialData,
  24. productsCsvPath: path.join(__dirname, 'fixtures/e2e-products-minimal.csv'),
  25. customerCount: 1,
  26. });
  27. await adminClient.asSuperAdmin();
  28. }, TEST_SETUP_TIMEOUT_MS);
  29. afterAll(async () => {
  30. await server.destroy();
  31. });
  32. it('administrators', async () => {
  33. const result = await adminClient.query<GetAdministrators.Query, GetAdministrators.Variables>(
  34. GET_ADMINISTRATORS,
  35. );
  36. expect(result.administrators.items.length).toBe(1);
  37. expect(result.administrators.totalItems).toBe(1);
  38. });
  39. it('createAdministrator', async () => {
  40. const result = await adminClient.query<CreateAdministrator.Mutation, CreateAdministrator.Variables>(
  41. CREATE_ADMINISTRATOR,
  42. {
  43. input: {
  44. emailAddress: 'test@test.com',
  45. firstName: 'First',
  46. lastName: 'Last',
  47. password: 'password',
  48. roleIds: ['1'],
  49. },
  50. },
  51. );
  52. createdAdmin = result.createAdministrator;
  53. expect(createdAdmin).toMatchSnapshot();
  54. });
  55. it('administrator', async () => {
  56. const result = await adminClient.query<GetAdministrator.Query, GetAdministrator.Variables>(
  57. GET_ADMINISTRATOR,
  58. {
  59. id: createdAdmin.id,
  60. },
  61. );
  62. expect(result.administrator).toEqual(createdAdmin);
  63. });
  64. it('updateAdministrator', async () => {
  65. const result = await adminClient.query<UpdateAdministrator.Mutation, UpdateAdministrator.Variables>(
  66. UPDATE_ADMINISTRATOR,
  67. {
  68. input: {
  69. id: createdAdmin.id,
  70. emailAddress: 'new-email',
  71. firstName: 'new first',
  72. lastName: 'new last',
  73. password: 'new password',
  74. roleIds: ['2'],
  75. },
  76. },
  77. );
  78. expect(result.updateAdministrator).toMatchSnapshot();
  79. });
  80. it('updateAdministrator works with partial input', async () => {
  81. const result = await adminClient.query<UpdateAdministrator.Mutation, UpdateAdministrator.Variables>(
  82. UPDATE_ADMINISTRATOR,
  83. {
  84. input: {
  85. id: createdAdmin.id,
  86. emailAddress: 'newest-email',
  87. },
  88. },
  89. );
  90. expect(result.updateAdministrator.emailAddress).toBe('newest-email');
  91. expect(result.updateAdministrator.firstName).toBe('new first');
  92. expect(result.updateAdministrator.lastName).toBe('new last');
  93. });
  94. it(
  95. 'updateAdministrator throws with invalid roleId',
  96. assertThrowsWithMessage(
  97. () =>
  98. adminClient.query<UpdateAdministrator.Mutation, UpdateAdministrator.Variables>(
  99. UPDATE_ADMINISTRATOR,
  100. {
  101. input: {
  102. id: createdAdmin.id,
  103. emailAddress: 'new-email',
  104. firstName: 'new first',
  105. lastName: 'new last',
  106. password: 'new password',
  107. roleIds: ['999'],
  108. },
  109. },
  110. ),
  111. `No Role with the id '999' could be found`,
  112. ),
  113. );
  114. it('deleteAdministrator', async () => {
  115. const { administrators: before } = await adminClient.query<
  116. GetAdministrators.Query,
  117. GetAdministrators.Variables
  118. >(GET_ADMINISTRATORS);
  119. expect(before.totalItems).toBe(2);
  120. const { deleteAdministrator } = await adminClient.query<
  121. DeleteAdministrator.Mutation,
  122. DeleteAdministrator.Variables
  123. >(DELETE_ADMINISTRATOR, {
  124. id: createdAdmin.id,
  125. });
  126. expect(deleteAdministrator.result).toBe(DeletionResult.DELETED);
  127. const { administrators: after } = await adminClient.query<
  128. GetAdministrators.Query,
  129. GetAdministrators.Variables
  130. >(GET_ADMINISTRATORS);
  131. expect(after.totalItems).toBe(1);
  132. });
  133. it('cannot query a deleted Administrator', async () => {
  134. const { administrator } = await adminClient.query<GetAdministrator.Query, GetAdministrator.Variables>(
  135. GET_ADMINISTRATOR,
  136. {
  137. id: createdAdmin.id,
  138. },
  139. );
  140. expect(administrator).toBeNull();
  141. });
  142. });
  143. export const GET_ADMINISTRATORS = gql`
  144. query GetAdministrators($options: AdministratorListOptions) {
  145. administrators(options: $options) {
  146. items {
  147. ...Administrator
  148. }
  149. totalItems
  150. }
  151. }
  152. ${ADMINISTRATOR_FRAGMENT}
  153. `;
  154. export const GET_ADMINISTRATOR = gql`
  155. query GetAdministrator($id: ID!) {
  156. administrator(id: $id) {
  157. ...Administrator
  158. }
  159. }
  160. ${ADMINISTRATOR_FRAGMENT}
  161. `;
  162. export const UPDATE_ADMINISTRATOR = gql`
  163. mutation UpdateAdministrator($input: UpdateAdministratorInput!) {
  164. updateAdministrator(input: $input) {
  165. ...Administrator
  166. }
  167. }
  168. ${ADMINISTRATOR_FRAGMENT}
  169. `;
  170. export const DELETE_ADMINISTRATOR = gql`
  171. mutation DeleteAdministrator($id: ID!) {
  172. deleteAdministrator(id: $id) {
  173. message
  174. result
  175. }
  176. }
  177. `;