import gql from 'graphql-tag'; import { ADD_MEMBERS_TO_ZONE, CREATE_ZONE, GET_COUNTRY_LIST, GET_ZONE, REMOVE_MEMBERS_FROM_ZONE, UPDATE_ZONE, } from '../../admin-ui/src/app/data/definitions/settings-definitions'; import { AddMembersToZone, CreateZone, DeletionResult, GetCountryList, GetZone, RemoveMembersFromZone, UpdateZone, } from '../../shared/generated-types'; import { TEST_SETUP_TIMEOUT_MS } from './config/test-config'; import { TestClient } from './test-client'; import { TestServer } from './test-server'; // tslint:disable:no-non-null-assertion describe('Facet resolver', () => { const client = new TestClient(); const server = new TestServer(); let countries: GetCountryList.Items[]; let zones: Array<{ id: string; name: string }>; let oceania: { id: string; name: string }; let pangaea: { id: string; name: string; members: any[] }; beforeAll(async () => { await server.init({ productCount: 2, customerCount: 1, }); await client.init(); const result = await client.query(GET_COUNTRY_LIST, {}); countries = result.countries.items; }, TEST_SETUP_TIMEOUT_MS); afterAll(async () => { await server.destroy(); }); it('zones', async () => { const result = await client.query(GET_ZONE_LIST); expect(result.zones.length).toBe(6); zones = result.zones; oceania = zones[0]; }); it('zone', async () => { const result = await client.query(GET_ZONE, { id: zones[0].id, }); expect(result.zone!.name).toBe('Oceania'); }); it('updateZone', async () => { const result = await client.query(UPDATE_ZONE, { input: { id: oceania.id, name: 'oceania2', }, }); expect(result.updateZone.name).toBe('oceania2'); }); it('createZone', async () => { const result = await client.query(CREATE_ZONE, { input: { name: 'Pangaea', memberIds: [countries[0].id, countries[1].id], }, }); pangaea = result.createZone; expect(pangaea.name).toBe('Pangaea'); expect(pangaea.members.map(m => m.name)).toEqual([countries[0].name, countries[1].name]); }); it('addMembersToZone', async () => { const result = await client.query( ADD_MEMBERS_TO_ZONE, { zoneId: oceania.id, memberIds: [countries[2].id, countries[3].id], }, ); expect(result.addMembersToZone.members.map(m => m.name)).toEqual([ countries[0].name, countries[2].name, countries[3].name, ]); }); it('removeMembersFromZone', async () => { const result = await client.query( REMOVE_MEMBERS_FROM_ZONE, { zoneId: oceania.id, memberIds: [countries[0].id, countries[2].id], }, ); expect(result.removeMembersFromZone.members.map(m => m.name)).toEqual([countries[3].name]); }); describe('deletion', () => { it('deletes Zone not used in any TaxRate', async () => { const result1 = await client.query(DELETE_ZONE, { id: pangaea.id }); expect(result1.deleteZone).toEqual({ result: DeletionResult.DELETED, message: '', }); const result2 = await client.query(GET_ZONE_LIST, {}); expect(result2.zones.find(c => c.id === pangaea.id)).toBeUndefined(); }); it('does not delete Zone that is used in one or more TaxRates', async () => { const result1 = await client.query(DELETE_ZONE, { id: oceania.id }); expect(result1.deleteZone).toEqual({ result: DeletionResult.NOT_DELETED, message: 'The selected Zone cannot be deleted as it is used in the following TaxRates: Standard Tax for Oceania', }); const result2 = await client.query(GET_ZONE_LIST, {}); expect(result2.zones.find(c => c.id === oceania.id)).not.toBeUndefined(); }); }); }); const DELETE_ZONE = gql` mutation DeleteZone($id: ID!) { deleteZone(id: $id) { result message } } `; const GET_ZONE_LIST = gql` query GetZones { zones { id name } } `;