1515import static org .junit .jupiter .api .Assertions .*;
1616
1717/**
18- * Tests de integración que verifican la coherencia entre los tres validadores
19- * (DespatchAdviceValidator, GRERemitente, GRETransportista) después de la
20- * centralización en DespatchAdviceCommonValidator.
18+ * Tests de integración que verifican la coherencia entre los tres validadores (DespatchAdviceValidator, GRERemitente,
19+ * GRETransportista) después de la centralización en DespatchAdviceCommonValidator.
2120 * <p>
2221 * Asegura que:
2322 * <ul>
24- * <li>La misma regla produce el mismo resultado en los tres puntos de entrada</li>
25- * <li>Los mensajes de error tienen el texto esperado</li>
26- * <li>La conversión toDespatchAdvice() + validación produce resultados coherentes</li>
27- * <li>validate() y validateDetailed() son consistentes</li>
23+ * <li>La misma regla produce el mismo resultado en los tres puntos de entrada</li>
24+ * <li>Los mensajes de error tienen el texto esperado</li>
25+ * <li>La conversión toDespatchAdvice() + validación produce resultados coherentes</li>
26+ * <li>validate() y validateDetailed() son consistentes</li>
2827 * </ul>
2928 */
3029public class ValidationCoherenceTest {
@@ -35,53 +34,79 @@ public class ValidationCoherenceTest {
3534
3635 private static GRERemitente .GRERemitenteBuilder minimalRemitente () {
3736 return GRERemitente .builder ()
38- .serie ("T001" ).numero (1 )
37+ .serie ("T001" )
38+ .numero (1 )
3939 .remitente (Remitente .builder ().ruc ("12345678912" ).razonSocial ("Test S.A.C." ).build ())
4040 .destinatario (Destinatario .builder ()
4141 .tipoDocumentoIdentidad (Catalog6 .DNI .getCode ())
42- .numeroDocumentoIdentidad ("12345678" ).nombre ("Cliente" ).build ())
42+ .numeroDocumentoIdentidad ("12345678" )
43+ .nombre ("Cliente" )
44+ .build ())
4345 .envio (Envio .builder ()
4446 .tipoTraslado (Catalog20 .VENTA .getCode ())
45- .pesoTotal (BigDecimal .ONE ).pesoTotalUnidadMedida ("KGM" )
47+ .pesoTotal (BigDecimal .ONE )
48+ .pesoTotalUnidadMedida ("KGM" )
4649 .tipoModalidadTraslado (Catalog18 .TRANSPORTE_PRIVADO .getCode ())
4750 .fechaTraslado (LocalDate .now ())
4851 .chofer (Driver .builder ()
49- .tipoDocumentoIdentidad ("1" ).numeroDocumentoIdentidad ("11111111" )
50- .nombres ("J" ).apellidos ("P" ).licencia ("Q123" ).build ())
52+ .tipoDocumentoIdentidad ("1" )
53+ .numeroDocumentoIdentidad ("11111111" )
54+ .nombres ("J" )
55+ .apellidos ("P" )
56+ .licencia ("Q123" )
57+ .build ())
5158 .vehiculo (Vehicle .builder ().placa ("ABC-123" ).build ())
5259 .partida (Partida .builder ().ubigeo ("010101" ).direccion ("O" ).build ())
5360 .destino (Destino .builder ().ubigeo ("020202" ).direccion ("D" ).build ())
5461 .build ())
5562 .detalle (DespatchAdviceItem .builder ()
56- .cantidad (BigDecimal .ONE ).unidadMedida ("NIU" ).codigo ("001" ).build ());
63+ .cantidad (BigDecimal .ONE )
64+ .unidadMedida ("NIU" )
65+ .codigo ("001" )
66+ .build ());
5767 }
5868
5969 private static GRETransportista .GRETransportistaBuilder minimalTransportista () {
6070 return GRETransportista .builder ()
61- .serie ("V001" ).numero (1 )
71+ .serie ("V001" )
72+ .numero (1 )
6273 .transportistaEmisor (Transportista .builder ()
6374 .tipoDocumentoIdentidad (Catalog6 .RUC .getCode ())
64- .numeroDocumentoIdentidad ("20300030003" ).nombre ("Transportes S.A.C." ).build ())
75+ .numeroDocumentoIdentidad ("20300030003" )
76+ .nombre ("Transportes S.A.C." )
77+ .build ())
6578 .remitente (Tercero .builder ()
6679 .tipoDocumentoIdentidad (Catalog6 .RUC .getCode ())
67- .numeroDocumentoIdentidad ("20100010001" ).nombre ("Remitente S.A.C." ).build ())
80+ .numeroDocumentoIdentidad ("20100010001" )
81+ .nombre ("Remitente S.A.C." )
82+ .build ())
6883 .destinatario (Destinatario .builder ()
6984 .tipoDocumentoIdentidad (Catalog6 .RUC .getCode ())
70- .numeroDocumentoIdentidad ("20200020002" ).nombre ("Destino S.A." ).build ())
85+ .numeroDocumentoIdentidad ("20200020002" )
86+ .nombre ("Destino S.A." )
87+ .build ())
7188 .conductor (Driver .builder ()
72- .tipoDocumentoIdentidad ("1" ).numeroDocumentoIdentidad ("44444444" )
73- .nombres ("M" ).apellidos ("T" ).licencia ("Q444" ).build ())
89+ .tipoDocumentoIdentidad ("1" )
90+ .numeroDocumentoIdentidad ("44444444" )
91+ .nombres ("M" )
92+ .apellidos ("T" )
93+ .licencia ("Q444" )
94+ .build ())
7495 .vehiculo (Vehicle .builder ().placa ("XYZ-789" ).build ())
7596 .envio (Envio .builder ()
7697 .tipoTraslado (Catalog20 .VENTA .getCode ())
77- .pesoTotal (BigDecimal .ONE ).pesoTotalUnidadMedida ("KGM" )
98+ .pesoTotal (BigDecimal .ONE )
99+ .pesoTotalUnidadMedida ("KGM" )
78100 .tipoModalidadTraslado (Catalog18 .TRANSPORTE_PUBLICO .getCode ())
79101 .fechaTraslado (LocalDate .now ())
80102 .partida (Partida .builder ().ubigeo ("010101" ).direccion ("O" ).build ())
81103 .destino (Destino .builder ().ubigeo ("020202" ).direccion ("D" ).build ())
82104 .build ())
83105 .detalle (DespatchAdviceItem .builder ()
84- .cantidad (BigDecimal .ONE ).unidadMedida ("NIU" ).codigo ("001" ).build ());
106+ .cantidad (BigDecimal .ONE )
107+ .unidadMedida ("NIU" )
108+ .codigo ("001" )
109+ .build ());
85110 }
86111
87112 // ================================================================
@@ -182,8 +207,12 @@ public void testInvalidSerieDetectedByBoth() {
182207 public void testConversionInjectsConductoresAndVehiculo () {
183208 GRETransportista gre = minimalTransportista ()
184209 .conductor (Driver .builder ()
185- .tipoDocumentoIdentidad ("1" ).numeroDocumentoIdentidad ("99999999" )
186- .nombres ("Extra" ).apellidos ("D" ).licencia ("Q999" ).build ())
210+ .tipoDocumentoIdentidad ("1" )
211+ .numeroDocumentoIdentidad ("99999999" )
212+ .nombres ("Extra" )
213+ .apellidos ("D" )
214+ .licencia ("Q999" )
215+ .build ())
187216 .build ();
188217
189218 DespatchAdvice da = gre .toDespatchAdvice ();
@@ -197,7 +226,8 @@ public void testConversionInjectsConductoresAndVehiculo() {
197226 @ Test
198227 public void testValidateAndValidateDetailedAreConsistent () {
199228 GRETransportista gre = minimalTransportista ()
200- .transportistaEmisor (null ).build ();
229+ .transportistaEmisor (null )
230+ .build ();
201231
202232 List <String > errors = gre .validate ();
203233 ValidationResult result = gre .validateDetailed ();
@@ -259,23 +289,37 @@ class SeverityUniformity {
259289 public void testComercioExteriorWarningsInAllThreeValidators () {
260290 // DespatchAdviceValidator
261291 DespatchAdvice da = DespatchAdvice .builder ()
262- .serie ("T001" ).numero (1 ).tipoComprobante ("09" )
292+ .serie ("T001" )
293+ .numero (1 )
294+ .tipoComprobante ("09" )
263295 .remitente (Remitente .builder ().ruc ("12345678912" ).razonSocial ("T" ).build ())
264296 .destinatario (Destinatario .builder ()
265- .tipoDocumentoIdentidad ("1" ).numeroDocumentoIdentidad ("12345678" ).nombre ("C" ).build ())
297+ .tipoDocumentoIdentidad ("1" )
298+ .numeroDocumentoIdentidad ("12345678" )
299+ .nombre ("C" )
300+ .build ())
266301 .envio (Envio .builder ()
267302 .tipoTraslado ("08" ) // Importación
268- .pesoTotal (BigDecimal .ONE ).pesoTotalUnidadMedida ("KGM" )
269- .tipoModalidadTraslado ("02" ).fechaTraslado (LocalDate .now ())
270- .chofer (Driver .builder ().tipoDocumentoIdentidad ("1" )
271- .numeroDocumentoIdentidad ("11111111" ).nombres ("J" )
272- .apellidos ("P" ).licencia ("Q123" ).build ())
303+ .pesoTotal (BigDecimal .ONE )
304+ .pesoTotalUnidadMedida ("KGM" )
305+ .tipoModalidadTraslado ("02" )
306+ .fechaTraslado (LocalDate .now ())
307+ .chofer (Driver .builder ()
308+ .tipoDocumentoIdentidad ("1" )
309+ .numeroDocumentoIdentidad ("11111111" )
310+ .nombres ("J" )
311+ .apellidos ("P" )
312+ .licencia ("Q123" )
313+ .build ())
273314 .vehiculo (Vehicle .builder ().placa ("ABC-123" ).build ())
274315 .partida (Partida .builder ().ubigeo ("010101" ).direccion ("O" ).build ())
275316 .destino (Destino .builder ().ubigeo ("020202" ).direccion ("D" ).build ())
276317 .build ())
277318 .detalle (DespatchAdviceItem .builder ()
278- .cantidad (BigDecimal .ONE ).unidadMedida ("NIU" ).codigo ("001" ).build ())
319+ .cantidad (BigDecimal .ONE )
320+ .unidadMedida ("NIU" )
321+ .codigo ("001" )
322+ .build ())
279323 .build ();
280324
281325 ValidationResult daResult = DespatchAdviceValidator .validateDetailed (da );
@@ -285,11 +329,18 @@ public void testComercioExteriorWarningsInAllThreeValidators() {
285329
286330 // GRERemitente: same
287331 GRERemitente gre = minimalRemitente ().envio (Envio .builder ()
288- .tipoTraslado ("08" ).pesoTotal (BigDecimal .ONE ).pesoTotalUnidadMedida ("KGM" )
289- .tipoModalidadTraslado ("02" ).fechaTraslado (LocalDate .now ())
290- .chofer (Driver .builder ().tipoDocumentoIdentidad ("1" )
291- .numeroDocumentoIdentidad ("11111111" ).nombres ("J" )
292- .apellidos ("P" ).licencia ("Q123" ).build ())
332+ .tipoTraslado ("08" )
333+ .pesoTotal (BigDecimal .ONE )
334+ .pesoTotalUnidadMedida ("KGM" )
335+ .tipoModalidadTraslado ("02" )
336+ .fechaTraslado (LocalDate .now ())
337+ .chofer (Driver .builder ()
338+ .tipoDocumentoIdentidad ("1" )
339+ .numeroDocumentoIdentidad ("11111111" )
340+ .nombres ("J" )
341+ .apellidos ("P" )
342+ .licencia ("Q123" )
343+ .build ())
293344 .vehiculo (Vehicle .builder ().placa ("ABC-123" ).build ())
294345 .partida (Partida .builder ().ubigeo ("010101" ).direccion ("O" ).build ())
295346 .destino (Destino .builder ().ubigeo ("020202" ).direccion ("D" ).build ())
@@ -307,9 +358,11 @@ public void testHardErrorsNeverDowngradedToWarning() {
307358 GRERemitente gre = minimalRemitente ().serie (null ).build ();
308359 ValidationResult result = gre .validateDetailed ();
309360 assertTrue (result .hasErrors ());
310- assertTrue (result .getMessages ().stream ()
361+ assertTrue (result .getMessages ()
362+ .stream ()
311363 .filter (m -> m .getMessage ().contains ("serie" ))
312- .allMatch (m -> m .getSeverity () == io .github .project .openubl .xbuilder .content .models .standard .guia .validation .ValidationSeverity .ERROR ));
364+ .allMatch (m -> m
365+ .getSeverity () == io .github .project .openubl .xbuilder .content .models .standard .guia .validation .ValidationSeverity .ERROR ));
313366 }
314367 }
315368}
0 commit comments