fix: keep pallet labels on A4 templates

This commit is contained in:
2026-09-20 14:05:00 +08:00
parent ee97565f67
commit 493d62e04c
15 changed files with 269 additions and 27 deletions
@@ -11,6 +11,7 @@ import com.baiyue.print.service.DispatchBolPdfService;
import com.baiyue.print.service.DropshipPalletA4PdfService;
import com.baiyue.print.service.InboundMarkPdfService;
import com.baiyue.print.service.FbaPalletPdfService;
import com.baiyue.print.service.GenericPalletPdfService;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -52,6 +53,8 @@ class InternalPdfControllerTest {
private DropshipPalletA4PdfService dropshipPalletA4PdfService;
@MockBean
private FbaPalletPdfService fbaPalletPdfService;
@MockBean
private GenericPalletPdfService genericPalletPdfService;
@Resource
private InternalPdfController controller;
private MockMvc mockMvc;
@@ -232,12 +235,14 @@ class InternalPdfControllerTest {
.contains("/internal/print/v1/pdfs/inbound-marks:")
.contains("/internal/print/v1/pdfs/freight-a4-documents:")
.contains("/internal/print/v1/pdfs/dropship-pallet-a4-documents:")
.contains("/internal/print/v1/pdfs/pallet-a4-labels:")
.contains("application/pdf:")
.contains("application/json:")
.contains("name: X-Internal-Service-Token")
.contains("SEA_FREIGHT_SHIPPING_INSTRUCTION_A4_V1:")
.contains("BILL_OF_LADING_CONFIRMATION_A4_V1:")
.contains("DROPSHIP_PALLET_A4_V2")
.contains("PALLET_A4_LANDSCAPE_V1")
.contains("additionalProperties: false")
.contains("minItems: 1")
.contains("required: [marksAndNos, quantity, packaging, descriptionOfGoods, grossWeight, measurement]")
@@ -73,6 +73,16 @@ class PrintRequestSizeFilterTest {
assertTooLarge(response);
}
@Test
void capsGenericPalletRequestsBeforeDeserialization() throws Exception {
var response = new MockHttpServletResponse();
AtomicReference<Boolean> called = new AtomicReference<>(false);
filter.doFilter(request("12345678901", true, "/internal/print/v1/pdfs/pallet-a4-labels"),
response, (ignoredRequest, ignoredResponse) -> called.set(true));
assertThat(called).hasValue(false);
assertTooLarge(response);
}
@Test
void rejectsOversizedDeclaredContentLengthWithoutCallingDownstream() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest() {
@@ -0,0 +1,43 @@
package com.baiyue.print.service;
import static org.assertj.core.api.Assertions.assertThat;
import com.baiyue.print.config.PrintPdfProperties;
import com.baiyue.print.dto.GenericPalletPdfDtos;
import com.baiyue.print.renderer.GenericPalletRenderer;
import com.baiyue.print.renderer.PdfBarcodeRenderer;
import com.baiyue.print.renderer.PdfUnits;
import java.math.BigDecimal;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.junit.jupiter.api.Test;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
@SpringJUnitConfig(classes = {GenericPalletPdfService.class, PrintPdfProperties.class,
PdfGenerationLimiter.class, GenericPalletRenderer.class, PdfBarcodeRenderer.class})
class GenericPalletPdfServiceGenerationTest {
@jakarta.annotation.Resource private GenericPalletPdfService service;
@Test
void generatesLandscapeA4WithoutUsingTheCartonMarkTemplate() throws Exception {
var generated = service.generate(new GenericPalletPdfDtos.Request(
GenericPalletPdfDtos.TEMPLATE,
new GenericPalletPdfDtos.PageSpec(new BigDecimal("297"), new BigDecimal("210")),
"pallet.pdf", List.of(new GenericPalletPdfDtos.Label(
"Los Angeles Warehouse", "Transfer WTR-1", "PALLET-001"))));
Files.createDirectories(Path.of("target"));
Files.write(Path.of("target", "generic-pallet-a4-preview.pdf"), generated.content());
try (PDDocument pdf = Loader.loadPDF(generated.content())) {
assertThat(pdf.getNumberOfPages()).isEqualTo(1);
assertThat(pdf.getPage(0).getMediaBox().getWidth()).isCloseTo(PdfUnits.mmToPt(297), org.assertj.core.data.Offset.offset(.002f));
assertThat(pdf.getPage(0).getMediaBox().getHeight()).isCloseTo(PdfUnits.mmToPt(210), org.assertj.core.data.Offset.offset(.002f));
assertThat(new PDFTextStripper().getText(pdf)).contains(
"Los Angeles Warehouse", "Transfer WTR-1", "PALLET-001");
}
}
}