zone.e2e-spec.ts 6.1 KB

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