Skip to content

Commit

Permalink
Merge branch 'reactioncommerce:trunk' into trunk
Browse files Browse the repository at this point in the history
  • Loading branch information
tedraykov authored Feb 20, 2022
2 parents e4700bd + 415ee06 commit 8619271
Show file tree
Hide file tree
Showing 5 changed files with 124 additions and 2 deletions.
3 changes: 3 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,9 @@
"jest": "^25.1.0",
"semantic-release": "^17.4.7"
},
"peerDependencies": {
"@reactioncommerce/api-plugin-address-validation": "^1.0.0"
},
"scripts": {
"lint": "npm run lint:eslint",
"lint:eslint": "eslint .",
Expand Down
2 changes: 1 addition & 1 deletion src/mutations/transformAndValidateCart.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
79 changes: 79 additions & 0 deletions src/mutations/transformAndValidateCart.test.js
Original file line number Diff line number Diff line change
@@ -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");
}
});
5 changes: 4 additions & 1 deletion src/queries/anonymousCartByCartId.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,8 @@ export default async function anonymousCartByCartId(context, { cartId, cartToken
throw new ReactionError("invalid-param", "You must provide a cartId");
}

return Cart.findOne({ $or: [{ _id: cartId }, { anonymousAccessToken: hashToken(cartToken) }] });
return Cart.findOne({
_id: cartId,
anonymousAccessToken: hashToken(cartToken)
});
}
37 changes: 37 additions & 0 deletions src/queries/anonymousCartByCartId.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import mockContext from "@reactioncommerce/api-utils/tests/mockContext.js";
import hashToken from "@reactioncommerce/api-utils/hashToken.js";
import anonymousCartByCartId from "./anonymousCartByCartId.js";

test("query anonymous cart", async () => {
const cartId = "123";
const cartToken = "xyz";
const cart = {
_id: cartId,
anonymousAccessToken: cartToken
};
const callingParams = {
_id: cartId,
anonymousAccessToken: hashToken(cartToken)
};

mockContext.collections.Cart.findOne.mockReturnValueOnce(Promise.resolve(cart));

const result = await anonymousCartByCartId(mockContext, { cartId, cartToken });
expect(result).toEqual(cart);
expect(mockContext.collections.Cart.findOne).toHaveBeenCalledWith(callingParams);
});

test("query without hashed access token", async () => {
const cartId = "123";
const cartToken = "xyz";
const callingParams = {
_id: cartId,
anonymousAccessToken: cartToken
};

mockContext.collections.Cart.findOne.mockReturnValueOnce(Promise.resolve(null));

const result = await anonymousCartByCartId(mockContext, { cartId, cartToken });
expect(result).toEqual(null);
expect(mockContext.collections.Cart.findOne).not.toHaveBeenCalledWith(callingParams);
});

0 comments on commit 8619271

Please sign in to comment.