50 lines
1.3 KiB
Go
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
|
|
}
|