1
0

zone.e2e-spec.ts 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. import {
  2. AddMembersToZone,
  3. CreateZone,
  4. DeletionResult,
  5. GetCountryList,
  6. GetZone,
  7. RemoveMembersFromZone,
  8. UpdateZone,
  9. } from '@vendure/common/lib/generated-types';
  10. import gql from 'graphql-tag';
  11. import path from 'path';
  12. import {
  13. ADD_MEMBERS_TO_ZONE,
  14. CREATE_ZONE,
  15. GET_COUNTRY_LIST,
  16. GET_ZONE,
  17. REMOVE_MEMBERS_FROM_ZONE,
  18. UPDATE_ZONE,
  19. } from '../../../admin-ui/src/app/data/definitions/settings-definitions';
  20. import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
  21. import { TestAdminClient } from './test-client';
  22. import { TestServer } from './test-server';
  23. // tslint:disable:no-non-null-assertion
  24. describe('Facet resolver', () => {
  25. const client = new TestAdminClient();
  26. const server = new TestServer();
  27. let countries: GetCountryList.Items[];
  28. let zones: Array<{ id: string; name: string }>;
  29. let oceania: { id: string; name: string };
  30. let pangaea: { id: string; name: string; members: any[] };
  31. beforeAll(async () => {
  32. await server.init({
  33. productsCsvPath: path.join(__dirname, 'fixtures/e2e-products-minimal.csv'),
  34. customerCount: 1,
  35. });
  36. await client.init();
  37. const result = await client.query<GetCountryList.Query>(GET_COUNTRY_LIST, {});
  38. countries = result.countries.items;
  39. }, TEST_SETUP_TIMEOUT_MS);
  40. afterAll(async () => {
  41. await server.destroy();
  42. });
  43. it('zones', async () => {
  44. const result = await client.query(GET_ZONE_LIST);
  45. expect(result.zones.length).toBe(5);
  46. zones = result.zones;
  47. oceania = zones[0];
  48. });
  49. it('zone', async () => {
  50. const result = await client.query<GetZone.Query, GetZone.Variables>(GET_ZONE, {
  51. id: oceania.id,
  52. });
  53. expect(result.zone!.name).toBe('Oceania');
  54. });
  55. it('updateZone', async () => {
  56. const result = await client.query<UpdateZone.Mutation, UpdateZone.Variables>(UPDATE_ZONE, {
  57. input: {
  58. id: oceania.id,
  59. name: 'oceania2',
  60. },
  61. });
  62. expect(result.updateZone.name).toBe('oceania2');
  63. });
  64. it('createZone', async () => {
  65. const result = await client.query<CreateZone.Mutation, CreateZone.Variables>(CREATE_ZONE, {
  66. input: {
  67. name: 'Pangaea',
  68. memberIds: [countries[0].id, countries[1].id],
  69. },
  70. });
  71. pangaea = result.createZone;
  72. expect(pangaea.name).toBe('Pangaea');
  73. expect(pangaea.members.map(m => m.name)).toEqual([countries[0].name, countries[1].name]);
  74. });
  75. it('addMembersToZone', async () => {
  76. const result = await client.query<AddMembersToZone.Mutation, AddMembersToZone.Variables>(
  77. ADD_MEMBERS_TO_ZONE,
  78. {
  79. zoneId: oceania.id,
  80. memberIds: [countries[2].id, countries[3].id],
  81. },
  82. );
  83. expect(!!result.addMembersToZone.members.find(m => m.name === countries[2].name)).toBe(true);
  84. expect(!!result.addMembersToZone.members.find(m => m.name === countries[3].name)).toBe(true);
  85. });
  86. it('removeMembersFromZone', async () => {
  87. const result = await client.query<RemoveMembersFromZone.Mutation, RemoveMembersFromZone.Variables>(
  88. REMOVE_MEMBERS_FROM_ZONE,
  89. {
  90. zoneId: oceania.id,
  91. memberIds: [countries[0].id, countries[2].id],
  92. },
  93. );
  94. expect(!!result.removeMembersFromZone.members.find(m => m.name === countries[0].name)).toBe(false);
  95. expect(!!result.removeMembersFromZone.members.find(m => m.name === countries[2].name)).toBe(false);
  96. expect(!!result.removeMembersFromZone.members.find(m => m.name === countries[3].name)).toBe(true);
  97. });
  98. describe('deletion', () => {
  99. it('deletes Zone not used in any TaxRate', async () => {
  100. const result1 = await client.query(DELETE_ZONE, { id: pangaea.id });
  101. expect(result1.deleteZone).toEqual({
  102. result: DeletionResult.DELETED,
  103. message: '',
  104. });
  105. const result2 = await client.query(GET_ZONE_LIST, {});
  106. expect(result2.zones.find((c: any) => c.id === pangaea.id)).toBeUndefined();
  107. });
  108. it('does not delete Zone that is used in one or more TaxRates', async () => {
  109. const result1 = await client.query(DELETE_ZONE, { id: oceania.id });
  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 client.query(GET_ZONE_LIST, {});
  117. expect(result2.zones.find((c: any) => 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. `;