print a pretty table with correct country coder
This commit is contained in:
116
internal/table_writer_test.go
Normal file
116
internal/table_writer_test.go
Normal file
@@ -0,0 +1,116 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
)
|
||||
|
||||
func TestTableWriter_Write(t *testing.T) {
|
||||
tNow := time.Now()
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
items []ReportItem
|
||||
wantTotalSpent decimal.Decimal
|
||||
wantTotalEarned decimal.Decimal
|
||||
wantTotalTaxes decimal.Decimal
|
||||
wantTotalFees decimal.Decimal
|
||||
}{
|
||||
{
|
||||
name: "empty",
|
||||
},
|
||||
{
|
||||
name: "single item positive",
|
||||
items: []ReportItem{
|
||||
{
|
||||
BuyValue: decimal.NewFromFloat(100.0),
|
||||
SellValue: decimal.NewFromFloat(200.0),
|
||||
SellTimestamp: tNow,
|
||||
Taxes: decimal.NewFromFloat(2.5),
|
||||
Fees: decimal.NewFromFloat(2.5),
|
||||
},
|
||||
},
|
||||
wantTotalSpent: decimal.NewFromFloat(100.0),
|
||||
wantTotalEarned: decimal.NewFromFloat(200.0),
|
||||
wantTotalTaxes: decimal.NewFromFloat(2.5),
|
||||
wantTotalFees: decimal.NewFromFloat(2.5),
|
||||
},
|
||||
{
|
||||
name: "single item negative",
|
||||
items: []ReportItem{
|
||||
{
|
||||
BuyValue: decimal.NewFromFloat(200.0),
|
||||
SellValue: decimal.NewFromFloat(150.0),
|
||||
SellTimestamp: tNow,
|
||||
Taxes: decimal.NewFromFloat(2.5),
|
||||
Fees: decimal.NewFromFloat(2.5),
|
||||
},
|
||||
},
|
||||
wantTotalSpent: decimal.NewFromFloat(200.0),
|
||||
wantTotalEarned: decimal.NewFromFloat(150.0),
|
||||
wantTotalTaxes: decimal.NewFromFloat(2.5),
|
||||
wantTotalFees: decimal.NewFromFloat(2.5),
|
||||
},
|
||||
{
|
||||
name: "multiple items",
|
||||
items: []ReportItem{
|
||||
{
|
||||
Symbol: "US1912161007",
|
||||
BuyValue: decimal.NewFromFloat(100.0),
|
||||
SellValue: decimal.NewFromFloat(200.0),
|
||||
SellTimestamp: tNow,
|
||||
Taxes: decimal.NewFromFloat(2.5),
|
||||
Fees: decimal.NewFromFloat(2.5),
|
||||
},
|
||||
{
|
||||
Symbol: "US1912161007",
|
||||
BuyValue: decimal.NewFromFloat(200.0),
|
||||
SellValue: decimal.NewFromFloat(150.0),
|
||||
SellTimestamp: tNow.Add(1),
|
||||
Taxes: decimal.NewFromFloat(2.5),
|
||||
Fees: decimal.NewFromFloat(2.5),
|
||||
},
|
||||
},
|
||||
wantTotalSpent: decimal.NewFromFloat(300.0),
|
||||
wantTotalEarned: decimal.NewFromFloat(350.0),
|
||||
wantTotalTaxes: decimal.NewFromFloat(5.0),
|
||||
wantTotalFees: decimal.NewFromFloat(5.0),
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
buf := new(bytes.Buffer)
|
||||
tw := NewTableWriter(buf)
|
||||
|
||||
for _, item := range tt.items {
|
||||
err := tw.Write(t.Context(), item)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error on write: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
if tw.table.Length() != len(tt.items) {
|
||||
t.Fatalf("want %d items in table but got %d", len(tt.items), tw.table.Length())
|
||||
}
|
||||
|
||||
if !tw.totalSpent.Equal(tt.wantTotalSpent) {
|
||||
t.Errorf("want totalSpent to be %v but got %v", tt.wantTotalSpent, tw.totalSpent)
|
||||
}
|
||||
|
||||
if !tw.totalEarned.Equal(tt.wantTotalEarned) {
|
||||
t.Errorf("want totalEarned to be %v but got %v", tt.wantTotalEarned, tw.totalEarned)
|
||||
}
|
||||
|
||||
if !tw.totalTaxes.Equal(tt.wantTotalTaxes) {
|
||||
t.Errorf("want totalTaxes to be %v but got %v", tt.wantTotalTaxes, tw.totalTaxes)
|
||||
}
|
||||
|
||||
if !tw.totalFees.Equal(tt.wantTotalFees) {
|
||||
t.Errorf("want totalFees to be %v but got %v", tt.wantTotalFees, tw.totalFees)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user