From ea6d385baf3f7bdd98b5824b335c44e5f342c283 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9C=85=20Eliezer=20Garcia?= <71297177+eliezerjg@users.noreply.github.com> Date: Tue, 8 Apr 2025 22:56:22 -0300 Subject: [PATCH 1/2] feat: added pixQrCode integration feat: added pixQrCode integration and tests --- .gitignore | 2 + src/main/java/com/abacatepay/AbacatePay.java | 23 ++++++++++ .../abacatepay/clients/AbacatePayClient.java | 9 ++++ .../com/abacatepay/model/IAbacatePay.java | 1 + .../model/IAbacatePayPixQrCode.java | 10 +++++ .../pixqrcode/CheckPixQRCodeResponse.java | 35 +++++++++++++++ .../model/pixqrcode/CreatePixQRCodeData.java | 16 +++++++ .../pixqrcode/CreatePixQRCodeResponse.java | 45 +++++++++++++++++++ .../pixqrcode/CheckPixQRCodeResponseTest.java | 26 +++++++++++ .../pixqrcode/CreatePixQRCodeDataTest.java | 32 +++++++++++++ .../CreatePixQRCodeResponseTest.java | 25 +++++++++++ 11 files changed, 224 insertions(+) create mode 100644 .gitignore create mode 100644 src/main/java/com/abacatepay/model/IAbacatePayPixQrCode.java create mode 100644 src/main/java/com/abacatepay/model/pixqrcode/CheckPixQRCodeResponse.java create mode 100644 src/main/java/com/abacatepay/model/pixqrcode/CreatePixQRCodeData.java create mode 100644 src/main/java/com/abacatepay/model/pixqrcode/CreatePixQRCodeResponse.java create mode 100644 src/test/java/com/abacatepay/model/pixqrcode/CheckPixQRCodeResponseTest.java create mode 100644 src/test/java/com/abacatepay/model/pixqrcode/CreatePixQRCodeDataTest.java create mode 100644 src/test/java/com/abacatepay/model/pixqrcode/CreatePixQRCodeResponseTest.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..40d9aca --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/target +/.idea \ No newline at end of file diff --git a/src/main/java/com/abacatepay/AbacatePay.java b/src/main/java/com/abacatepay/AbacatePay.java index 9925d76..0bf21b2 100644 --- a/src/main/java/com/abacatepay/AbacatePay.java +++ b/src/main/java/com/abacatepay/AbacatePay.java @@ -4,9 +4,13 @@ import com.abacatepay.clients.factories.AbacatePayClientFactory; import com.abacatepay.model.IAbacatePay; import com.abacatepay.model.IAbacatePayBilling; +import com.abacatepay.model.IAbacatePayPixQrCode; import com.abacatepay.model.billing.CreateBillingData; import com.abacatepay.model.billing.CreateBillingResponse; import com.abacatepay.model.billing.ListBillingResponse; +import com.abacatepay.model.pixqrcode.CheckPixQRCodeResponse; +import com.abacatepay.model.pixqrcode.CreatePixQRCodeData; +import com.abacatepay.model.pixqrcode.CreatePixQRCodeResponse; import feign.FeignException; import feign.RequestInterceptor; @@ -64,4 +68,23 @@ public ListBillingResponse list() { return new AbacatePayBilling(); } + + @Override + public IAbacatePayPixQrCode pixQrCode() { + + class AbacatePayPixQrCode implements IAbacatePayPixQrCode { + + @Override + public CreatePixQRCodeResponse create(CreatePixQRCodeData pixQRCode) { + return client.create(pixQRCode); + } + + @Override + public CheckPixQRCodeResponse check(String id) { + return client.check(id); + } + } + + return new AbacatePayPixQrCode(); + } } diff --git a/src/main/java/com/abacatepay/clients/AbacatePayClient.java b/src/main/java/com/abacatepay/clients/AbacatePayClient.java index cdd1470..605f7e9 100644 --- a/src/main/java/com/abacatepay/clients/AbacatePayClient.java +++ b/src/main/java/com/abacatepay/clients/AbacatePayClient.java @@ -3,6 +3,9 @@ import com.abacatepay.model.billing.CreateBillingData; import com.abacatepay.model.billing.CreateBillingResponse; import com.abacatepay.model.billing.ListBillingResponse; +import com.abacatepay.model.pixqrcode.CheckPixQRCodeResponse; +import com.abacatepay.model.pixqrcode.CreatePixQRCodeData; +import com.abacatepay.model.pixqrcode.CreatePixQRCodeResponse; import feign.RequestLine; public interface AbacatePayClient { @@ -12,4 +15,10 @@ public interface AbacatePayClient { @RequestLine("POST /billing/create") CreateBillingResponse create(CreateBillingData body); + + @RequestLine("GET /pixQrCode/check") + CheckPixQRCodeResponse check(String id); + + @RequestLine("POST /pixQrCode/create") + CreatePixQRCodeResponse create(CreatePixQRCodeData body); } diff --git a/src/main/java/com/abacatepay/model/IAbacatePay.java b/src/main/java/com/abacatepay/model/IAbacatePay.java index ca7cde0..73936df 100644 --- a/src/main/java/com/abacatepay/model/IAbacatePay.java +++ b/src/main/java/com/abacatepay/model/IAbacatePay.java @@ -2,4 +2,5 @@ public interface IAbacatePay { IAbacatePayBilling billing(); + IAbacatePayPixQrCode pixQrCode(); } diff --git a/src/main/java/com/abacatepay/model/IAbacatePayPixQrCode.java b/src/main/java/com/abacatepay/model/IAbacatePayPixQrCode.java new file mode 100644 index 0000000..385510c --- /dev/null +++ b/src/main/java/com/abacatepay/model/IAbacatePayPixQrCode.java @@ -0,0 +1,10 @@ +package com.abacatepay.model; + +import com.abacatepay.model.pixqrcode.CheckPixQRCodeResponse; +import com.abacatepay.model.pixqrcode.CreatePixQRCodeData; +import com.abacatepay.model.pixqrcode.CreatePixQRCodeResponse; + +public interface IAbacatePayPixQrCode { + CreatePixQRCodeResponse create(CreatePixQRCodeData pixQRCode); + CheckPixQRCodeResponse check(String id); +} diff --git a/src/main/java/com/abacatepay/model/pixqrcode/CheckPixQRCodeResponse.java b/src/main/java/com/abacatepay/model/pixqrcode/CheckPixQRCodeResponse.java new file mode 100644 index 0000000..1b13887 --- /dev/null +++ b/src/main/java/com/abacatepay/model/pixqrcode/CheckPixQRCodeResponse.java @@ -0,0 +1,35 @@ +package com.abacatepay.model.pixqrcode; + +import com.abacatepay.model.billing.BillingStatus; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Builder; +import lombok.Data; +import java.time.LocalDateTime; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class CheckPixQRCodeResponse { + + @JsonInclude(JsonInclude.Include.NON_NULL) + private CheckPixQRCodeResponseData data; + + @JsonInclude(JsonInclude.Include.NON_NULL) + private Object error; + + public CheckPixQRCodeResponse (Object error){ + this.error = error; + } + public CheckPixQRCodeResponse (){ + } +} + +@Builder +class CheckPixQRCodeResponseData{ + @JsonInclude(JsonInclude.Include.NON_NULL) + private BillingStatus status; + + @JsonFormat(timezone = "America/Sao_Paulo", pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") + private LocalDateTime expiredAt; +} diff --git a/src/main/java/com/abacatepay/model/pixqrcode/CreatePixQRCodeData.java b/src/main/java/com/abacatepay/model/pixqrcode/CreatePixQRCodeData.java new file mode 100644 index 0000000..16b3594 --- /dev/null +++ b/src/main/java/com/abacatepay/model/pixqrcode/CreatePixQRCodeData.java @@ -0,0 +1,16 @@ +package com.abacatepay.model.pixqrcode; + +import com.abacatepay.model.billing.CustomerMetadata; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class CreatePixQRCodeData { + private BigDecimal amount; + private Long expiresIn; + private String description; + private CustomerMetadata customerMetadata; +} diff --git a/src/main/java/com/abacatepay/model/pixqrcode/CreatePixQRCodeResponse.java b/src/main/java/com/abacatepay/model/pixqrcode/CreatePixQRCodeResponse.java new file mode 100644 index 0000000..2b9d772 --- /dev/null +++ b/src/main/java/com/abacatepay/model/pixqrcode/CreatePixQRCodeResponse.java @@ -0,0 +1,45 @@ +package com.abacatepay.model.pixqrcode; + +import com.abacatepay.model.billing.BillingStatus; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Builder; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +@JsonIgnoreProperties(ignoreUnknown = true) +public class CreatePixQRCodeResponse { + @JsonInclude(JsonInclude.Include.NON_NULL) + private CreatePixQRCodeResponseData data; + + @JsonInclude(JsonInclude.Include.NON_NULL) + private Object error; + + public CreatePixQRCodeResponse(Object error){ + this.error = error; + } + + public CreatePixQRCodeResponse(){ + } +} + +@Builder +class CreatePixQRCodeResponseData{ + private String id; + private BigDecimal amount; + private BillingStatus status; + private boolean devMode; + private String brCode; + private String brCodeBase64; + private String platformFee; + @JsonFormat(timezone = "America/Sao_Paulo", pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") + private LocalDateTime createdAt; + @JsonFormat(timezone = "America/Sao_Paulo", pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") + private LocalDateTime updatedAt; + @JsonFormat(timezone = "America/Sao_Paulo", pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") + private LocalDateTime expiresAt; +} diff --git a/src/test/java/com/abacatepay/model/pixqrcode/CheckPixQRCodeResponseTest.java b/src/test/java/com/abacatepay/model/pixqrcode/CheckPixQRCodeResponseTest.java new file mode 100644 index 0000000..c9ad8fd --- /dev/null +++ b/src/test/java/com/abacatepay/model/pixqrcode/CheckPixQRCodeResponseTest.java @@ -0,0 +1,26 @@ +package com.abacatepay.model.pixqrcode; + + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +class CheckPixQRCodeResponseTest { + + @Test + void testErrorConstructor() { + CheckPixQRCodeResponse response = new CheckPixQRCodeResponse("Error occurred"); + assertEquals("Error occurred", response.getError(), "Error field must be set correctly"); + } + + @Test + void testGettersAndSetters() { + CheckPixQRCodeResponse response = new CheckPixQRCodeResponse(); + response.setError("Error occurred"); + response.setData(null); + + assertEquals("Error occurred", response.getError(), "Error field must be set correctly"); + assertNull(response.getData()); + } +} \ No newline at end of file diff --git a/src/test/java/com/abacatepay/model/pixqrcode/CreatePixQRCodeDataTest.java b/src/test/java/com/abacatepay/model/pixqrcode/CreatePixQRCodeDataTest.java new file mode 100644 index 0000000..400d5ca --- /dev/null +++ b/src/test/java/com/abacatepay/model/pixqrcode/CreatePixQRCodeDataTest.java @@ -0,0 +1,32 @@ +package com.abacatepay.model.pixqrcode; + +import com.abacatepay.model.billing.CustomerMetadata; +import org.junit.jupiter.api.Test; + +import java.math.BigDecimal; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +public class CreatePixQRCodeDataTest { + @Test + void testDefaultConstructor() { + CreatePixQRCodeData response = new CreatePixQRCodeData(); + assertNull(response.getDescription()); + } + + @Test + void testGettersAndSetters() { + CreatePixQRCodeData response = new CreatePixQRCodeData(); + response.setAmount(BigDecimal.ONE); + response.setDescription("hello world"); + response.setExpiresIn(1000000L); + CustomerMetadata customerMetadata = new CustomerMetadata(); + response.setCustomerMetadata(customerMetadata); + + assertEquals(BigDecimal.ONE, response.getAmount()); + assertEquals("hello world", response.getDescription()); + assertEquals(1000000L, response.getExpiresIn()); + assertEquals(response.getCustomerMetadata(), customerMetadata); + } +} diff --git a/src/test/java/com/abacatepay/model/pixqrcode/CreatePixQRCodeResponseTest.java b/src/test/java/com/abacatepay/model/pixqrcode/CreatePixQRCodeResponseTest.java new file mode 100644 index 0000000..469adfb --- /dev/null +++ b/src/test/java/com/abacatepay/model/pixqrcode/CreatePixQRCodeResponseTest.java @@ -0,0 +1,25 @@ +package com.abacatepay.model.pixqrcode; + + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +public class CreatePixQRCodeResponseTest { + @Test + void testErrorConstructor() { + CreatePixQRCodeResponse response = new CreatePixQRCodeResponse("Error occurred"); + assertEquals("Error occurred", response.getError(), "Error field must be set correctly"); + } + + @Test + void testGettersAndSetters() { + CreatePixQRCodeResponse response = new CreatePixQRCodeResponse(); + response.setError("Error occurred"); + response.setData(null); + + assertEquals("Error occurred", response.getError(), "Error field must be set correctly"); + assertNull(response.getData()); + } +} From 3bac6ae060455108cd7a8a81f045cda6cf6202a6 Mon Sep 17 00:00:00 2001 From: Eliezer Garcia <71297177+eliezerjg@users.noreply.github.com> Date: Tue, 8 Apr 2025 23:18:29 -0300 Subject: [PATCH 2/2] Delete .gitignore --- .gitignore | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 40d9aca..0000000 --- a/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/target -/.idea \ No newline at end of file