diff --git a/src/mutations/transformAndValidateCart.js b/src/mutations/transformAndValidateCart.js index d61f4d21305..544ea4ce836 100644 --- a/src/mutations/transformAndValidateCart.js +++ b/src/mutations/transformAndValidateCart.js @@ -14,7 +14,7 @@ const logCtx = { name: "cart", file: "transformAndValidateCart" }; * @returns {undefined} */ export default async function transformAndValidateCart(context, cart) { - const cartSchema = context.simpleSchemas.Cart; + const { simpleSchemas: { Cart: cartSchema } } = context; updateCartFulfillmentGroups(context, cart); let commonOrders; diff --git a/src/mutations/transformAndValidateCart.test.js b/src/mutations/transformAndValidateCart.test.js new file mode 100644 index 00000000000..aeb15921482 --- /dev/null +++ b/src/mutations/transformAndValidateCart.test.js @@ -0,0 +1,79 @@ +import mockContext from "@reactioncommerce/api-utils/tests/mockContext.js"; +import { Cart } from "../simpleSchemas.js"; +import transformAndValidateCart from "./transformAndValidateCart.js"; + +mockContext.simpleSchemas = {}; +mockContext.simpleSchemas.Cart = Cart; + +const accountCart = { + _id: "cartId", + accountId: "accountId", + shopId: "shopId", + currencyCode: "currencyCode", + createdAt: new Date() +}; +const expectedResult = { ...accountCart, shipping: [] }; +test("valid account cart", async () => { + await transformAndValidateCart(mockContext, accountCart); + expect(accountCart).toEqual(expectedResult); +}); + + +const anonymousCart = { + _id: "cartId", + anonymousAccessToken: "anonymousAccessToken", + shopId: "shopId", + currencyCode: "currencyCode", + createdAt: new Date() +}; +const expectedAnonymousResult = { ...anonymousCart, shipping: [] }; +test("valid anonymous cart", async () => { + await transformAndValidateCart(mockContext, anonymousCart); + expect(anonymousCart).toEqual(expectedAnonymousResult); +}); + + +const accountCartNoShopId = { + _id: "cartId", + accountId: "accountId", + currencyCode: "currencyCode", + createdAt: new Date() +}; +test("invalid account cart - no shopId", async () => { + try { + await transformAndValidateCart(mockContext, accountCartNoShopId); + } catch (error) { + expect(error.details[0].message).toEqual("Cart ShopId is required"); + } +}); + + +const accountCartNoCurrencyCode = { + _id: "cartId", + accountId: "accountId", + shopId: "shopId", + createdAt: new Date() +}; +test("invalid account cart - no currency code", async () => { + try { + await transformAndValidateCart(mockContext, accountCartNoCurrencyCode); + } catch (error) { + expect(error.details[0].message).toEqual("Currency code is required"); + } +}); + + +const accountCartInvalidDate = { + _id: "cartId", + accountId: "accountId", + shopId: "shopId", + currencyCode: "currencyCode", + createdAt: "date" +}; +test("invalid account cart - invalid date format", async () => { + try { + await transformAndValidateCart(mockContext, accountCartInvalidDate); + } catch (error) { + expect(error.details[0].message).toEqual("Created at must be of type Date"); + } +});