tax-category.e2e-spec.ts 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. import { DeletionResult } 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. createTaxCategoryDocument,
  9. deleteTaxCategoryDocument,
  10. getTaxCategoryDocument,
  11. getTaxCategoryListDocument,
  12. updateTaxCategoryDocument,
  13. } from './graphql/admin-definitions';
  14. import { sortById } from './utils/test-order-utils';
  15. describe('TaxCategory resolver', () => {
  16. const { server, adminClient, shopClient } = createTestEnvironment(testConfig());
  17. beforeAll(async () => {
  18. await server.init({
  19. initialData,
  20. productsCsvPath: path.join(__dirname, 'fixtures/e2e-products-minimal.csv'),
  21. customerCount: 2,
  22. });
  23. await adminClient.asSuperAdmin();
  24. }, TEST_SETUP_TIMEOUT_MS);
  25. afterAll(async () => {
  26. await server.destroy();
  27. });
  28. it('taxCategories', async () => {
  29. const { taxCategories } = await adminClient.query(getTaxCategoryListDocument);
  30. expect(taxCategories.items.sort(sortById)).toEqual([
  31. { id: 'T_1', name: 'Standard Tax', isDefault: false },
  32. { id: 'T_2', name: 'Reduced Tax', isDefault: false },
  33. { id: 'T_3', name: 'Zero Tax', isDefault: false },
  34. ]);
  35. });
  36. it('taxCategory', async () => {
  37. const { taxCategory } = await adminClient.query(getTaxCategoryDocument, {
  38. id: 'T_2',
  39. });
  40. expect(taxCategory).toEqual({
  41. id: 'T_2',
  42. name: 'Reduced Tax',
  43. isDefault: false,
  44. });
  45. });
  46. it('createTaxCategory', async () => {
  47. const { createTaxCategory } = await adminClient.query(createTaxCategoryDocument, {
  48. input: {
  49. name: 'New Category',
  50. },
  51. });
  52. expect(createTaxCategory).toEqual({
  53. id: 'T_4',
  54. name: 'New Category',
  55. isDefault: false,
  56. });
  57. });
  58. it('updateCategory', async () => {
  59. const { updateTaxCategory } = await adminClient.query(updateTaxCategoryDocument, {
  60. input: {
  61. id: 'T_4',
  62. name: 'New Category Updated',
  63. },
  64. });
  65. expect(updateTaxCategory).toEqual({
  66. id: 'T_4',
  67. name: 'New Category Updated',
  68. isDefault: false,
  69. });
  70. });
  71. it('set default', async () => {
  72. const { updateTaxCategory } = await adminClient.query(updateTaxCategoryDocument, {
  73. input: {
  74. id: 'T_2',
  75. isDefault: true,
  76. },
  77. });
  78. expect(updateTaxCategory).toEqual({
  79. id: 'T_2',
  80. name: 'Reduced Tax',
  81. isDefault: true,
  82. });
  83. const { taxCategories } = await adminClient.query(getTaxCategoryListDocument);
  84. expect(taxCategories.items.sort(sortById)).toEqual([
  85. { id: 'T_1', name: 'Standard Tax', isDefault: false },
  86. { id: 'T_2', name: 'Reduced Tax', isDefault: true },
  87. { id: 'T_3', name: 'Zero Tax', isDefault: false },
  88. { id: 'T_4', name: 'New Category Updated', isDefault: false },
  89. ]);
  90. });
  91. it('set a different default', async () => {
  92. const { updateTaxCategory } = await adminClient.query(updateTaxCategoryDocument, {
  93. input: {
  94. id: 'T_1',
  95. isDefault: true,
  96. },
  97. });
  98. expect(updateTaxCategory).toEqual({
  99. id: 'T_1',
  100. name: 'Standard Tax',
  101. isDefault: true,
  102. });
  103. const { taxCategories } = await adminClient.query(getTaxCategoryListDocument);
  104. expect(taxCategories.items.sort(sortById)).toEqual([
  105. { id: 'T_1', name: 'Standard Tax', isDefault: true },
  106. { id: 'T_2', name: 'Reduced Tax', isDefault: false },
  107. { id: 'T_3', name: 'Zero Tax', isDefault: false },
  108. { id: 'T_4', name: 'New Category Updated', isDefault: false },
  109. ]);
  110. });
  111. describe('deletion', () => {
  112. it('cannot delete if used by a TaxRate', async () => {
  113. const { deleteTaxCategory } = await adminClient.query(deleteTaxCategoryDocument, {
  114. id: 'T_2',
  115. });
  116. expect(deleteTaxCategory.result).toBe(DeletionResult.NOT_DELETED);
  117. expect(deleteTaxCategory.message).toBe(
  118. 'Cannot remove TaxCategory "Reduced Tax" as it is referenced by 5 TaxRates',
  119. );
  120. });
  121. it('can delete if not used by TaxRate', async () => {
  122. const { deleteTaxCategory } = await adminClient.query(deleteTaxCategoryDocument, {
  123. id: 'T_4',
  124. });
  125. expect(deleteTaxCategory.result).toBe(DeletionResult.DELETED);
  126. expect(deleteTaxCategory.message).toBeNull();
  127. const { taxCategory } = await adminClient.query(getTaxCategoryDocument, {
  128. id: 'T_4',
  129. });
  130. expect(taxCategory).toBeNull();
  131. });
  132. });
  133. });