country.e2e-spec.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import { DeletionResult, LanguageCode } from '@vendure/common/lib/generated-types';
  2. import { createTestEnvironment } from '@vendure/testing';
  3. import path from 'path';
  4. import { afterAll, beforeAll, describe, expect, it } from 'vitest';
  5. import { initialData } from '../../../e2e-common/e2e-initial-data';
  6. import { TEST_SETUP_TIMEOUT_MS, testConfig } from '../../../e2e-common/test-config';
  7. import {
  8. createCountryDocument,
  9. deleteCountryDocument,
  10. getCountryDocument,
  11. } from './graphql/admin-definitions';
  12. import { ResultOf } from './graphql/graphql-admin';
  13. import { getCountryListDocument, updateCountryDocument } from './graphql/shared-definitions';
  14. /* eslint-disable @typescript-eslint/no-non-null-assertion */
  15. describe('Country resolver', () => {
  16. const { server, adminClient } = createTestEnvironment(testConfig());
  17. let countries: ResultOf<typeof getCountryListDocument>['countries']['items'];
  18. let GB: ResultOf<typeof getCountryListDocument>['countries']['items'][number];
  19. let AT: ResultOf<typeof getCountryListDocument>['countries']['items'][number];
  20. beforeAll(async () => {
  21. await server.init({
  22. initialData,
  23. productsCsvPath: path.join(__dirname, 'fixtures/e2e-products-minimal.csv'),
  24. customerCount: 1,
  25. });
  26. await adminClient.asSuperAdmin();
  27. }, TEST_SETUP_TIMEOUT_MS);
  28. afterAll(async () => {
  29. await server.destroy();
  30. });
  31. it('countries', async () => {
  32. const result = await adminClient.query(getCountryListDocument, {});
  33. expect(result.countries.totalItems).toBe(7);
  34. countries = result.countries.items;
  35. GB = countries.find(c => c.code === 'GB')!;
  36. AT = countries.find(c => c.code === 'AT')!;
  37. });
  38. it('country', async () => {
  39. const result = await adminClient.query(getCountryDocument, {
  40. id: GB.id,
  41. });
  42. expect(result.country!.name).toBe(GB.name);
  43. });
  44. it('updateCountry', async () => {
  45. const result = await adminClient.query(updateCountryDocument, {
  46. input: {
  47. id: AT.id,
  48. enabled: false,
  49. },
  50. });
  51. expect(result.updateCountry.enabled).toBe(false);
  52. });
  53. it('createCountry', async () => {
  54. const result = await adminClient.query(createCountryDocument, {
  55. input: {
  56. code: 'GL',
  57. enabled: true,
  58. translations: [{ languageCode: LanguageCode.en, name: 'Gondwanaland' }],
  59. },
  60. });
  61. expect(result.createCountry.name).toBe('Gondwanaland');
  62. });
  63. describe('deletion', () => {
  64. it('deletes Country not used in any address', async () => {
  65. const result1 = await adminClient.query(deleteCountryDocument, { id: AT.id });
  66. expect(result1.deleteCountry).toEqual({
  67. result: DeletionResult.DELETED,
  68. message: '',
  69. });
  70. const result2 = await adminClient.query(getCountryListDocument, {});
  71. expect(result2.countries.items.find(c => c.id === AT.id)).toBeUndefined();
  72. });
  73. it('does not delete Country that is used in one or more addresses', async () => {
  74. const result1 = await adminClient.query(deleteCountryDocument, { id: GB.id });
  75. expect(result1.deleteCountry).toEqual({
  76. result: DeletionResult.NOT_DELETED,
  77. message: 'The selected Country cannot be deleted as it is used in 1 Address',
  78. });
  79. const result2 = await adminClient.query(getCountryListDocument, {});
  80. expect(result2.countries.items.find(c => c.id === GB.id)).not.toBeUndefined();
  81. });
  82. });
  83. });