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 }