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