//go:build never // +build never package documents import ( "bytes" "encoding/json" "io" "net/http" "net/http/httptest" "os" "path/filepath" "testing" "github.com/jung-kurt/gofpdf" ) func createPDF(path, title string) error { pdf := gofpdf.New("P", "mm", "A4", "") pdf.AddPage() pdf.SetFont("Helvetica", "", 12) pdf.CellFormat(0, 10, title, "", 1, "L", false, 0, "") return pdf.OutputFileAndClose(path) } func TestGenerateInvoicePDF_Handler_CreatesFile(t *testing.T) { dir := t.TempDir() // Also create a terms file so merge path is exercised if err := createPDF(filepath.Join(dir, "CMC_terms_and_conditions2006_A4.pdf"), "terms"); err != nil { t.Fatalf("failed to create terms: %v", err) } reqBody := InvoicePDFRequest{ DocumentID: 1, InvoiceTitle: "INV-1001", CustomerName: "Acme Corp", ShipVia: "Courier", FOB: "Sydney", IssueDate: "2025-01-01", CurrencySymbol: "$", ShowGST: true, LineItems: []InvoiceLineItemRequest{{ ItemNumber: "1", Quantity: "2", Title: "Widget", UnitPrice: 10.00, TotalPrice: 20.00, }}, OutputDir: dir, } // Add an extra file to append extraPath := filepath.Join(dir, "extra.pdf") if err := createPDF(extraPath, "extra"); err != nil { t.Fatalf("failed to create extra: %v", err) } reqBody.AppendFiles = []string{extraPath} b, _ := json.Marshal(reqBody) r := httptest.NewRequest(http.MethodPost, "/go/pdf/generate-invoice", bytes.NewReader(b)) w := httptest.NewRecorder() GenerateInvoicePDF(w, r) resp := w.Result() defer resp.Body.Close() if resp.StatusCode != http.StatusOK { data, _ := io.ReadAll(resp.Body) t.Fatalf("unexpected status: %d body=%s", resp.StatusCode, string(data)) } // Verify file created final := filepath.Join(dir, "INV-1001.pdf") st, err := os.Stat(final) if err != nil { t.Fatalf("expected output file not found: %v", err) } if st.Size() <= 0 { t.Fatalf("output pdf has zero size") } }