vibeStonk/server/services/ledgerService_test.go
2025-06-12 16:57:42 -04:00

94 lines
2.2 KiB
Go

package services
import (
"errors"
"testing"
"time"
models "vibeStonk/server/models/v1"
"vibeStonk/server/repository"
)
func TestLedgerService_NewSale(t *testing.T) {
configs := repository.GetTestConfigs()
for _, config := range configs {
system, err := NewTestSystem(t, config)
if err != nil {
t.Errorf("failed to initialize test system: %v", err)
}
ledger, err := NewLedgerService(config, system.User)
if err != nil {
t.Errorf("error while initializing ledger: %v", err)
}
purchase, err := ledger.NewPurchase(1, time.Now(), 3, 100)
if err != nil {
t.Errorf("failed to buy new stock: %v", err)
}
if purchase.Id != 1 {
t.Errorf("expected first purchase ID to be 1, got %d", purchase.Id)
}
purchase2, err := ledger.NewPurchase(1, time.Now(), 1, 200)
if err != nil {
t.Errorf("failed to buy new stock2: %v", err)
}
if purchase2.Id != 2 {
t.Errorf("expected second purcahse ID to be 2, got %d", purchase2.Id)
}
// expect failed sale
fSale, saleError := ledger.NewSale(1, time.Now(), 9, 250)
if saleError == nil {
t.Error("Expected error, got nil")
} else {
if !errors.Is(saleError, ErrInsufficientHoldings) {
t.Errorf("expected insufficient holdings, got: %+v", err)
}
}
if fSale != nil {
t.Errorf("expected nil failed sale, got: %+v", fSale)
}
sale, err := ledger.NewSale(1, time.Now(), 0.5, 225)
if err != nil {
t.Errorf("expected nil err, got: %+v", err)
}
if sale.Id == -1 {
t.Errorf("expected valid sale id, got: %d", err)
}
sale2, err := ledger.NewSale(1, time.Now(), 3, 250)
if err != nil {
t.Errorf("expected nil err, got: %+v", err)
}
if sale2.Id == -1 {
t.Errorf("expected valid sale id, got: %d", err)
}
}
}
func TestLedgerService_DeleteSale(t *testing.T) {
configs := repository.GetTestConfigs()
for _, config := range configs {
system, err := NewTestSystem(t, config)
if err != nil {
t.Errorf("failed to initialize test system: %v", err)
}
ledger, err := NewLedgerService(config, system.User)
if err != nil {
t.Errorf("error while initializing ledger: %v", err)
}
sale := &models.Sale{Id: 2}
err = ledger.DeleteSale(sale)
if err != nil {
t.Errorf("failed to delete sale: %v", err)
}
}
}