diff --git a/src/test/java/com/imprimelibros/erp/pdf/PdfSmokeTest.java b/src/test/java/com/imprimelibros/erp/pdf/PdfSmokeTest.java new file mode 100644 index 0000000..a2905d7 --- /dev/null +++ b/src/test/java/com/imprimelibros/erp/pdf/PdfSmokeTest.java @@ -0,0 +1,96 @@ +// src/test/java/com/imprimelibros/erp/pdf/PdfSmokeTest.java +package com.imprimelibros.erp.pdf; + +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.time.LocalDate; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +@SpringBootTest +class PdfSmokeTest { + + @Autowired + PdfService pdfService; + + @Test + void generaPresupuesto() throws Exception { + Map model = new HashMap<>(); + model.put("numero", "2025-00123"); + model.put("fecha", LocalDate.of(2025, 10, 12)); + model.put("validezDias", 30); + + model.put("empresa", Map.of( + "nombre", "ImprimeLibros ERP", + "direccion", "C/ Dirección 123, 28000 Madrid", + "telefono", "+34 600 000 000", + "email", "info@imprimelibros.com", + "cif", "B-12345678", + "web", "www.imprimelibros.com")); + + model.put("cliente", Map.of( + "nombre", "Editorial Ejemplo S.L.", + "cif", "B-00000000", + "direccion", "Av. de los Libros, 45", + "cp", "28001", + "poblacion", "Madrid", + "provincia", "Madrid", + "email", "compras@editorial.com")); + + model.put("titulo", "Libro de Ejemplo"); + model.put("autor", "Autora Demo"); + model.put("isbn", "978-1-2345-6789-0"); + model.put("ancho", 150); + model.put("alto", 210); + model.put("formatoPersonalizado", true); + model.put("paginasNegro", "300"); + model.put("paginasColor", null); + model.put("tiradas", List.of(300, 500, 1000)); + + model.put("lineas", List.of( + Map.of("descripcion", "Impresión interior B/N offset 80 g", + "meta", "300 páginas · tinta negra · papel 80 g", + "uds", 1000, + "precio", 2.15, + "dto", 0, + "importe", 2150.0), + Map.of("descripcion", "Cubierta color 300 g laminado mate", + "meta", "Lomo 15 mm · 4/0 · laminado mate", + "uds", 1000, + "precio", 0.38, + "dto", 5.0, + "importe", 361.0))); + + model.put("servicios", List.of( + Map.of("descripcion", "Transporte península", "unidades", 1, "precio", 90.00))); + + model.put("baseImponible", 2601.0); + model.put("ivaTipo", 21); + model.put("ivaImporte", 546.21); + model.put("totalConIva", 3147.21); + model.put("peso", 120.0); + + model.put("observaciones", "Presupuesto válido 30 días.
Incluye embalaje estándar."); + model.put("condiciones", "Entrega 7-10 días laborables tras confirmación de artes finales."); + + var spec = new DocumentSpec( + DocumentType.PRESUPUESTO, + "presupuesto-a4", + Locale.forLanguageTag("es-ES"), + model); + + byte[] pdf = pdfService.generate(spec); + + Path out = Path.of("target/presupuesto-test.pdf"); + Files.createDirectories(out.getParent()); + Files.write(out, pdf); + + System.out.println("✅ PDF generado en: " + out.toAbsolutePath()); + } +}