administrator.e2e-spec.ts 8.2 KB

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