test-order-utils.ts 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /* tslint:disable:no-non-null-assertion */
  2. import { ID } from '../../../common/lib/shared-types';
  3. import { PaymentMethodHandler } from '../../src/config/payment-method/payment-method-handler';
  4. import { LanguageCode } from '../graphql/generated-e2e-admin-types';
  5. import {
  6. AddPaymentToOrder,
  7. GetShippingMethods,
  8. SetShippingAddress,
  9. SetShippingMethod,
  10. TransitionToState,
  11. } from '../graphql/generated-e2e-shop-types';
  12. import {
  13. ADD_PAYMENT,
  14. GET_ELIGIBLE_SHIPPING_METHODS,
  15. SET_SHIPPING_ADDRESS,
  16. SET_SHIPPING_METHOD,
  17. TRANSITION_TO_STATE,
  18. } from '../graphql/shop-definitions';
  19. import { TestShopClient } from '../test-client';
  20. export async function proceedToArrangingPayment(shopClient: TestShopClient): Promise<ID> {
  21. await shopClient.query<SetShippingAddress.Mutation, SetShippingAddress.Variables>(SET_SHIPPING_ADDRESS, {
  22. input: {
  23. fullName: 'name',
  24. streetLine1: '12 the street',
  25. city: 'foo',
  26. postalCode: '123456',
  27. countryCode: 'US',
  28. },
  29. });
  30. const { eligibleShippingMethods } = await shopClient.query<GetShippingMethods.Query>(
  31. GET_ELIGIBLE_SHIPPING_METHODS,
  32. );
  33. await shopClient.query<SetShippingMethod.Mutation, SetShippingMethod.Variables>(SET_SHIPPING_METHOD, {
  34. id: eligibleShippingMethods[1].id,
  35. });
  36. const { transitionOrderToState } = await shopClient.query<
  37. TransitionToState.Mutation,
  38. TransitionToState.Variables
  39. >(TRANSITION_TO_STATE, { state: 'ArrangingPayment' });
  40. return transitionOrderToState!.id;
  41. }
  42. export async function addPaymentToOrder(
  43. shopClient: TestShopClient,
  44. handler: PaymentMethodHandler,
  45. ): Promise<NonNullable<AddPaymentToOrder.Mutation['addPaymentToOrder']>> {
  46. const result = await shopClient.query<AddPaymentToOrder.Mutation, AddPaymentToOrder.Variables>(
  47. ADD_PAYMENT,
  48. {
  49. input: {
  50. method: handler.code,
  51. metadata: {
  52. baz: 'quux',
  53. },
  54. },
  55. },
  56. );
  57. const order = result.addPaymentToOrder!;
  58. return order as any;
  59. }
  60. export const testSuccessfulPaymentMethod = new PaymentMethodHandler({
  61. code: 'test-payment-method',
  62. description: [{ languageCode: LanguageCode.en, value: 'Test Payment Method' }],
  63. args: {},
  64. createPayment: (order, args, metadata) => {
  65. return {
  66. amount: order.total,
  67. state: 'Settled',
  68. transactionId: '12345',
  69. metadata,
  70. };
  71. },
  72. settlePayment: order => ({
  73. success: true,
  74. }),
  75. });