From e81c499952571bc6dcecef92d72b716263ed8541 Mon Sep 17 00:00:00 2001 From: "Carlos E. Feria Vila" Date: Thu, 22 Dec 2022 07:49:52 +0100 Subject: [PATCH] Test deserialization (#161) --- quarkus-extension/integration-tests/pom.xml | 4 + .../xbuilder/it/QuarkusXbuilderResource.java | 315 ++---------------- .../it/QuarkusXbuilderResourceTest.java | 305 ++++++++++++++++- 3 files changed, 321 insertions(+), 303 deletions(-) diff --git a/quarkus-extension/integration-tests/pom.xml b/quarkus-extension/integration-tests/pom.xml index 5727a8bd..6a656623 100644 --- a/quarkus-extension/integration-tests/pom.xml +++ b/quarkus-extension/integration-tests/pom.xml @@ -37,6 +37,10 @@ io.quarkus quarkus-resteasy-qute + + io.quarkus + quarkus-jackson + io.github.project-openubl quarkus-xbuilder diff --git a/quarkus-extension/integration-tests/src/main/java/io/github/project/openubl/quarkus/xbuilder/it/QuarkusXbuilderResource.java b/quarkus-extension/integration-tests/src/main/java/io/github/project/openubl/quarkus/xbuilder/it/QuarkusXbuilderResource.java index 83cc194c..0e5f7a5e 100644 --- a/quarkus-extension/integration-tests/src/main/java/io/github/project/openubl/quarkus/xbuilder/it/QuarkusXbuilderResource.java +++ b/quarkus-extension/integration-tests/src/main/java/io/github/project/openubl/quarkus/xbuilder/it/QuarkusXbuilderResource.java @@ -17,37 +17,24 @@ package io.github.project.openubl.quarkus.xbuilder.it; import io.github.project.openubl.quarkus.xbuilder.XBuilder; -import io.github.project.openubl.xbuilder.content.catalogs.Catalog1; -import io.github.project.openubl.xbuilder.content.catalogs.Catalog19; -import io.github.project.openubl.xbuilder.content.catalogs.Catalog1_Invoice; -import io.github.project.openubl.xbuilder.content.catalogs.Catalog22; -import io.github.project.openubl.xbuilder.content.catalogs.Catalog23; -import io.github.project.openubl.xbuilder.content.catalogs.Catalog6; -import io.github.project.openubl.xbuilder.content.models.common.Cliente; -import io.github.project.openubl.xbuilder.content.models.common.Proveedor; import io.github.project.openubl.xbuilder.content.models.standard.general.CreditNote; import io.github.project.openubl.xbuilder.content.models.standard.general.DebitNote; -import io.github.project.openubl.xbuilder.content.models.standard.general.DocumentoVentaDetalle; import io.github.project.openubl.xbuilder.content.models.standard.general.Invoice; import io.github.project.openubl.xbuilder.content.models.sunat.baja.VoidedDocuments; -import io.github.project.openubl.xbuilder.content.models.sunat.baja.VoidedDocumentsItem; -import io.github.project.openubl.xbuilder.content.models.sunat.percepcionretencion.PercepcionRetencionOperacion; import io.github.project.openubl.xbuilder.content.models.sunat.percepcionretencion.Perception; import io.github.project.openubl.xbuilder.content.models.sunat.percepcionretencion.Retention; -import io.github.project.openubl.xbuilder.content.models.sunat.resumen.Comprobante; -import io.github.project.openubl.xbuilder.content.models.sunat.resumen.ComprobanteAfectado; -import io.github.project.openubl.xbuilder.content.models.sunat.resumen.ComprobanteImpuestos; -import io.github.project.openubl.xbuilder.content.models.sunat.resumen.ComprobanteValorVenta; import io.github.project.openubl.xbuilder.content.models.sunat.resumen.SummaryDocuments; -import io.github.project.openubl.xbuilder.content.models.sunat.resumen.SummaryDocumentsItem; import io.github.project.openubl.xbuilder.enricher.ContentEnricher; import io.quarkus.qute.Template; +import io.vertx.core.json.JsonObject; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; -import javax.ws.rs.GET; +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; import javax.ws.rs.Path; -import java.math.BigDecimal; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; import java.time.LocalDate; import static io.github.project.openubl.quarkus.xbuilder.XBuilder.Type.CREDIT_NOTE; @@ -58,17 +45,19 @@ import static io.github.project.openubl.quarkus.xbuilder.XBuilder.Type.SUMMARY_DOCUMENTS; import static io.github.project.openubl.quarkus.xbuilder.XBuilder.Type.VOIDED_DOCUMENTS; -@Path("/quarkus-xbuilder") @ApplicationScoped +@Consumes(MediaType.APPLICATION_JSON) +@Produces(MediaType.TEXT_PLAIN) +@Path("/quarkus-xbuilder") public class QuarkusXbuilderResource { @Inject XBuilder xBuilder; - @GET + @POST @Path("invoice") - public String createInvoice() { - Invoice invoice = getBaseInvoice(); + public String createInvoice(JsonObject json) { + Invoice invoice = json.mapTo(Invoice.class); ContentEnricher enricher = new ContentEnricher(xBuilder.getDefaults(), () -> LocalDate.of(2022, 1, 25)); enricher.enrich(invoice); @@ -77,10 +66,10 @@ public String createInvoice() { return template.data(invoice).render(); } - @GET + @POST @Path("credit-note") - public String createCreditNote() { - CreditNote creditNote = getBaseCreditNote(); + public String createCreditNote(JsonObject json) { + CreditNote creditNote = json.mapTo(CreditNote.class); ContentEnricher enricher = new ContentEnricher(xBuilder.getDefaults(), () -> LocalDate.of(2022, 1, 25)); enricher.enrich(creditNote); @@ -89,10 +78,10 @@ public String createCreditNote() { return template.data(creditNote).render(); } - @GET + @POST @Path("debit-note") - public String createDebitNote() { - DebitNote debitNote = getBaseDebitNote(); + public String createDebitNote(JsonObject json) { + DebitNote debitNote = json.mapTo(DebitNote.class); ContentEnricher enricher = new ContentEnricher(xBuilder.getDefaults(), () -> LocalDate.of(2022, 1, 25)); enricher.enrich(debitNote); @@ -101,10 +90,10 @@ public String createDebitNote() { return template.data(debitNote).render(); } - @GET + @POST @Path("voided-documents") - public String createVoidedDocuments() { - VoidedDocuments voidedDocuments = getVoidedDocuments(); + public String createVoidedDocuments(JsonObject json) { + VoidedDocuments voidedDocuments = json.mapTo(VoidedDocuments.class); ContentEnricher enricher = new ContentEnricher(xBuilder.getDefaults(), () -> LocalDate.of(2022, 1, 25)); enricher.enrich(voidedDocuments); @@ -113,10 +102,10 @@ public String createVoidedDocuments() { return template.data(voidedDocuments).render(); } - @GET + @POST @Path("summary-documents") - public String createSummaryDocuments() { - SummaryDocuments summaryDocuments = getSummaryDocuments(); + public String createSummaryDocuments(JsonObject json) { + SummaryDocuments summaryDocuments = json.mapTo(SummaryDocuments.class); ContentEnricher enricher = new ContentEnricher(xBuilder.getDefaults(), () -> LocalDate.of(2022, 1, 25)); enricher.enrich(summaryDocuments); @@ -125,10 +114,10 @@ public String createSummaryDocuments() { return template.data(summaryDocuments).render(); } - @GET + @POST @Path("perception") - public String createPerception() { - Perception perception = getPerception(); + public String createPerception(JsonObject json) { + Perception perception = json.mapTo(Perception.class); ContentEnricher enricher = new ContentEnricher(xBuilder.getDefaults(), () -> LocalDate.of(2022, 1, 25)); enricher.enrich(perception); @@ -137,10 +126,10 @@ public String createPerception() { return template.data(perception).render(); } - @GET + @POST @Path("retention") - public String createRetention() { - Retention retention = getRetention(); + public String createRetention(JsonObject json) { + Retention retention = json.mapTo(Retention.class); ContentEnricher enricher = new ContentEnricher(xBuilder.getDefaults(), () -> LocalDate.of(2022, 1, 25)); enricher.enrich(retention); @@ -149,250 +138,4 @@ public String createRetention() { return template.data(retention).render(); } - private Invoice getBaseInvoice() { - return Invoice - .builder() - .serie("F001") - .numero(1) - .proveedor(Proveedor.builder().ruc("12345678912").razonSocial("Softgreen S.A.C.").build()) - .cliente( - Cliente - .builder() - .nombre("Carlos Feria") - .numeroDocumentoIdentidad("12121212121") - .tipoDocumentoIdentidad(Catalog6.RUC.toString()) - .build() - ) - .detalle( - DocumentoVentaDetalle - .builder() - .descripcion("Item1") - .cantidad(new BigDecimal("10")) - .precio(new BigDecimal("100")) - .build() - ) - .build(); - } - - private CreditNote getBaseCreditNote() { - return CreditNote - .builder() - .serie("FC01") - .numero(1) - .comprobanteAfectadoSerieNumero("F001-1") - .sustentoDescripcion("mi sustento") - .proveedor(Proveedor.builder().ruc("12345678912").razonSocial("Softgreen S.A.C.").build()) - .cliente( - Cliente - .builder() - .nombre("Carlos Feria") - .numeroDocumentoIdentidad("12121212121") - .tipoDocumentoIdentidad(Catalog6.RUC.toString()) - .build() - ) - .detalle( - DocumentoVentaDetalle - .builder() - .descripcion("Item1") - .cantidad(new BigDecimal("10")) - .precio(new BigDecimal("100")) - .build() - ) - .build(); - } - - private DebitNote getBaseDebitNote() { - return DebitNote - .builder() - .serie("FD01") - .numero(1) - .comprobanteAfectadoSerieNumero("F001-1") - .sustentoDescripcion("mi sustento") - .proveedor(Proveedor.builder().ruc("12345678912").razonSocial("Softgreen S.A.C.").build()) - .cliente( - Cliente - .builder() - .nombre("Carlos Feria") - .numeroDocumentoIdentidad("12121212121") - .tipoDocumentoIdentidad(Catalog6.RUC.toString()) - .build() - ) - .detalle( - DocumentoVentaDetalle - .builder() - .descripcion("Item1") - .cantidad(new BigDecimal("10")) - .precio(new BigDecimal("100")) - .build() - ) - .build(); - } - - public VoidedDocuments getVoidedDocuments() { - return VoidedDocuments.builder() - .numero(1) - .fechaEmision(LocalDate.of(2022, 01, 31)) - .fechaEmisionComprobantes(LocalDate.of(2022, 01, 29)) - .proveedor(Proveedor.builder() - .ruc("12345678912") - .razonSocial("Softgreen S.A.C.") - .build() - ) - .comprobante(VoidedDocumentsItem.builder() - .serie("F001") - .numero(1) - .tipoComprobante(Catalog1_Invoice.FACTURA.getCode()) - .descripcionSustento("Mi sustento1") - .build() - ) - .comprobante(VoidedDocumentsItem.builder() - .serie("F001") - .numero(2) - .tipoComprobante(Catalog1_Invoice.FACTURA.getCode()) - .descripcionSustento("Mi sustento2") - .build() - ) - .build(); - } - - public SummaryDocuments getSummaryDocuments() { - return SummaryDocuments.builder() - .numero(1) - .fechaEmision(LocalDate.of(2022, 01, 31)) - .fechaEmisionComprobantes(LocalDate.of(2022, 01, 29)) - .proveedor(Proveedor.builder() - .ruc("12345678912") - .razonSocial("Softgreen S.A.C.") - .build() - ) - .comprobante(SummaryDocumentsItem.builder() - .tipoOperacion(Catalog19.ADICIONAR.toString()) - .comprobante(Comprobante.builder() - .tipoComprobante(Catalog1_Invoice.BOLETA.getCode())// - .serieNumero("B001-1") - .cliente(Cliente.builder() - .nombre("Carlos Feria") - .numeroDocumentoIdentidad("12345678") - .tipoDocumentoIdentidad(Catalog6.DNI.getCode()) - .build() - ) - .impuestos(ComprobanteImpuestos.builder() - .igv(new BigDecimal("18")) - .icb(new BigDecimal(2)) - .build() - ) - .valorVenta(ComprobanteValorVenta.builder() - .importeTotal(new BigDecimal("120")) - .gravado(new BigDecimal("120")) - .build() - ) - .build() - ) - .build() - ) - .comprobante(SummaryDocumentsItem.builder() - .tipoOperacion(Catalog19.ADICIONAR.toString()) - .comprobante(Comprobante.builder() - .tipoComprobante(Catalog1.NOTA_CREDITO.getCode()) - .serieNumero("BC02-2") - .comprobanteAfectado(ComprobanteAfectado.builder() - .serieNumero("B002-2") - .tipoComprobante(Catalog1.BOLETA.getCode()) // - .build() - ) - .cliente(Cliente.builder() - .nombre("Carlos Feria") - .numeroDocumentoIdentidad("12345678") - .tipoDocumentoIdentidad(Catalog6.DNI.getCode())// - .build() - ) - .impuestos(ComprobanteImpuestos.builder() - .igv(new BigDecimal("18")) - .build() - ) - .valorVenta(ComprobanteValorVenta.builder() - .importeTotal(new BigDecimal("118")) - .gravado(new BigDecimal("118")) - .build() - ) - .build() - ) - .build() - ) - .build(); - } - - public Perception getPerception() { - return Perception.builder() - .serie("P001") - .numero(1) - .fechaEmision(LocalDate.of(2022, 01, 31)) - .proveedor(Proveedor.builder() - .ruc("12345678912") - .razonSocial("Softgreen S.A.C.") - .build() - ) - .cliente(Cliente.builder() - .nombre("Carlos Feria") - .numeroDocumentoIdentidad("12121212121") - .tipoDocumentoIdentidad(Catalog6.RUC.getCode()) - .build() - ) - .importeTotalPercibido(new BigDecimal("10")) - .importeTotalCobrado(new BigDecimal("210")) - .tipoRegimen(Catalog22.VENTA_INTERNA.getCode()) - .tipoRegimenPorcentaje(Catalog22.VENTA_INTERNA.getPercent()) // - .operacion(PercepcionRetencionOperacion.builder() - .numeroOperacion(1) - .fechaOperacion(LocalDate.of(2022, 01, 31)) - .importeOperacion(new BigDecimal("100")) - .comprobante(io.github.project.openubl.xbuilder.content.models.sunat.percepcionretencion.ComprobanteAfectado.builder() - .tipoComprobante(Catalog1.FACTURA.getCode()) - .serieNumero("F001-1") - .fechaEmision(LocalDate.of(2022, 01, 31)) - .importeTotal(new BigDecimal("200")) - .moneda("PEN") - .build() - ) - .build() - ) - .build(); - } - - public Retention getRetention() { - return Retention.builder() - .serie("R001") - .numero(1) - .fechaEmision(LocalDate.of(2022, 01, 31)) - .proveedor(Proveedor.builder() - .ruc("12345678912") - .razonSocial("Softgreen S.A.C.") - .build() - ) - .cliente(Cliente.builder() - .nombre("Carlos Feria") - .numeroDocumentoIdentidad("12121212121") - .tipoDocumentoIdentidad(Catalog6.RUC.getCode()) - .build() - ) - .importeTotalRetenido(new BigDecimal("10")) - .importeTotalPagado(new BigDecimal("200")) - .tipoRegimen(Catalog23.TASA_TRES.getCode()) - .tipoRegimenPorcentaje(Catalog23.TASA_TRES.getPercent()) // - .operacion(PercepcionRetencionOperacion.builder() - .numeroOperacion(1) - .fechaOperacion(LocalDate.of(2022, 01, 31)) - .importeOperacion(new BigDecimal("100")) - .comprobante(io.github.project.openubl.xbuilder.content.models.sunat.percepcionretencion.ComprobanteAfectado.builder() - .tipoComprobante(Catalog1.FACTURA.getCode()) - .serieNumero("F001-1") - .fechaEmision(LocalDate.of(2022, 01, 31)) - .importeTotal(new BigDecimal("210")) - .moneda("PEN") - .build() - ) - .build() - ) - .build(); - } } diff --git a/quarkus-extension/integration-tests/src/test/java/io/github/project/openubl/quarkus/xbuilder/it/QuarkusXbuilderResourceTest.java b/quarkus-extension/integration-tests/src/test/java/io/github/project/openubl/quarkus/xbuilder/it/QuarkusXbuilderResourceTest.java index 72eded2c..793aee79 100644 --- a/quarkus-extension/integration-tests/src/test/java/io/github/project/openubl/quarkus/xbuilder/it/QuarkusXbuilderResourceTest.java +++ b/quarkus-extension/integration-tests/src/test/java/io/github/project/openubl/quarkus/xbuilder/it/QuarkusXbuilderResourceTest.java @@ -16,25 +16,74 @@ */ package io.github.project.openubl.quarkus.xbuilder.it; -import static io.restassured.RestAssured.given; -import static org.hamcrest.Matchers.is; - +import io.github.project.openubl.xbuilder.content.catalogs.Catalog1; +import io.github.project.openubl.xbuilder.content.catalogs.Catalog19; +import io.github.project.openubl.xbuilder.content.catalogs.Catalog1_Invoice; +import io.github.project.openubl.xbuilder.content.catalogs.Catalog22; +import io.github.project.openubl.xbuilder.content.catalogs.Catalog23; +import io.github.project.openubl.xbuilder.content.catalogs.Catalog6; +import io.github.project.openubl.xbuilder.content.models.common.Cliente; +import io.github.project.openubl.xbuilder.content.models.common.Proveedor; +import io.github.project.openubl.xbuilder.content.models.standard.general.CreditNote; +import io.github.project.openubl.xbuilder.content.models.standard.general.DebitNote; +import io.github.project.openubl.xbuilder.content.models.standard.general.DocumentoVentaDetalle; +import io.github.project.openubl.xbuilder.content.models.standard.general.Invoice; +import io.github.project.openubl.xbuilder.content.models.sunat.baja.VoidedDocuments; +import io.github.project.openubl.xbuilder.content.models.sunat.baja.VoidedDocumentsItem; +import io.github.project.openubl.xbuilder.content.models.sunat.percepcionretencion.PercepcionRetencionOperacion; +import io.github.project.openubl.xbuilder.content.models.sunat.percepcionretencion.Perception; +import io.github.project.openubl.xbuilder.content.models.sunat.percepcionretencion.Retention; +import io.github.project.openubl.xbuilder.content.models.sunat.resumen.Comprobante; +import io.github.project.openubl.xbuilder.content.models.sunat.resumen.ComprobanteAfectado; +import io.github.project.openubl.xbuilder.content.models.sunat.resumen.ComprobanteImpuestos; +import io.github.project.openubl.xbuilder.content.models.sunat.resumen.ComprobanteValorVenta; +import io.github.project.openubl.xbuilder.content.models.sunat.resumen.SummaryDocuments; +import io.github.project.openubl.xbuilder.content.models.sunat.resumen.SummaryDocumentsItem; import io.quarkus.test.junit.QuarkusTest; -import org.junit.jupiter.api.Disabled; +import io.restassured.http.ContentType; import org.junit.jupiter.api.Test; +import java.math.BigDecimal; +import java.time.LocalDate; + +import static io.restassured.RestAssured.given; +import static org.hamcrest.Matchers.is; + @QuarkusTest public class QuarkusXbuilderResourceTest { @Test public void testInvoice() { + Invoice invoice = Invoice.builder() + .serie("F001") + .numero(1) + .proveedor(Proveedor.builder() + .ruc("12345678912") + .razonSocial("Softgreen S.A.C.") + .build() + ) + .cliente(Cliente.builder() + .nombre("Carlos Feria") + .numeroDocumentoIdentidad("12121212121") + .tipoDocumentoIdentidad(Catalog6.RUC.toString()) + .build() + ) + .detalle(DocumentoVentaDetalle.builder() + .descripcion("Item1") + .cantidad(new BigDecimal("10")) + .precio(new BigDecimal("100")) + .build() + ) + .build(); + given() .when() - .get("/quarkus-xbuilder/invoice") + .contentType(ContentType.JSON) + .body(invoice) + .post("/quarkus-xbuilder/invoice") .then() .statusCode(200) - .body( - is( + .body(is( "\n" + "\n" + "\n" + "\n" + @@ -512,8 +639,76 @@ public void testVoidedDocuments() { @Test public void testSummaryDocuments() { + SummaryDocuments summaryDocuments = SummaryDocuments.builder() + .numero(1) + .fechaEmision(LocalDate.of(2022, 01, 31)) + .fechaEmisionComprobantes(LocalDate.of(2022, 01, 29)) + .proveedor(Proveedor.builder() + .ruc("12345678912") + .razonSocial("Softgreen S.A.C.") + .build() + ) + .comprobante(SummaryDocumentsItem.builder() + .tipoOperacion(Catalog19.ADICIONAR.toString()) + .comprobante(Comprobante.builder() + .tipoComprobante(Catalog1_Invoice.BOLETA.getCode())// + .serieNumero("B001-1") + .cliente(Cliente.builder() + .nombre("Carlos Feria") + .numeroDocumentoIdentidad("12345678") + .tipoDocumentoIdentidad(Catalog6.DNI.getCode()) + .build() + ) + .impuestos(ComprobanteImpuestos.builder() + .igv(new BigDecimal("18")) + .icb(new BigDecimal(2)) + .build() + ) + .valorVenta(ComprobanteValorVenta.builder() + .importeTotal(new BigDecimal("120")) + .gravado(new BigDecimal("120")) + .build() + ) + .build() + ) + .build() + ) + .comprobante(SummaryDocumentsItem.builder() + .tipoOperacion(Catalog19.ADICIONAR.toString()) + .comprobante(Comprobante.builder() + .tipoComprobante(Catalog1.NOTA_CREDITO.getCode()) + .serieNumero("BC02-2") + .comprobanteAfectado(ComprobanteAfectado.builder() + .serieNumero("B002-2") + .tipoComprobante(Catalog1.BOLETA.getCode()) // + .build() + ) + .cliente(Cliente.builder() + .nombre("Carlos Feria") + .numeroDocumentoIdentidad("12345678") + .tipoDocumentoIdentidad(Catalog6.DNI.getCode())// + .build() + ) + .impuestos(ComprobanteImpuestos.builder() + .igv(new BigDecimal("18")) + .build() + ) + .valorVenta(ComprobanteValorVenta.builder() + .importeTotal(new BigDecimal("118")) + .gravado(new BigDecimal("118")) + .build() + ) + .build() + ) + .build() + ) + .build(); + given() - .when().get("/quarkus-xbuilder/summary-documents") + .when() + .contentType(ContentType.JSON) + .body(summaryDocuments) + .post("/quarkus-xbuilder/summary-documents") .then() .statusCode(200) .body(is("\n" + @@ -646,8 +841,46 @@ public void testSummaryDocuments() { @Test public void testPerception() { + Perception perception = Perception.builder() + .serie("P001") + .numero(1) + .fechaEmision(LocalDate.of(2022, 01, 31)) + .proveedor(Proveedor.builder() + .ruc("12345678912") + .razonSocial("Softgreen S.A.C.") + .build() + ) + .cliente(Cliente.builder() + .nombre("Carlos Feria") + .numeroDocumentoIdentidad("12121212121") + .tipoDocumentoIdentidad(Catalog6.RUC.getCode()) + .build() + ) + .importeTotalPercibido(new BigDecimal("10")) + .importeTotalCobrado(new BigDecimal("210")) + .tipoRegimen(Catalog22.VENTA_INTERNA.getCode()) + .tipoRegimenPorcentaje(Catalog22.VENTA_INTERNA.getPercent()) // + .operacion(PercepcionRetencionOperacion.builder() + .numeroOperacion(1) + .fechaOperacion(LocalDate.of(2022, 01, 31)) + .importeOperacion(new BigDecimal("100")) + .comprobante(io.github.project.openubl.xbuilder.content.models.sunat.percepcionretencion.ComprobanteAfectado.builder() + .tipoComprobante(Catalog1.FACTURA.getCode()) + .serieNumero("F001-1") + .fechaEmision(LocalDate.of(2022, 01, 31)) + .importeTotal(new BigDecimal("200")) + .moneda("PEN") + .build() + ) + .build() + ) + .build(); + given() - .when().get("/quarkus-xbuilder/perception") + .when() + .contentType(ContentType.JSON) + .body(perception) + .post("/quarkus-xbuilder/perception") .then() .statusCode(200) .body(is("\n" + @@ -726,8 +959,46 @@ public void testPerception() { @Test public void testRetention() { + Retention retention = Retention.builder() + .serie("R001") + .numero(1) + .fechaEmision(LocalDate.of(2022, 01, 31)) + .proveedor(Proveedor.builder() + .ruc("12345678912") + .razonSocial("Softgreen S.A.C.") + .build() + ) + .cliente(Cliente.builder() + .nombre("Carlos Feria") + .numeroDocumentoIdentidad("12121212121") + .tipoDocumentoIdentidad(Catalog6.RUC.getCode()) + .build() + ) + .importeTotalRetenido(new BigDecimal("10")) + .importeTotalPagado(new BigDecimal("200")) + .tipoRegimen(Catalog23.TASA_TRES.getCode()) + .tipoRegimenPorcentaje(Catalog23.TASA_TRES.getPercent()) // + .operacion(PercepcionRetencionOperacion.builder() + .numeroOperacion(1) + .fechaOperacion(LocalDate.of(2022, 01, 31)) + .importeOperacion(new BigDecimal("100")) + .comprobante(io.github.project.openubl.xbuilder.content.models.sunat.percepcionretencion.ComprobanteAfectado.builder() + .tipoComprobante(Catalog1.FACTURA.getCode()) + .serieNumero("F001-1") + .fechaEmision(LocalDate.of(2022, 01, 31)) + .importeTotal(new BigDecimal("210")) + .moneda("PEN") + .build() + ) + .build() + ) + .build(); + given() - .when().get("/quarkus-xbuilder/retention") + .when() + .contentType(ContentType.JSON) + .body(retention) + .post("/quarkus-xbuilder/retention") .then() .statusCode(200) .body(is("\n" +