zone.e2e-spec.ts 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. import gql from 'graphql-tag';
  2. import {
  3. ADD_MEMBERS_TO_ZONE,
  4. CREATE_ZONE,
  5. GET_COUNTRY_LIST,
  6. GET_ZONE,
  7. REMOVE_MEMBERS_FROM_ZONE,
  8. UPDATE_ZONE,
  9. } from '../../admin-ui/src/app/data/definitions/settings-definitions';
  10. import {
  11. AddMembersToZone,
  12. CreateZone,
  13. DeletionResult,
  14. GetCountryList,
  15. GetZone,
  16. RemoveMembersFromZone,
  17. UpdateZone,
  18. } from '../../shared/generated-types';
  19. import { TEST_SETUP_TIMEOUT_MS } from './config/test-config';
  20. import { TestClient } from './test-client';
  21. import { TestServer } from './test-server';
  22. // tslint:disable:no-non-null-assertion
  23. describe('Facet resolver', () => {
  24. const client = new TestClient();
  25. const server = new TestServer();
  26. let countries: GetCountryList.Items[];
  27. let zones: Array<{ id: string; name: string }>;
  28. let oceania: { id: string; name: string };
  29. let pangaea: { id: string; name: string; members: any[] };
  30. beforeAll(async () => {
  31. await server.init({
  32. productCount: 2,
  33. customerCount: 1,
  34. });
  35. await client.init();
  36. const result = await client.query<GetCountryList.Query>(GET_COUNTRY_LIST, {});
  37. countries = result.countries.items;
  38. }, TEST_SETUP_TIMEOUT_MS);
  39. afterAll(async () => {
  40. await server.destroy();
  41. });
  42. it('zones', async () => {
  43. const result = await client.query(GET_ZONE_LIST);
  44. expect(result.zones.length).toBe(6);
  45. zones = result.zones;
  46. oceania = zones[0];
  47. });
  48. it('zone', async () => {
  49. const result = await client.query<GetZone.Query, GetZone.Variables>(GET_ZONE, {
  50. id: zones[0].id,
  51. });
  52. expect(result.zone!.name).toBe('Oceania');
  53. });
  54. it('updateZone', async () => {
  55. const result = await client.query<UpdateZone.Mutation, UpdateZone.Variables>(UPDATE_ZONE, {
  56. input: {
  57. id: oceania.id,
  58. name: 'oceania2',
  59. },
  60. });
  61. expect(result.updateZone.name).toBe('oceania2');
  62. });
  63. it('createZone', async () => {
  64. const result = await client.query<CreateZone.Mutation, CreateZone.Variables>(CREATE_ZONE, {
  65. input: {
  66. name: 'Pangaea',
  67. memberIds: [countries[0].id, countries[1].id],
  68. },
  69. });
  70. pangaea = result.createZone;
  71. expect(pangaea.name).toBe('Pangaea');
  72. expect(pangaea.members.map(m => m.name)).toEqual([countries[0].name, countries[1].name]);
  73. });
  74. it('addMembersToZone', async () => {
  75. const result = await client.query<AddMembersToZone.Mutation, AddMembersToZone.Variables>(
  76. ADD_MEMBERS_TO_ZONE,
  77. {
  78. zoneId: oceania.id,
  79. memberIds: [countries[2].id, countries[3].id],
  80. },
  81. );
  82. expect(result.addMembersToZone.members.map(m => m.name)).toEqual([
  83. countries[0].name,
  84. countries[2].name,
  85. countries[3].name,
  86. ]);
  87. });
  88. it('removeMembersFromZone', async () => {
  89. const result = await client.query<RemoveMembersFromZone.Mutation, RemoveMembersFromZone.Variables>(
  90. REMOVE_MEMBERS_FROM_ZONE,
  91. {
  92. zoneId: oceania.id,
  93. memberIds: [countries[0].id, countries[2].id],
  94. },
  95. );
  96. expect(result.removeMembersFromZone.members.map(m => m.name)).toEqual([countries[3].name]);
  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 => 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 TaxRates: Standard Tax for Oceania',
  114. });
  115. const result2 = await client.query(GET_ZONE_LIST, {});
  116. expect(result2.zones.find(c => c.id === oceania.id)).not.toBeUndefined();
  117. });
  118. });
  119. });
  120. const DELETE_ZONE = gql`
  121. mutation DeleteZone($id: ID!) {
  122. deleteZone(id: $id) {
  123. result
  124. message
  125. }
  126. }
  127. `;
  128. const GET_ZONE_LIST = gql`
  129. query GetZones {
  130. zones {
  131. id
  132. name
  133. }
  134. }
  135. `;