Skip to content

Commit

Permalink
feat: #49 (api) create api-client function
Browse files Browse the repository at this point in the history
  • Loading branch information
Baroshem committed Aug 20, 2021
1 parent 024c562 commit 312f896
Show file tree
Hide file tree
Showing 8 changed files with 146 additions and 5 deletions.
77 changes: 77 additions & 0 deletions packages/api-client/__tests__/api/updateAddressDetails.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import updateAddressDetails from '../../src/api/updateAddressDetails';
import setOrderBillingAddressMutation from './../../src/api/updateAddressDetails/setOrderBillingAddressMutation';
import setOrderShippingAddressMutation from './../../src/api/updateAddressDetails/setOrderShippingAddressMutation';
import { Context } from '../../src/types';
import { BILLING_TYPE } from '../../src/helpers/constants';

describe('[vendure-api-client] updateAddressDetails', () => {
it('updates shipping details', async () => {
const givenVariables = {
input: {
fullName: 'Eliot Anderson',
company: 'F Society',
streetLine1: '1st Avenue',
streetLine2: '1st Avenue',
city: 'New York',
province: 'New York',
postalCode: '34-234',
countryCode: 'US',
phoneNumber: '123123123',
defaultShippingAddress: true,
defaultBillingAddress: false
}
};

const context = ({
config: {},
client: {
mutate: ({ variables, mutation }) => {
expect(variables).toEqual(givenVariables);
expect(mutation).toEqual(setOrderShippingAddressMutation);

return { data: 'update shipping details response' };
}
},
extendQuery: (customQuery, args) => args
} as unknown) as Context;

const { data } = await updateAddressDetails(context, { input: givenVariables.input });

expect(data).toBe('update shipping details response');
});

it('updates billing details', async () => {
const givenVariables = {
input: {
fullName: 'Eliot Anderson',
company: 'F Society',
streetLine1: '1st Avenue',
streetLine2: '1st Avenue',
city: 'New York',
province: 'New York',
postalCode: '34-234',
countryCode: 'US',
phoneNumber: '123123123',
defaultShippingAddress: false,
defaultBillingAddress: true
}
};

const context = ({
config: {},
client: {
mutate: ({ variables, mutation }) => {
expect(variables).toEqual(givenVariables);
expect(mutation).toEqual(setOrderBillingAddressMutation);

return { data: 'update billing details response' };
}
},
extendQuery: (customQuery, args) => args
} as unknown) as Context;

const { data } = await updateAddressDetails(context, { input: givenVariables.input, type: BILLING_TYPE });

expect(data).toBe('update billing details response');
});
});
1 change: 1 addition & 0 deletions packages/api-client/src/api/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ export { default as updateCartQuantity } from './updateCartQuantity';
export { default as applyCartCoupon } from './applyCartCoupon';
export { default as removeCartCoupon } from './removeCartCoupon';
export { default as getMe } from './getMe';
export { default as updateAddressDetails } from './updateAddressDetails';
27 changes: 27 additions & 0 deletions packages/api-client/src/api/updateAddressDetails/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import setOrderBillingAddressMutation from './setOrderBillingAddressMutation';
import setOrderShippingAddressMutation from './setOrderShippingAddressMutation';
import { CustomQuery } from '@vue-storefront/core';
import gql from 'graphql-tag';
import { Context, UpdateAddressDetailsParams, UpdateAddressDetailsResponse } from '../../types';
import { BILLING_TYPE } from '../../helpers/constants';

const updateAddressDetails = async (context: Context, params: UpdateAddressDetailsParams, customQuery?: CustomQuery): Promise<UpdateAddressDetailsResponse> => {
const { type, input } = params;
const updateAddressDetailsVariables = { input };

const updateAddressDetailsQuery = type === BILLING_TYPE ? setOrderBillingAddressMutation : setOrderShippingAddressMutation;

const { updateAddressDetails } = context.extendQuery(
customQuery, { updateAddressDetails: { query: updateAddressDetailsQuery, variables: updateAddressDetailsVariables } }
);

const request = await context.client.mutate({
mutation: gql`${updateAddressDetails.query}`,
variables: updateAddressDetails.variables,
fetchPolicy: 'no-cache'
}) as UpdateAddressDetailsResponse;

return request;
};

export default updateAddressDetails;
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import gql from 'graphql-tag';
import { CartFragment, ErrorResultFragment } from '../../fragments';

export default gql`
${CartFragment}
${ErrorResultFragment}
mutation setOrderBillingAddress($input: CreateAddressInput!) {
setOrderBillingAddress(input: $input) {
...Cart
...ErrorResult
}
}
`;
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import gql from 'graphql-tag';
import { CartFragment, ErrorResultFragment } from '../../fragments';

export default gql`
${CartFragment}
${ErrorResultFragment}
mutation setOrderShippingAddress($input: CreateAddressInput!) {
setOrderShippingAddress(input: $input) {
...Cart
...ErrorResult
}
}
`;
1 change: 1 addition & 0 deletions packages/api-client/src/helpers/constants.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export const VENDURE_AUTH_TOKEN_NAME = 'vendure-auth-token';
export const BILLING_TYPE = 'billing';
10 changes: 6 additions & 4 deletions packages/api-client/src/types/API.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { CustomQuery } from '@vue-storefront/core';
import { ApolloQueryResult } from 'apollo-client';
import { FetchResult } from 'apollo-link';
import { ApplyCouponCodeResult, CollectionList, Customer, Order, Product, RemoveOrderItemsResult, SearchResponse, UpdateOrderItemsResult } from './GraphQL';
import { AddToCartParams, CartCouponParams, CollectionParams, ProductParams, RemoveFromCartParams, SearchParams, UpdateCartParams } from './types';
import { ActiveOrderResult, ApplyCouponCodeResult, CollectionList, Customer, Order, Product, RemoveOrderItemsResult, SearchResponse, UpdateOrderItemsResult } from './GraphQL';
import { AddToCartParams, CartCouponParams, CollectionParams, ProductParams, RemoveFromCartParams, SearchParams, UpdateAddressDetailsParams, UpdateCartParams } from './types';

export type QueryResponse<K extends string, V> = ApolloQueryResult<Record<K, V>>;
export type MutationResponse<K extends string, V> = FetchResult<Record<K, V>>;
Expand All @@ -18,6 +18,7 @@ export type RemoveFromCartResponse = MutationResponse<'removeOrderLine', RemoveO
export type UpdateCartQuantityResponse = MutationResponse<'adjustOrderLine', UpdateOrderItemsResult>;
export type ApplyCouponCodeResponse = MutationResponse<'applyCouponCode', ApplyCouponCodeResult>;
export type RemoveCouponCodeResponse = MutationResponse<'removeCouponCode', Order>;
export type UpdateAddressDetailsResponse = MutationResponse<'setOrderShippingAddress' | 'setOrderBilliingAddress', ActiveOrderResult>;

export interface VendureApiMethods {
getProduct(params: ProductParams, customQuery?: CustomQuery): Promise<GetProductResponse>;
Expand All @@ -28,6 +29,7 @@ export interface VendureApiMethods {
addToCart(params: AddToCartParams, customQuery?: CustomQuery): Promise<AddToCartResponse>;
removeFromCart(params: RemoveFromCartParams, customQuery?: CustomQuery): Promise<RemoveFromCartResponse>;
updateCartQuantity(params: UpdateCartParams, customQuery?: CustomQuery): Promise<UpdateCartQuantityResponse>;
applyCouponCode(params: CartCouponParams, customQuery?:CustomQuery): Promise<ApplyCouponCodeResponse>;
removeCouponCode(params: CartCouponParams, customQuery?:CustomQuery): Promise<RemoveCouponCodeResponse>;
applyCouponCode(params: CartCouponParams, customQuery?: CustomQuery): Promise<ApplyCouponCodeResponse>;
removeCouponCode(params: CartCouponParams, customQuery?: CustomQuery): Promise<RemoveCouponCodeResponse>;
updateAddressDetails(params: UpdateAddressDetailsParams, customQuery?: CustomQuery): Promise<UpdateAddressDetailsResponse>;
}
7 changes: 6 additions & 1 deletion packages/api-client/src/types/types.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { CollectionListOptions, SearchInput } from './GraphQL';
import { CollectionListOptions, CreateAddressInput, SearchInput } from './GraphQL';

export type TODO = unknown;

Expand Down Expand Up @@ -76,3 +76,8 @@ export type UpdateCartParams = {
export type CartCouponParams = {
couponCode: string;
};

export type UpdateAddressDetailsParams = {
input: CreateAddressInput;
type?: string;
};

0 comments on commit 312f896

Please sign in to comment.