From d381dd195a56a7b4012a99d13687eac239ffadfd Mon Sep 17 00:00:00 2001 From: Baroshem Date: Sun, 22 Aug 2021 16:57:11 +0200 Subject: [PATCH] feat: #56 (api) setPaymentMethod --- .../__tests__/api/setPaymentMethod.spec.ts | 26 +++++++++++++++++++ packages/api-client/src/api/index.ts | 1 + .../addPaymentToOrderMutation.ts | 14 ++++++++++ .../src/api/setPaymentMethod/index.ts | 24 +++++++++++++++++ packages/api-client/src/types/API.ts | 4 ++- 5 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 packages/api-client/__tests__/api/setPaymentMethod.spec.ts create mode 100644 packages/api-client/src/api/setPaymentMethod/addPaymentToOrderMutation.ts create mode 100644 packages/api-client/src/api/setPaymentMethod/index.ts diff --git a/packages/api-client/__tests__/api/setPaymentMethod.spec.ts b/packages/api-client/__tests__/api/setPaymentMethod.spec.ts new file mode 100644 index 00000000..c7145ec2 --- /dev/null +++ b/packages/api-client/__tests__/api/setPaymentMethod.spec.ts @@ -0,0 +1,26 @@ +import setPaymentMethod from '../../src/api/setPaymentMethod'; +import addPaymentToOrderMutation from '../../src/api/setPaymentMethod/addPaymentToOrderMutation'; +import { Context } from '../../src/types'; + +describe('[vendure-api-client] setPaymentMethod', () => { + it('sets payment method for certain order', async () => { + const givenVariables = { metadata: { id: '1' }, method: 'test' }; + + const context = { + config: {}, + client: { + mutate: ({ variables, mutation }) => { + expect(variables).toEqual({ input: givenVariables }); + expect(mutation).toEqual(addPaymentToOrderMutation); + + return { data: 'set payment method response' }; + } + }, + extendQuery: (customQuery, args) => args + } as unknown as Context; + + const { data } = await setPaymentMethod(context, { metadata: { id: '1' }, method: 'test' }); + + expect(data).toBe('set payment method response'); + }); +}); diff --git a/packages/api-client/src/api/index.ts b/packages/api-client/src/api/index.ts index e49acfee..a35f45d6 100644 --- a/packages/api-client/src/api/index.ts +++ b/packages/api-client/src/api/index.ts @@ -11,3 +11,4 @@ export { default as getMe } from './getMe'; export { default as updateAddressDetails } from './updateAddressDetails'; export { default as getShippingMethods } from './getShippingMethods'; export { default as setShippingMethod } from './setShippingMethod'; +export { default as setPaymentMethod } from './setPaymentMethod'; diff --git a/packages/api-client/src/api/setPaymentMethod/addPaymentToOrderMutation.ts b/packages/api-client/src/api/setPaymentMethod/addPaymentToOrderMutation.ts new file mode 100644 index 00000000..331016d7 --- /dev/null +++ b/packages/api-client/src/api/setPaymentMethod/addPaymentToOrderMutation.ts @@ -0,0 +1,14 @@ +import gql from 'graphql-tag'; +import { CartFragment, ErrorResultFragment } from '../../fragments'; + +export default gql` + ${CartFragment} + ${ErrorResultFragment} + + mutation addPaymentToOrder($input: PaymentInput!) { + addPaymentToOrder(input: $input) { + ...Cart + ...ErrorResult + } + } +`; diff --git a/packages/api-client/src/api/setPaymentMethod/index.ts b/packages/api-client/src/api/setPaymentMethod/index.ts new file mode 100644 index 00000000..21d2266f --- /dev/null +++ b/packages/api-client/src/api/setPaymentMethod/index.ts @@ -0,0 +1,24 @@ +import addPaymentToOrderMutation from './addPaymentToOrderMutation'; +import { CustomQuery } from '@vue-storefront/core'; +import gql from 'graphql-tag'; +import { Context, PaymentInput, SetShippingMethodResponse } from '../../types'; + +const setPaymentMethod = async (context: Context, params: PaymentInput, customQuery?: CustomQuery): Promise => { + const setPaymentMethodVariables = { + input: params + }; + + const { addPaymentToOrder } = context.extendQuery( + customQuery, { addPaymentToOrder: { query: addPaymentToOrderMutation, variables: setPaymentMethodVariables } } + ); + + const request = await context.client.mutate({ + mutation: gql`${addPaymentToOrder.query}`, + variables: addPaymentToOrder.variables, + fetchPolicy: 'no-cache' + }) as SetShippingMethodResponse; + + return request; +}; + +export default setPaymentMethod; diff --git a/packages/api-client/src/types/API.ts b/packages/api-client/src/types/API.ts index 8dee78a2..cdaa4fb7 100644 --- a/packages/api-client/src/types/API.ts +++ b/packages/api-client/src/types/API.ts @@ -1,7 +1,7 @@ import { CustomQuery } from '@vue-storefront/core'; import { ApolloQueryResult } from 'apollo-client'; import { FetchResult } from 'apollo-link'; -import { ActiveOrderResult, ApplyCouponCodeResult, CollectionList, Customer, Order, Product, RemoveOrderItemsResult, SearchResponse, ShippingMethodQuote, UpdateOrderItemsResult } from './GraphQL'; +import { ActiveOrderResult, ApplyCouponCodeResult, CollectionList, Customer, Order, PaymentInput, Product, RemoveOrderItemsResult, SearchResponse, ShippingMethodQuote, UpdateOrderItemsResult } from './GraphQL'; import { AddToCartParams, CartCouponParams, CollectionParams, ProductParams, RemoveFromCartParams, SearchParams, SetShippingMethodParams, UpdateAddressDetailsParams, UpdateCartParams } from './types'; export type QueryResponse = ApolloQueryResult>; @@ -21,6 +21,7 @@ export type ApplyCouponCodeResponse = MutationResponse<'applyCouponCode', ApplyC export type RemoveCouponCodeResponse = MutationResponse<'removeCouponCode', Order>; export type UpdateAddressDetailsResponse = MutationResponse<'setOrderShippingAddress' | 'setOrderBillingAddress', ActiveOrderResult>; export type SetShippingMethodResponse = MutationResponse<'setOrderShippingMethod', Order>; +export type SetPaymentMethodResponse = MutationResponse<'setPaymentShippingMethod', Order>; export interface VendureApiMethods { getProduct(params: ProductParams, customQuery?: CustomQuery): Promise; @@ -36,4 +37,5 @@ export interface VendureApiMethods { removeCouponCode(params: CartCouponParams, customQuery?: CustomQuery): Promise; updateAddressDetails(params: UpdateAddressDetailsParams, customQuery?: CustomQuery): Promise; setShippingMethod(params: SetShippingMethodParams, customQuery?: CustomQuery): Promise; + setPaymentMethod(params: PaymentInput, customQuery?: CustomQuery): Promise; }