package html_test import ( "bytes" "strings" "testing" "time" "github.com/nmoniz/any2anexoj/internal" "github.com/nmoniz/any2anexoj/internal/writing" htmlwriter "github.com/nmoniz/any2anexoj/internal/writing/html" "github.com/shopspring/decimal" ) // buildTestAggregator returns an AggregatorWriter seeded with two // deterministic ReportItems so every test can assert on a stable document // shape. Mirrors the fixture pattern used in // internal/writing/table/printer_test.go. func buildTestAggregator(t *testing.T) *internal.AggregatorWriter { t.Helper() aw := internal.NewAggregatorWriter() ctx := t.Context() err := aw.Write(ctx, internal.ReportItem{ Symbol: "AAPL", Nature: internal.NatureG01, BrokerCountry: 826, AssetCountry: 840, BuyValue: decimal.NewFromFloat(100.50), BuyTimestamp: time.Date(2023, 1, 15, 0, 0, 0, 0, time.UTC), SellValue: decimal.NewFromFloat(150.75), SellTimestamp: time.Date(2023, 6, 20, 0, 0, 0, 0, time.UTC), Fees: decimal.NewFromFloat(2.50), Taxes: decimal.NewFromFloat(5.00), }) if err != nil { t.Fatalf("failed to write first report item: %v", err) } err = aw.Write(ctx, internal.ReportItem{ Symbol: "GOOGL", Nature: internal.NatureG20, BrokerCountry: 826, AssetCountry: 840, BuyValue: decimal.NewFromFloat(200.00), BuyTimestamp: time.Date(2023, 3, 10, 0, 0, 0, 0, time.UTC), SellValue: decimal.NewFromFloat(225.50), SellTimestamp: time.Date(2023, 9, 5, 0, 0, 0, 0, time.UTC), Fees: decimal.NewFromFloat(3.00), Taxes: decimal.NewFromFloat(7.50), }) if err != nil { t.Fatalf("failed to write second report item: %v", err) } return aw } func TestWriter_Render(t *testing.T) { loc, err := writing.NewLocalizer("en") if err != nil { t.Fatalf("create localizer: %v", err) } var buf bytes.Buffer hw := htmlwriter.NewWriter(&buf, loc, "en") if err := hw.Render(buildTestAggregator(t)); err != nil { t.Fatalf("Render returned an error: %v", err) } got := buf.String() wantSubstrings := []string{ "", ``, ``, ``, `