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) } } }