diff options
Diffstat (limited to 'internal/casino/machine_test.go')
| -rw-r--r-- | internal/casino/machine_test.go | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/internal/casino/machine_test.go b/internal/casino/machine_test.go index 53fe2e6..349a452 100644 --- a/internal/casino/machine_test.go +++ b/internal/casino/machine_test.go @@ -113,3 +113,34 @@ func TestMachineDisconnectFreesSeatAndForfeitsSpin(t *testing.T) { t.Fatalf("empty machine emitted events after disconnect: %+v", events) } } + +func TestMachineFreeSpinsDoNotRetrigger(t *testing.T) { + m := newMachine(1, MachineConfig{ID: "slots", Game: GameSlots}, rand.New(rand.NewSource(7))) + m.player = &Participant{Name: "alice", Connected: true, Wallet: &testWallet{credits: 100}} + m.spinBet = 10 + m.inFreeSpins = true + m.freeSpins = 1 + m.spin = &SlotSpin{ScatterCount: 3} + events := m.finishSpin() + for _, e := range events { + if hasMessage([]Event{e}, "trigger") { + t.Fatalf("scatters during free spins retriggered: %+v", events) + } + } + // The last free spin resolved; the feature is now over. + m.spin = &SlotSpin{ScatterCount: 3} + m.finishSpin() + if m.freeSpins != 0 || m.inFreeSpins { + t.Fatalf("free-spin feature did not end: freeSpins=%d inFreeSpins=%v", m.freeSpins, m.inFreeSpins) + } + // Scatters on a paid spin trigger normally again. + m.phase = machineReady + m.spin = &SlotSpin{ScatterCount: 3} + events = m.finishSpin() + if m.freeSpins != m.profile.FreeSpinCount-1 || !m.inFreeSpins { + t.Fatalf("paid-spin trigger broken: freeSpins=%d inFreeSpins=%v", m.freeSpins, m.inFreeSpins) + } + if !hasMessage(events, "trigger") { + t.Fatalf("missing trigger message: %+v", events) + } +} |
