@inflightit/api-plugin-orders
Version:
Orders plugin for the Reaction API
83 lines (69 loc) • 2.95 kB
JavaScript
/* eslint camelcase: 0 */
import mockContext from "@reactioncommerce/api-utils/tests/mockContext.js";
import refundsByPaymentId from "./refundsByPaymentId.js";
mockContext.queries.getPaymentMethodConfigByName = jest.fn().mockName("getPaymentMethodConfigByName").mockImplementation(() => ({
functions: {
listRefunds: async () => [{
_id: "refundId",
type: "refund",
amount: 19.99,
currency: "usd"
}]
}
}));
beforeEach(() => {
jest.clearAllMocks();
});
const order = {
_id: "order1",
payments: [
{
_id: "payment1"
}, {
_id: "payment2"
}
],
shopId: "SHOP_ID"
};
test("throws if orderId isn't supplied", async () => {
mockContext.validatePermissions.mockReturnValueOnce(Promise.resolve(null));
await expect(refundsByPaymentId(mockContext, { orderId: null, paymentId: order.payments[0]._id, shopId: order.shopId, token: null })).rejects.toThrowErrorMatchingSnapshot(); // eslint-disable-line max-len
});
test("throws if paymentId isn't supplied", async () => {
mockContext.validatePermissions.mockReturnValueOnce(Promise.resolve(null));
await expect(refundsByPaymentId(mockContext, { orderId: order._id, paymentId: null, shopId: order.shopId, token: null })).rejects.toThrowErrorMatchingSnapshot(); // eslint-disable-line max-len
});
test("throws if shopId isn't supplied", async () => {
mockContext.validatePermissions.mockReturnValueOnce(Promise.resolve(null));
await expect(refundsByPaymentId(mockContext, { orderId: order._id, shopId: null, token: null })).rejects.toThrowErrorMatchingSnapshot();
});
test("throws if the order doesn't exist", async () => {
mockContext.validatePermissions.mockReturnValueOnce(Promise.resolve(null));
mockContext.collections.Orders.findOne.mockReturnValueOnce(Promise.resolve(null));
await expect(refundsByPaymentId(mockContext, {
orderId: "order1",
paymentId: order.payments[0]._id,
shopId: order.shopId
})).rejects.toThrowErrorMatchingSnapshot();
});
test("throws if the payment doesn't exist", async () => {
mockContext.validatePermissions.mockReturnValueOnce(Promise.resolve(null));
mockContext.collections.Orders.findOne.mockReturnValueOnce(Promise.resolve(order));
await expect(refundsByPaymentId(mockContext, {
orderId: "order1",
paymentId: "payment3",
shopId: order.shopId
})).rejects.toThrowErrorMatchingSnapshot();
});
test("should call refunds with the proper parameters and return a list of refunds for a payment", async () => {
mockContext.validatePermissions.mockReturnValueOnce(Promise.resolve(null));
mockContext.collections.Orders.findOne.mockReturnValueOnce(Promise.resolve(order));
const result = await refundsByPaymentId(mockContext, {
orderId: order._id,
paymentId: order.payments[0]._id,
shopId: order.shopId
});
expect(result[0].type).toBe("refund");
expect(result[0].amount).toBe(19.99);
expect(result[0].currency).toBe("usd");
});