conekta
Version:
OpenAPI client for conekta
531 lines (457 loc) • 17.8 kB
text/typescript
import { OrdersApi } from "../api";
import { baseTest } from "./base-test";
import { Configuration } from "../configuration";
import { OrderRequest, CustomerInfoJustCustomerId, Product, ChargeRequest, PaymentMethodCash,
PaymentMethodBnplPayment,PaymentMethodBnplRequest,
CheckoutRequest, PaymentMethodBankTransfer, PaymentMethodCard, OrderRefundRequest, OrderCaptureRequest, OrderUpdateRequest } from "../model";
interface IPaymentMethodCashMock extends PaymentMethodCash {
service_name: string;
reference: string;
expires_at: string;
}
interface IPaymentMethodBankMock extends PaymentMethodBankTransfer {
clabe: string;
}
describe("Orders api", () => {
let client: OrdersApi;
beforeAll(async () => {
const config = new Configuration({ accessToken: "key_xxxxxxxx" });
client = new OrdersApi(config, baseTest.BasePath);
});
describe("General", () => {
it("should be defined", () => {
expect(client).toBeDefined();
});
});
describe("Create Order", () => {
it("should failed with invalid request", async () => {
const order_requet: OrderRequest = get_order_request_fail();
try {
(await client.createOrder(order_requet));
fail("should fail");
} catch (e) {
expect(e.response.status).toBe(402);
expect(e.response.data.type).toEqual("processing_error");
}
});
it("cash", async () => {
const order_requet = get_order_cash_request();
const response = (await client.createOrder(order_requet, "es")).data;
const data = (response.charges as unknown as { data: any[]}).data
const expires_at = (order_requet.charges[0].payment_method as unknown as { expires_at: string}).expires_at
expect(response).toBeDefined();
expect(response.payment_status).toBe("pending_payment");
expect(response.currency).toBe("MXN");
expect(response.customer_info.customer_id).toBe("cus_2tKcHxhTz7xU5SymF");
expect(data[0].payment_method as PaymentMethodCash).toBeDefined();
expect((data[0].payment_method as IPaymentMethodCashMock).service_name).toEqual("OxxoPay");
expect((data[0].payment_method as IPaymentMethodCashMock).reference).toEqual("93000262280678");
expect((data[0].payment_method as PaymentMethodCash).type).toEqual("oxxo");
expect((data[0].payment_method as IPaymentMethodCashMock).expires_at).toEqual(expires_at);
});
it("msi", async () => {
const order_request: OrderRequest = get_order_msi_request();
const response = (await client.createOrder(order_request)).data;
expect(response).toBeDefined();
expect(response.checkout).toBeDefined();
expect(response.checkout.id).toBeDefined();
expect(response.id).toEqual("ord_msi_2tUgccjdQJ7SdBrXb");
expect(response.checkout.type).toEqual("Integration");
expect(response.checkout.monthly_installments_enabled).toEqual(true);
expect(response.checkout.monthly_installments_options).toEqual([3, 6, 12]);
});
it("card", async () => {
const order_request: OrderRequest = get_order_card_request();
const response = (await client.createOrder(order_request)).data;
expect(response).toBeDefined();
expect(response.checkout).toBeDefined();
expect(response.checkout.id).toBeDefined();
expect(response.id).toEqual("ord_saved_card_2tUgccjdQJ7SdBrXb");
expect(response.checkout.type).toEqual("Integration");
expect(response.checkout.monthly_installments_enabled).toEqual(false);
expect(response.checkout.monthly_installments_options).toEqual([]);
expect(response.checkout.on_demand_enabled).toBeTruthy();
});
it('checkout', async () => {
const order_request: OrderRequest = get_order_checkout_request();
const response = (await client.createOrder(order_request)).data;
expect(response).toBeDefined();
expect(response.customer_info.customer_id).toEqual("cus_2o8jK3TDtejmz1sYc");
expect(response.channel.checkout_request_type).toEqual("Integration");
expect(response.checkout.type).toEqual("Integration");
expect(response.checkout.expires_at).toEqual(order_request.checkout.expires_at);
expect(response.amount).toEqual(order_request.line_items[0].unit_price);
expect(Object.keys(response.metadata).length).toBeGreaterThan(0);
expect(response.checkout).toBeDefined();
expect(response.checkout.id).toBeDefined();
expect(response.checkout.monthly_installments_enabled).toBeFalsy();
});
it('3ds', async () => {
const order_request: OrderRequest = get_order_checkout_request();
order_request.three_ds_mode = 'smart';
order_request.customer_info = {
customer_id: "cus_2v4G1Zx9wRpN5vyy2"
}
order_request.return_url = 'https://www.google.com';
const response = (await client.createOrder(order_request)).data;
expect(response).toBeDefined();
expect(response.customer_info.customer_id).toEqual("cus_2v4G1Zx9wRpN5vyy2");
expect(response.next_action).toBeTruthy();
expect(response.next_action.type).toEqual("redirect_to_url");
expect(response.next_action.redirect_to_url.return_url).toBeDefined();
});
});
describe("Get Order", () => {
it("should return a bank payment method transfer", async () => {
const id = "ord_2tUyGSk9TNWUcyvjn";
const response = (await client.getOrderById(id, "es")).data;
const data = (response.charges as unknown as { data: any[]}).data
expect(response).toBeDefined();
expect(data.length).toBeGreaterThan(0);
expect(data[0].payment_method).toBeDefined();
expect(response.id).toEqual(id);
expect(data[0].payment_method.object).toEqual("bank_transfer_payment");
expect((data[0].payment_method as IPaymentMethodBankMock).clabe).toEqual("646180111805035430");
expect((data[0].payment_method as PaymentMethodBankTransfer).type).toEqual("spei");
});
it("not should return an order", async () => {
const id = "ord_2tUhuyzqLi6UJE9D12";
try {
(await client.getOrderById(id, "en"));
fail("should fail");
} catch (e) {
expect(e.response.status).toBe(404);
expect(e.response.data.type).toEqual("resource_not_found_error");
}
});
});
describe("Get Orders", () => {
it("should return a list of orders", async () => {
const limit = 20;
const response = (await client.getOrders("en", null, limit)).data;
expect(response).toBeDefined();
expect(response.has_more).toBeTruthy();
expect(response.data.length).toBeGreaterThan(0);
expect(response.next_page_url).toStrictEqual("https://api-core.stg.conekta.io/orders?next=ord_2tNDyQbJacvUZiyfp");
expect(response.previous_page_url).toBeFalsy();
expect(response.data.length).toEqual(limit);
expect(response.object).toEqual("list");
});
it("should return a list of orders with next", async () => {
const limit = 19;
const response = (await client.getOrders("en", null, limit, null, "ord_2tNDyQbJacvUZiyfp")).data;
expect(response).toBeDefined();
expect(response.has_more).toBeTruthy();
expect(response.next_page_url).toEqual("https://api-core.stg.conekta.io/orders?limit=19&next=ord_2tKZmA749BLsMRgBg");
expect(response.previous_page_url).toEqual("https://api-core.stg.conekta.io/orders?limit=19&previous=ord_2tNDwzeMnVSU9kKHR");
expect(response.object).toEqual("list");
expect(response.data.length).toEqual(limit);
expect(response.data[0].customer_info.customer_id).toEqual("cus_2tKcHxhTz7xU5SymF");
expect(response.data[0].shipping_contact.address.country).toEqual("mx");
});
it("should return a list of orders with previous", async () => {
const limit = 21;
const response = (await client.getOrders("en", null, limit, null, null, "ord_2tHuXwkFTkjAbMGjU")).data;
expect(response).toBeDefined();
expect(response.has_more).toBeTruthy();
expect(response.next_page_url).toEqual("https://api-core.stg.conekta.io/orders?limit=21&next=ord_2tKZmA749BLsMRgBg");
expect(response.previous_page_url).toEqual("https://api-core.stg.conekta.io/orders?limit=21&previous=ord_2tNDzhA4Akmzj11AS");
expect(response.object).toEqual("list");
expect(response.data.length).toEqual(limit);
expect(response.data[0].customer_info.customer_id).toEqual("cus_2tKcHxhTz7xU5SymF");
expect(response.data[0].shipping_contact.address.country).toEqual("mx");
});
it("should return a list of orders with search", async () => {
const limit = 22;
const response = (await client.getOrders("en", null, limit, "ord_2tNDzhA4Akmzj11AS")).data;
expect(response).toBeDefined();
expect(response.has_more).toBeFalsy();
expect(response.next_page_url).toBeFalsy();
expect(response.previous_page_url).toBeFalsy();
expect(response.object).toEqual("list");
expect(response.data.length).toEqual(1);
expect(response.data[0].customer_info.customer_id).toEqual("cus_2tKcHxhTz7xU5SymF");
expect(response.data[0].id).toEqual("ord_2tNDzhA4Akmzj11AS");
expect(response.data[0].shipping_contact.address.postal_code).toEqual("06100");
});
});
describe("refund order", () => {
it("should refund an order", async () => {
const id = "ord_2tV52JvSom2w3E8bX";
const order_refund_request: OrderRefundRequest = {
amount: 15000,
reason: "requested_by_client"
}
const response = (await client.orderRefund(id, order_refund_request)).data;
const data = (response.charges as unknown as { data: any[]}).data
expect(response).toBeDefined();
expect(response.payment_status).toEqual("partially_refunded");
expect(data[0].status).toEqual("partially_refunded");
expect(response.amount_refunded).toEqual(order_refund_request.amount);
expect(response.is_refundable).toBeTruthy();
expect(data[0].order_id).toEqual(id);
expect(data[0].refunds.data.length).toEqual(1);
expect(-data[0].refunds.data[0].amount).toEqual(order_refund_request.amount);
expect(data[0].refunds.data[0].object).toEqual("refund");
});
});
describe("Order capture", () => {
it("should capture an order", async () => {
const response = (await client.ordersCreateCapture("ord_2tVKoTd79XK1GqJme", "en")).data;
expect(response).toBeDefined();
expect(response.payment_status).toEqual("paid");
expect(response.amount).toEqual(40000);
});
it("should capture an order with body", async () => {
const body: OrderCaptureRequest = {
amount: 40000,
}
const response = (await client.ordersCreateCapture("ord_2tVKoTd79XK1GqJmm", "en", null, body)).data;
expect(response).toBeDefined();
expect(response.payment_status).toEqual("paid");
expect(response.amount).toEqual(40000);
});
});
describe("Order update", () => {
it("should update an order", async () => {
const id = "ord_2tVPCGRXnMXKdvcsj";
const products : Array<Product> = [
{
name: "Pago Mensualidad enero",
quantity: 2,
unit_price: 41000,
description: "Pago Mensualidad enero",
tags: ["Pago", "Pago mensualidad"]
}
];
const request : OrderUpdateRequest = {
line_items: products,
}
const response = (await client.updateOrder(id, request)).data;
const data = (response.line_items as unknown as { data: any[]}).data
expect(response).toBeDefined();
expect(data.length).toEqual(1);
expect(data[0].unit_price).toEqual(request.line_items[0].unit_price);
expect(response.id).toEqual(id);
expect(data[0].tags).toEqual(request.line_items[0].tags);
expect(response.created_at).not.toEqual(response.updated_at);
});
});
describe("Order cancel", () => {
it("should cancel an order", async () => {
const id = "ord_2tqaGQYZyvBsMKEgs";
const response = (await client.cancelOrder(id)).data;
const data = (response.charges as unknown as { data: any[]}).data
expect(response).toBeDefined();
expect(response.id).toEqual(id);
expect(response.payment_status).toEqual("canceled");
expect(data[0].status).toEqual("canceled");
});
});
});
function get_order_checkout_request () {
const products: Array<Product> = [
{
name: "Box of Cohiba S1s",
quantity: 1,
unit_price: 35000
}
];
const checkout: CheckoutRequest = {
expires_at: Math.round((new Date().getTime() + 259200000) / 1000) - 2208988800,
allowed_payment_methods: ["cash", "card", "bank_transfer"],
};
const order_request: OrderRequest = {
currency: "MXN",
line_items: products,
checkout: checkout,
metadata: { test: "true" },
customer_info: {
customer_id: "cus_2o8jK3TDtejmz1sYc"
}
};
return order_request;
}
function get_order_card_request () {
const products: Array<Product> = [
{
name: "toshiba",
quantity: 1,
unit_price: 1555
}
];
const checkout: CheckoutRequest = {
expires_at: Math.round((new Date().getTime() + 259200000) / 1000) - 2208988800,
allowed_payment_methods: ["cash", "card", "bank_transfer"],
on_demand_enabled: true
};
const customer_info: CustomerInfoJustCustomerId = {
customer_id: "cus_save_card_2o8jK3TDtejmz1sYd"
};
const order_request: OrderRequest = {
currency: "MXN",
customer_info: customer_info,
line_items: products,
checkout: checkout,
metadata: { test: "true" }
};
return order_request;
}
function get_order_msi_request () {
const customer_info: CustomerInfoJustCustomerId = {
customer_id: "cus_msi_2o8jK3TDtejmz1sYd"
};
const products: Array<Product> = [
{
name: "toshiba",
quantity: 1,
unit_price: 1555
}
];
const checkout: CheckoutRequest = {
expires_at: Math.round((new Date().getTime() + 259200000) / 1000) - 2208988800,
allowed_payment_methods: ["cash", "card", "bank_transfer"],
monthly_installments_enabled: true,
monthly_installments_options: [3, 6, 12],
};
const order_request: OrderRequest = {
currency: "MXN",
customer_info: customer_info,
line_items: products,
checkout: checkout,
metadata: { test: "true" }
};
return order_request;
}
function get_order_request_fail () {
const products: Array<Product> = [
{
name: "toshiba",
description: "Mes de Febrero.",
quantity: 1,
unit_price: 1555,
metadata: {
pago: "mensualidad",
}
}
];
const customer_info: CustomerInfoJustCustomerId = {
customer_id: "cus_2tKcHxhTz7xU5SymF2"
};
const thirty_days_from_now_date_time = new Date();
thirty_days_from_now_date_time.setDate(thirty_days_from_now_date_time.getDate() + 30);
const expires_at = Math.floor(thirty_days_from_now_date_time.getTime() / 1000);
const charges: Array<ChargeRequest> = [
{
amount: 2000,
payment_method: {
expires_at: expires_at,
type: "default"
}
}
];
const order_requet: OrderRequest = {
currency: "MXN",
customer_info: customer_info,
line_items: products,
charges: charges
};
return order_requet;
}
function get_order_cash_request () {
const products: Array<Product> = [
{
name: "toshiba",
quantity: 1,
unit_price: 1555
}
];
const thirty_days_from_now_date_time = new Date();
thirty_days_from_now_date_time.setDate(thirty_days_from_now_date_time.getDate() + 30);
const expires_at = Math.floor(thirty_days_from_now_date_time.getTime() / 1000);
const charges: Array<ChargeRequest> = [
{
amount: 1555,
payment_method: {
expires_at: expires_at,
type: "cash"
}
}
];
const customer_info: CustomerInfoJustCustomerId = {
customer_id: "cus_2tKcHxhTz7xU5SymF"
};
const order_requet: OrderRequest = {
currency: "MXN",
customer_info: customer_info,
line_items: products,
charges: charges,
pre_authorize: false,
shipping_contact: {
address: {
street1: "Calle 123, int 2",
city: "Queretaro",
state: "Queretaro",
country: "mx",
postal_code: "76000",
residential: true
},
metadata: {}
},
fiscal_entity: {
address: {
street1: "Calle 123, int 2",
city: "Queretaro",
state: "Queretaro",
country: "mx",
postal_code: "76000",
external_number: "123",
},
metadata: {}
}
}
return order_requet;
}
function get_order_bnpl_request () {
const products: Array<Product> = [
{
name: "toshiba",
quantity: 1,
unit_price: 1555
}
];
const thirty_days_from_now_date_time = new Date();
thirty_days_from_now_date_time.setDate(thirty_days_from_now_date_time.getDate() + 30);
const expires_at = Math.floor(thirty_days_from_now_date_time.getTime() / 1000);
const pm : PaymentMethodBnplRequest = {
type: "bnpl",
};
const charges: Array<ChargeRequest> = [
{
amount: 1555,
payment_method: pm
}
];
const customer_info: CustomerInfoJustCustomerId = {
customer_id: "cus_2tKcHxhTz7xU5SymF"
};
const order_requet: OrderRequest = {
currency: "MXN",
customer_info: customer_info,
line_items: products,
charges: charges,
pre_authorize: false,
shipping_contact: {
address: {
street1: "Calle 123, int 2",
city: "Queretaro",
state: "Queretaro",
country: "mx",
postal_code: "76000",
residential: true
},
metadata: {}
}
}
return order_requet;
}