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

50 lines
1.3 KiB
Go

package services
import (
"errors"
"fmt"
"testing"
models "vibeStonk/server/models/v1"
"vibeStonk/server/repository"
"vibeStonk/server/util"
)
type TestSystem struct {
System *SystemServices
User *models.User
}
func NewTestSystem(t *testing.T, config *repository.Config) (*TestSystem, error) {
t.Helper()
system, err := NewSystemServices(config)
if err != nil {
return nil, fmt.Errorf("failed to initialize test system: %w", err)
}
uname, pword := util.GetTestUserCredentials()
user, err := system.AuthService.RegisterUser(uname, "Test", pword)
if err != nil {
if errors.Is(err, ErrExistingUser) {
session, sErr := system.AuthService.AuthenticateUser(uname, pword)
if sErr != nil {
return nil, fmt.Errorf("failed to authenticate test user: %w", err)
}
user, err = system.AuthService.AuthenticateToken(session.Token)
if err != nil {
return nil, fmt.Errorf("failed to validate the token we just made: %w", err)
}
} else {
return nil, fmt.Errorf("failed to register test user: %w", err)
}
}
_, err = system.StockService.NewStock(util.TestStockSymbol, "Test Stock A")
if err != nil {
if !errors.Is(err, ErrExistingStock) {
return nil, fmt.Errorf("failed to create test stock: %w", err)
}
}
return &TestSystem{System: system, User: user}, nil
}