Files
receipt-wrangler-api/internal/services/receipt_csv_service_test.go
2025-05-28 19:20:58 +00:00

113 lines
2.8 KiB
Go

package services
import (
"github.com/shopspring/decimal"
"receipt-wrangler/api/internal/models"
"receipt-wrangler/api/internal/utils"
"testing"
"time"
)
func TestShouldBuildReceiptCsv(t *testing.T) {
expected :=
"Id,Added At,Receipt Date,Name,Paid By,Amount,Status,Categories,Tags,Resolved Date\n" +
"1,2025-01-01,2025-01-01,test,Jim,123.45,OPEN,\"Groceries,Food\",\"Bill,Essential\",2025-01-01\n"
date := time.Date(
2025, 1, 1, 0, 0, 0, 0, time.UTC)
service := NewReceiptCsvService()
receipts := []models.Receipt{
models.Receipt{
BaseModel: models.BaseModel{
ID: 1,
CreatedAt: date,
},
Date: date,
Name: "test",
PaidByUser: models.User{DisplayName: "Jim"},
Amount: decimal.NewFromFloat(123.45),
Status: models.OPEN,
Categories: []models.Category{
models.Category{Name: "Groceries"},
models.Category{Name: "Food"},
},
Tags: []models.Tag{
models.Tag{Name: "Bill"},
models.Tag{Name: "Essential"},
},
ResolvedDate: &date,
},
}
result, err := service.BuildReceiptCsv(receipts)
if err != nil {
utils.PrintTestError(t, result, expected)
}
bytes := result.ReceiptCsvBytes
if string(bytes) != expected {
utils.PrintTestError(t, string(bytes), expected)
}
}
func TestShouldBuildItemCsv(t *testing.T) {
expected :=
"Id,Receipt Id,Receipt Name,Receipt Date,Name,Charged to User,Amount,Status,Categories,Tags\n" +
"1,2,Test Receipt,2025-01-01,Test Item,John,25.5,OPEN,\"Groceries,Food\",\"Essential,Bill\"\n" +
"2,3,Another Receipt,2025-01-02,Another Item,Jane,15.75,RESOLVED,Electronics,Gadget\n"
date1 := time.Date(2025, 1, 1, 0, 0, 0, 0, time.UTC)
date2 := time.Date(2025, 1, 2, 0, 0, 0, 0, time.UTC)
service := NewReceiptCsvService()
items := []models.Item{
{
BaseModel: models.BaseModel{ID: 1},
ReceiptId: 2,
Receipt: models.Receipt{
Name: "Test Receipt",
Date: date1,
},
Name: "Test Item",
ChargedToUser: models.User{DisplayName: "John"},
Amount: decimal.NewFromFloat(25.50),
Status: models.ITEM_OPEN,
Categories: []models.Category{
{Name: "Groceries"},
{Name: "Food"},
},
Tags: []models.Tag{
{Name: "Essential"},
{Name: "Bill"},
},
},
{
BaseModel: models.BaseModel{ID: 2},
ReceiptId: 3,
Receipt: models.Receipt{
Name: "Another Receipt",
Date: date2,
},
Name: "Another Item",
ChargedToUser: models.User{DisplayName: "Jane"},
Amount: decimal.NewFromFloat(15.75),
Status: models.ITEM_RESOLVED,
Categories: []models.Category{
{Name: "Electronics"},
},
Tags: []models.Tag{
{Name: "Gadget"},
},
},
}
result, err := service.BuildItemCsv(items)
if err != nil {
utils.PrintTestError(t, err, nil)
}
if string(result) != expected {
utils.PrintTestError(t, string(result), expected)
}
}