Files
kjol/go/webui/pdf_summary_test.go

67 lines
2.2 KiB
Go

package webui
import (
"strings"
"testing"
)
// A summary row the user built in the editor must reach the PDF. Before, the caller
// had to restate it by hand — so a row someone created showed on screen and then
// quietly vanished from the export, which is the one number they most likely wanted
// in the file.
func TestPDFPicksUpTheTablesOwnSummaryRows(t *testing.T) {
s := newCalcTable()
s.AddSummaryRow(UserSummaryRow{
ID: "total", Label: "Total revenue", Fn: CALC_FN_SUM,
Operands: []string{"Revenue"}, DataType: CALC_TYPE_NUMBER, Precision: CalcPrecision(0),
})
s.Render()
pdf := string(s.ExportPDFBytes(AutoTablePDFHeader{Title: "Report"}))
if !strings.Contains(pdf, "Total revenue") {
t.Error("the table's own summary row is missing from the PDF")
}
if !strings.Contains(pdf, "300") {
t.Error("the summary row's VALUE is missing from the PDF (100 + 200)")
}
}
// A calculated column the user built must reach it too, with its per-row values.
func TestPDFPicksUpCalculatedColumns(t *testing.T) {
s := newCalcTable()
s.AddCalculated(UserCalculatedColumn{
ID: "total", DisplayName: "Row total", Fn: CALC_FN_SUM,
Operands: []string{"Revenue", "Cost"}, DataType: CALC_TYPE_NUMBER, Precision: CalcPrecision(0),
})
s.Render()
pdf := string(s.ExportPDFBytes(AutoTablePDFHeader{Title: "Report"}))
if !strings.Contains(pdf, "Row total") {
t.Error("the calculated column's header is missing from the PDF")
}
// Per row, not the column total: 100+40 and 200+50.
for _, want := range []string{"140", "250"} {
if !strings.Contains(pdf, want) {
t.Errorf("calculated value %s missing from the PDF", want)
}
}
}
// An explicit Summaries list is an escape hatch and must win.
func TestPDFExplicitSummariesWin(t *testing.T) {
s := newCalcTable()
s.AddSummaryRow(UserSummaryRow{ID: "a", Label: "From the table", Fn: CALC_FN_SUM,
Operands: []string{"Revenue"}})
s.Render()
pdf := string(s.ExportPDFBytes(AutoTablePDFHeader{
Summaries: []AutoTablePDFSummary{{Label: "Caller supplied", Value: "42"}},
}))
if !strings.Contains(pdf, "Caller supplied") {
t.Error("an explicit summary list was ignored")
}
if strings.Contains(pdf, "From the table") {
t.Error("the table's rows were added on top of the caller's")
}
}