zone.e2e-spec.ts 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  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 { ZONE_FRAGMENT } from './graphql/fragments';
  7. import {
  8. AddMembersToZone,
  9. CreateZone,
  10. DeleteZone,
  11. DeletionResult,
  12. GetCountryList,
  13. GetZone,
  14. GetZones,
  15. RemoveMembersFromZone,
  16. UpdateZone,
  17. } from './graphql/generated-e2e-admin-types';
  18. import { GET_COUNTRY_LIST } from './graphql/shared-definitions';
  19. // tslint:disable:no-non-null-assertion
  20. describe('Facet resolver', () => {
  21. const { server, adminClient } = createTestEnvironment(testConfig);
  22. let countries: GetCountryList.Items[];
  23. let zones: Array<{ id: string; name: string }>;
  24. let oceania: { id: string; name: string };
  25. let pangaea: { id: string; name: string; members: any[] };
  26. beforeAll(async () => {
  27. await server.init({
  28. initialData,
  29. productsCsvPath: path.join(__dirname, 'fixtures/e2e-products-minimal.csv'),
  30. customerCount: 1,
  31. });
  32. await adminClient.asSuperAdmin();
  33. const result = await adminClient.query<GetCountryList.Query>(GET_COUNTRY_LIST, {});
  34. countries = result.countries.items;
  35. }, TEST_SETUP_TIMEOUT_MS);
  36. afterAll(async () => {
  37. await server.destroy();
  38. });
  39. it('zones', async () => {
  40. const result = await adminClient.query<GetZones.Query>(GET_ZONE_LIST);
  41. expect(result.zones.length).toBe(5);
  42. zones = result.zones;
  43. oceania = zones[0];
  44. });
  45. it('zone', async () => {
  46. const result = await adminClient.query<GetZone.Query, GetZone.Variables>(GET_ZONE, {
  47. id: oceania.id,
  48. });
  49. expect(result.zone!.name).toBe('Oceania');
  50. });
  51. it('updateZone', async () => {
  52. const result = await adminClient.query<UpdateZone.Mutation, UpdateZone.Variables>(UPDATE_ZONE, {
  53. input: {
  54. id: oceania.id,
  55. name: 'oceania2',
  56. },
  57. });
  58. expect(result.updateZone.name).toBe('oceania2');
  59. });
  60. it('createZone', async () => {
  61. const result = await adminClient.query<CreateZone.Mutation, CreateZone.Variables>(CREATE_ZONE, {
  62. input: {
  63. name: 'Pangaea',
  64. memberIds: [countries[0].id, countries[1].id],
  65. },
  66. });
  67. pangaea = result.createZone;
  68. expect(pangaea.name).toBe('Pangaea');
  69. expect(pangaea.members.map(m => m.name)).toEqual([countries[0].name, countries[1].name]);
  70. });
  71. it('addMembersToZone', async () => {
  72. const result = await adminClient.query<AddMembersToZone.Mutation, AddMembersToZone.Variables>(
  73. ADD_MEMBERS_TO_ZONE,
  74. {
  75. zoneId: oceania.id,
  76. memberIds: [countries[2].id, countries[3].id],
  77. },
  78. );
  79. expect(!!result.addMembersToZone.members.find(m => m.name === countries[2].name)).toBe(true);
  80. expect(!!result.addMembersToZone.members.find(m => m.name === countries[3].name)).toBe(true);
  81. });
  82. it('removeMembersFromZone', async () => {
  83. const result = await adminClient.query<
  84. RemoveMembersFromZone.Mutation,
  85. RemoveMembersFromZone.Variables
  86. >(REMOVE_MEMBERS_FROM_ZONE, {
  87. zoneId: oceania.id,
  88. memberIds: [countries[0].id, countries[2].id],
  89. });
  90. expect(!!result.removeMembersFromZone.members.find(m => m.name === countries[0].name)).toBe(false);
  91. expect(!!result.removeMembersFromZone.members.find(m => m.name === countries[2].name)).toBe(false);
  92. expect(!!result.removeMembersFromZone.members.find(m => m.name === countries[3].name)).toBe(true);
  93. });
  94. describe('deletion', () => {
  95. it('deletes Zone not used in any TaxRate', async () => {
  96. const result1 = await adminClient.query<DeleteZone.Mutation, DeleteZone.Variables>(DELETE_ZONE, {
  97. id: pangaea.id,
  98. });
  99. expect(result1.deleteZone).toEqual({
  100. result: DeletionResult.DELETED,
  101. message: '',
  102. });
  103. const result2 = await adminClient.query<GetZones.Query>(GET_ZONE_LIST);
  104. expect(result2.zones.find(c => c.id === pangaea.id)).toBeUndefined();
  105. });
  106. it('does not delete Zone that is used in one or more TaxRates', async () => {
  107. const result1 = await adminClient.query<DeleteZone.Mutation, DeleteZone.Variables>(DELETE_ZONE, {
  108. id: oceania.id,
  109. });
  110. expect(result1.deleteZone).toEqual({
  111. result: DeletionResult.NOT_DELETED,
  112. message:
  113. 'The selected Zone cannot be deleted as it is used in the following ' +
  114. 'TaxRates: Standard Tax Oceania, Reduced Tax Oceania, Zero Tax Oceania',
  115. });
  116. const result2 = await adminClient.query<GetZones.Query>(GET_ZONE_LIST);
  117. expect(result2.zones.find(c => c.id === oceania.id)).not.toBeUndefined();
  118. });
  119. });
  120. });
  121. const DELETE_ZONE = gql`
  122. mutation DeleteZone($id: ID!) {
  123. deleteZone(id: $id) {
  124. result
  125. message
  126. }
  127. }
  128. `;
  129. const GET_ZONE_LIST = gql`
  130. query GetZones {
  131. zones {
  132. id
  133. name
  134. }
  135. }
  136. `;
  137. export const GET_ZONE = gql`
  138. query GetZone($id: ID!) {
  139. zone(id: $id) {
  140. ...Zone
  141. }
  142. }
  143. ${ZONE_FRAGMENT}
  144. `;
  145. export const CREATE_ZONE = gql`
  146. mutation CreateZone($input: CreateZoneInput!) {
  147. createZone(input: $input) {
  148. ...Zone
  149. }
  150. }
  151. ${ZONE_FRAGMENT}
  152. `;
  153. export const UPDATE_ZONE = gql`
  154. mutation UpdateZone($input: UpdateZoneInput!) {
  155. updateZone(input: $input) {
  156. ...Zone
  157. }
  158. }
  159. ${ZONE_FRAGMENT}
  160. `;
  161. export const ADD_MEMBERS_TO_ZONE = gql`
  162. mutation AddMembersToZone($zoneId: ID!, $memberIds: [ID!]!) {
  163. addMembersToZone(zoneId: $zoneId, memberIds: $memberIds) {
  164. ...Zone
  165. }
  166. }
  167. ${ZONE_FRAGMENT}
  168. `;
  169. export const REMOVE_MEMBERS_FROM_ZONE = gql`
  170. mutation RemoveMembersFromZone($zoneId: ID!, $memberIds: [ID!]!) {
  171. removeMembersFromZone(zoneId: $zoneId, memberIds: $memberIds) {
  172. ...Zone
  173. }
  174. }
  175. ${ZONE_FRAGMENT}
  176. `;