diff --git a/cmd/any2anexoj-cli/pretty_printer_test.go b/cmd/any2anexoj-cli/pretty_printer_test.go index 06ab7d0..48cb3ca 100644 --- a/cmd/any2anexoj-cli/pretty_printer_test.go +++ b/cmd/any2anexoj-cli/pretty_printer_test.go @@ -1 +1,84 @@ package main + +import ( + "bytes" + "context" + "testing" + "time" + + "github.com/nmoniz/any2anexoj/internal" + "github.com/shopspring/decimal" +) + +func TestPrettyPrinter_Render(t *testing.T) { + // Create test data + aw := internal.NewAggregatorWriter() + ctx := context.Background() + + // Add some sample report items + err := aw.Write(ctx, internal.ReportItem{ + Symbol: "AAPL", + Nature: internal.NatureG01, + BrokerCountry: 826, // United Kingdom + AssetCountry: 840, // United States + 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, // United Kingdom + AssetCountry: 840, // United States + 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) + } + + // Create English localizer + localizer, err := NewLocalizer("en") + if err != nil { + t.Fatalf("failed to create localizer: %v", err) + } + + // Create pretty printer with buffer + var buf bytes.Buffer + pp := NewPrettyPrinter(&buf, localizer) + + // Render the table + pp.Render(aw) + + // Get the output + got := buf.String() + + // Expected output + want := `┌───┬────────────────────────────┬───────────────────────────────────┬───────────────────────────────────┬──────────────────────────────────────────────────────────┐ +│ │ │ REALIZATION │ ACQUISITION │ │ +│ │ SOURCE COUNTRY │ CODE │ YEAR │ MONTH │ DAY │ VALUE │ YEAR │ MONTH │ DAY │ VALUE │ EXPENSES AND CH │ TAX PAID ABROAD │ COUNTER COUNTRY │ +│ │ │ │ │ │ │ │ │ │ │ │ ARGES │ │ │ +├───┼─────────────────────┼──────┼──────┼───────┼─────┼──────────────┼──────┼───────┼─────┼──────────────┼─────────────────┼─────────────────┼──────────────────────┤ +│ 1 │ 840 - United States │ G01 │ 2023 │ 6 │ 20 │ 150.75 € │ 2023 │ 1 │ 15 │ 100.50 € │ 2.50 € │ 5.00 € │ 826 - United Kingdom │ +│ 2 │ 840 - United States │ G20 │ 2023 │ 9 │ 5 │ 225.50 € │ 2023 │ 3 │ 10 │ 200.00 € │ 3.00 € │ 7.50 € │ 826 - United Kingdom │ +├───┼─────────────────────┴──────┴──────┴───────┴─────┼──────────────┼──────┴───────┴─────┼──────────────┼─────────────────┼─────────────────┼──────────────────────┤ +│ │ SUM │ 376.25 € │ │ 300.5 € │ 5.5 € │ 12.5 € │ │ +└───┴─────────────────────────────────────────────────┴──────────────┴────────────────────┴──────────────┴─────────────────┴─────────────────┴──────────────────────┘ +` + + // Compare output + if got != want { + t.Errorf("PrettyPrinter.Render() output doesn't match expected.\n\nGot:\n%s\n\nWant:\n%s", got, want) + } +}