Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[IPL-183] Obtener un solo cargo asociado a una orden #17

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions src/main/java/conekta/io/client/impl/OrdersClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import conekta.io.config.Constants;
import conekta.io.error.ConektaErrorResponse;
import conekta.io.model.PaginatedConektaObject;
import conekta.io.model.request.OrderRefundReq;
import conekta.io.model.request.OrderReq;
import conekta.io.model.response.Order;
import conekta.io.model.submodel.Charge;
Expand Down Expand Up @@ -65,6 +66,17 @@ public ConektaResponse<Order> retrieveOrder(String orderId) {
.build();
}

public ConektaResponse<Charge> getOrderCharge(String orderId, String chargeId) {
HttpResponse<String> customerResponse = doRequest(null, Constants.ORDERS_PATH + Constants.SLASH + orderId + Constants.CHARGES + Constants.SLASH + chargeId, Constants.GET);
return ConektaResponse.<Charge>builder()
.response(customerResponse)
.statusCode(customerResponse.statusCode())
.data(ConektaObjectMapper.getInstance().stringJsonToObject(customerResponse.body(), new TypeReference<Charge>() {
}))
.error(ConektaObjectMapper.getInstance().stringJsonToObject(customerResponse.body(), ConektaErrorResponse.class))
.build();
}

public ConektaResponse<PaginatedConektaObject<Charge>> getOrderCharges(String orderId, String next) {
HttpResponse<String> customerResponse = doRequest(null, Constants.ORDERS_PATH + Constants.SLASH + orderId + Constants.CHARGES + (next != null ? next : ""), Constants.GET);
return ConektaResponse.<PaginatedConektaObject<Charge>>builder()
Expand All @@ -86,4 +98,14 @@ public ConektaResponse<PaginatedConektaObject<Order>> getOrders(String next) {
.error(ConektaObjectMapper.getInstance().stringJsonToObject(customerResponse.body(), ConektaErrorResponse.class))
.build();
}

public ConektaResponse<Order> refundOrder(String orderId, OrderRefundReq orderRefundReq) {
HttpResponse<String> orderResponse = doRequest(orderRefundReq, Constants.ORDERS_PATH + Constants.SLASH + orderId + Constants.REFUNDS, Constants.POST);
return ConektaResponse.<Order>builder()
.response(orderResponse)
.statusCode(orderResponse.statusCode())
.data(ConektaObjectMapper.getInstance().stringJsonToObject(orderResponse.body(), Order.class))
.error(ConektaObjectMapper.getInstance().stringJsonToObject(orderResponse.body(), ConektaErrorResponse.class))
.build();
}
}
1 change: 1 addition & 0 deletions src/main/java/conekta/io/config/Constants.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ public class Constants {
public static final String NEXT = "?next=";
public static final String EVENTS_PATH = "/events";
public static final String CHARGES = "/charges";
public static final String REFUNDS = "/refunds";
public static final int HTTP_CLIENT_TIMEOUT = 15;
public static final String PAYMENT_SOURCES = "/payment_sources";

Expand Down
12 changes: 12 additions & 0 deletions src/main/java/conekta/io/model/request/OrderRefundReq.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package conekta.io.model.request;

import conekta.io.model.ConektaObject;
import lombok.Data;

import java.math.BigDecimal;

@Data
public class OrderRefundReq extends ConektaObject {
private String reason;
private BigDecimal amount;
}
86 changes: 85 additions & 1 deletion src/test/java/conekta/io/client/impl/OrdersClientTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import conekta.io.config.Constants;
import conekta.io.error.ConektaError;
import conekta.io.model.PaginatedConektaObject;
import conekta.io.model.request.OrderRefundReq;
import conekta.io.model.request.OrderReq;
import conekta.io.model.response.Order;
import conekta.io.model.submodel.Charge;
Expand Down Expand Up @@ -171,7 +172,48 @@ void getChargesOrderFail() throws IOException, URISyntaxException {
Assertions.assertNotNull(order.getError());
Assertions.assertEquals(order.getError().getCode(), orderResp.getCode());
}


@Test
void getChargeOrder() throws IOException, URISyntaxException {
// Arrange
String orderChargeResponse = Utils.readFile("Orders/orderChargeResponse.json");
String orderCharge = Utils.readFile("Orders/orderCharge.json");

Charge charge = ConektaObjectMapper.getInstance().stringJsonToObject(orderCharge, Charge.class);
mockWebServer.enqueue(new MockResponse()
.addHeader(Constants.CONTENT_TYPE, Constants.APPLICATION_JSON_CHARSET_UTF_8)
.addHeader(Constants.ACCEPT, Constants.APPLICATION_VND_CONEKTA_V_2_0_0_JSON)
.setBody(orderChargeResponse)
.setResponseCode(200));

// Act
ConektaResponse<Charge> order = ordersClient.getOrderCharge("1", "anything");

// Assert
Assertions.assertNotNull(order.getData());
Assertions.assertEquals(order.getData().getAmount().toString(), charge.getAmount().toString());
}

@Test
void getChargeOrderFail() throws IOException, URISyntaxException {
// Arrange
String orderChargeFailResponse = Utils.readFile("Orders/orderChargeFailResponse.json");
ConektaError orderResp = ConektaObjectMapper.getInstance().stringJsonToObject(orderChargeFailResponse, ConektaError.class);

mockWebServer.enqueue(new MockResponse()
.addHeader(Constants.CONTENT_TYPE, Constants.APPLICATION_JSON_CHARSET_UTF_8)
.addHeader(Constants.ACCEPT, Constants.APPLICATION_VND_CONEKTA_V_2_0_0_JSON)
.setBody(orderChargeFailResponse)
.setResponseCode(404));

// Act
ConektaResponse<Charge> order = ordersClient.getOrderCharge("1", "nothing");

// Assert
Assertions.assertNotNull(order.getError());
Assertions.assertEquals(order.getError().getCode(), orderResp.getCode());
}

@Test
void getOrders() throws IOException, URISyntaxException {
// Arrange
Expand Down Expand Up @@ -210,4 +252,46 @@ void getOrdersFail() throws IOException, URISyntaxException {
Assertions.assertNotNull(orderResponse.getError());
Assertions.assertEquals(orderResponse.getError().getCode(), orderResp.getCode());
}

@Test
void refundOrder() throws URISyntaxException, IOException, InterruptedException {
// Arrange
String orderRefundRequestJson = Utils.readFile("Orders/orderRefundRequest.json");
String orderRefundResponseJson = Utils.readFile("Orders/orderRefundResponse.json");
OrderRefundReq orderRefundReq = ConektaObjectMapper.getInstance().stringJsonToObject(orderRefundRequestJson, OrderRefundReq.class);
Order orderResp = ConektaObjectMapper.getInstance().stringJsonToObject(orderRefundResponseJson, Order.class);
mockWebServer.enqueue(new MockResponse()
.addHeader(Constants.CONTENT_TYPE, Constants.APPLICATION_JSON_CHARSET_UTF_8)
.addHeader(Constants.ACCEPT, Constants.APPLICATION_VND_CONEKTA_V_2_0_0_JSON)
.setBody(orderRefundResponseJson)
.setResponseCode(200));

// Act
ConektaResponse<Order> order = ordersClient.refundOrder("anything", orderRefundReq);

// Assert
Assertions.assertEquals(order.getData(), orderResp);
}

@Test
void refundOrdersFail() throws IOException, URISyntaxException {
// Arrange
String orderRefundRequestJson = Utils.readFile("Orders/orderRefundRequest.json");
String orderRefundFailResponse = Utils.readFile("Orders/orderRefundFailResponse.json");
OrderRefundReq orderRefundReq = ConektaObjectMapper.getInstance().stringJsonToObject(orderRefundRequestJson, OrderRefundReq.class);
ConektaError orderResp = ConektaObjectMapper.getInstance().stringJsonToObject(orderRefundFailResponse, ConektaError.class);

mockWebServer.enqueue(new MockResponse()
.addHeader(Constants.CONTENT_TYPE, Constants.APPLICATION_JSON_CHARSET_UTF_8)
.addHeader(Constants.ACCEPT, Constants.APPLICATION_VND_CONEKTA_V_2_0_0_JSON)
.setBody(orderRefundFailResponse)
.setResponseCode(404));

// Act
ConektaResponse<Order> orderResponse = ordersClient.refundOrder("anything", orderRefundReq);

// Assert
Assertions.assertNotNull(orderResponse.getError());
Assertions.assertEquals(orderResponse.getError().getCode(), orderResp.getCode());
}
}
12 changes: 12 additions & 0 deletions src/test/resources/Orders/orderChargeFailResponse.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"details": [
{
"debug_message": "The object order \"ord_2sLgKeSCQibNS7Hm\" could not be found.",
"message": "El recurso no ha sido encontrado.",
"code": "conekta.errors.resource_not_found.entity"
}
],
"object": "error",
"type": "resource_not_found_error",
"log_id": "630531496cd84c0d4807c615"
}
29 changes: 29 additions & 0 deletions src/test/resources/Orders/orderChargeResponse.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"id": "62fbffbb9e9c315e01b36ada",
"livemode": false,
"created_at": 1660682171,
"currency": "MXN",
"device_fingerprint": "zptcxk4p6w1ijwz85snf1l3bqe5g09ie",
"payment_method": {
"name": "erererere ererere ",
"exp_month": "06",
"exp_year": "24",
"auth_code": "272780",
"object": "card_payment",
"type": "credit",
"last4": "4607",
"brand": "visa",
"issuer": "BANAMEX",
"account_type": "Credit",
"country": "MX",
"fraud_indicators": []
},
"object": "charge",
"description": "Payment from order",
"status": "paid",
"amount": 81568,
"paid_at": 1660682171,
"fee": 3033,
"customer_id": "",
"order_id": "ord_2sLgKeSCQibNS7Hms"
}
12 changes: 12 additions & 0 deletions src/test/resources/Orders/orderRefundFailResponse.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"details": [
{
"debug_message": "The object Order \"ord_2sB7DCyt6hWpZnME\" could not be found.",
"message": "El recurso no ha sido encontrado.",
"code": "conekta.errors.resource_not_found.entity"
}
],
"object": "error",
"type": "resource_not_found_error",
"log_id": "630508819e9c31064875b472"
}
4 changes: 4 additions & 0 deletions src/test/resources/Orders/orderRefundRequest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"amount": 10,
"reason": "requested_by_client"
}
Loading