Files
CosmicClash/server/testkit/fakes.go
T
2026-08-31 21:00:31 +01:00

50 lines
1.3 KiB
Go

// Package testkit provides deterministic offline collaborators for control
// plane integration tests. It contains no network or Steam/cloud dependency.
package testkit
import (
"time"
"github.com/cosmic-clash/cosmic-clash/server/domain"
)
type FakeSteamVerifier struct {
Verifier *domain.TicketVerifier
Identities map[string]string
}
func NewFakeSteamVerifier(appID uint64) (*FakeSteamVerifier, error) {
verifier, err := domain.NewTicketVerifier(appID)
if err != nil {
return nil, err
}
return &FakeSteamVerifier{Verifier: verifier, Identities: make(map[string]string)}, nil
}
func (f *FakeSteamVerifier) Verify(ticket domain.SteamTicket, now time.Time) (domain.VerifiedIdentity, error) {
return f.Verifier.Verify(ticket, func(steamID string) (string, bool) {
playerID, ok := f.Identities[steamID]
return playerID, ok
}, now)
}
type FakeAllocator struct {
Allocator *domain.Allocator
ForcedError error
}
func NewFakeAllocator(servers []domain.ReadyServer) (*FakeAllocator, error) {
allocator, err := domain.NewAllocator(servers)
if err != nil {
return nil, err
}
return &FakeAllocator{Allocator: allocator}, nil
}
func (f *FakeAllocator) Allocate(request domain.AllocationRequest, now time.Time) (domain.Allocation, error) {
if f.ForcedError != nil {
return domain.Allocation{}, f.ForcedError
}
return f.Allocator.Allocate(request, now)
}