test-payment-methods.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import { PaymentMethodHandler } from '@vendure/core';
  2. import { LanguageCode } from '../graphql/generated-e2e-admin-types';
  3. export const testSuccessfulPaymentMethod = new PaymentMethodHandler({
  4. code: 'test-payment-method',
  5. description: [{ languageCode: LanguageCode.en, value: 'Test Payment Method' }],
  6. args: {},
  7. createPayment: (order, args, metadata) => {
  8. return {
  9. amount: order.total,
  10. state: 'Settled',
  11. transactionId: '12345',
  12. metadata,
  13. };
  14. },
  15. settlePayment: order => ({
  16. success: true,
  17. }),
  18. });
  19. export const onTransitionSpy = jest.fn();
  20. /**
  21. * A two-stage (authorize, capture) payment method, with no createRefund method.
  22. */
  23. export const twoStagePaymentMethod = new PaymentMethodHandler({
  24. code: 'authorize-only-payment-method',
  25. description: [{ languageCode: LanguageCode.en, value: 'Test Payment Method' }],
  26. args: {},
  27. createPayment: (order, args, metadata) => {
  28. return {
  29. amount: order.total,
  30. state: 'Authorized',
  31. transactionId: '12345',
  32. metadata,
  33. };
  34. },
  35. settlePayment: () => {
  36. return {
  37. success: true,
  38. metadata: {
  39. moreData: 42,
  40. },
  41. };
  42. },
  43. onStateTransitionStart: (fromState, toState, data) => {
  44. onTransitionSpy(fromState, toState, data);
  45. },
  46. });
  47. /**
  48. * A payment method which includes a createRefund method.
  49. */
  50. export const singleStageRefundablePaymentMethod = new PaymentMethodHandler({
  51. code: 'single-stage-refundable-payment-method',
  52. description: [{ languageCode: LanguageCode.en, value: 'Test Payment Method' }],
  53. args: {},
  54. createPayment: (order, args, metadata) => {
  55. return {
  56. amount: order.total,
  57. state: 'Settled',
  58. transactionId: '12345',
  59. metadata,
  60. };
  61. },
  62. settlePayment: () => {
  63. return { success: true };
  64. },
  65. createRefund: (input, total, order, payment, args) => {
  66. return {
  67. amount: total,
  68. state: 'Settled',
  69. transactionId: 'abc123',
  70. };
  71. },
  72. });
  73. /**
  74. * A payment method where calling `settlePayment` always fails.
  75. */
  76. export const failsToSettlePaymentMethod = new PaymentMethodHandler({
  77. code: 'fails-to-settle-payment-method',
  78. description: [{ languageCode: LanguageCode.en, value: 'Test Payment Method' }],
  79. args: {},
  80. createPayment: (order, args, metadata) => {
  81. return {
  82. amount: order.total,
  83. state: 'Authorized',
  84. transactionId: '12345',
  85. metadata,
  86. };
  87. },
  88. settlePayment: () => {
  89. return {
  90. success: false,
  91. errorMessage: 'Something went horribly wrong',
  92. };
  93. },
  94. });
  95. export const testFailingPaymentMethod = new PaymentMethodHandler({
  96. code: 'test-failing-payment-method',
  97. description: [{ languageCode: LanguageCode.en, value: 'Test Failing Payment Method' }],
  98. args: {},
  99. createPayment: (order, args, metadata) => {
  100. return {
  101. amount: order.total,
  102. state: 'Declined',
  103. errorMessage: 'Insufficient funds',
  104. metadata,
  105. };
  106. },
  107. settlePayment: order => ({
  108. success: true,
  109. }),
  110. });
  111. export const testErrorPaymentMethod = new PaymentMethodHandler({
  112. code: 'test-error-payment-method',
  113. description: [{ languageCode: LanguageCode.en, value: 'Test Error Payment Method' }],
  114. args: {},
  115. createPayment: (order, args, metadata) => {
  116. return {
  117. amount: order.total,
  118. state: 'Error',
  119. errorMessage: 'Something went horribly wrong',
  120. metadata,
  121. };
  122. },
  123. settlePayment: order => ({
  124. success: true,
  125. }),
  126. });