clone

fifteen puzzle games for the terminal, with daily puzzles, weekly ladders and xp, built on bubble tea

chore/app-model-decomp
puzzletea / app / spawn_test.go
spawn_test.go 2.0K
1package app23import (4 "testing"56 tea "charm.land/bubbletea/v2"7 "github.com/FelineStateMachine/puzzletea/game"8)910func TestHandleSpawnCompleteIgnoresStaleJob(t *testing.T) {11 called := false12 m := model{13 state: generatingView,14 session: sessionState{15 generating: true,16 spawnJobID: 7,17 spawnCancel: func() {18 called = true19 },20 },21 }2223 next, _ := m.handleSpawnComplete(6, game.SpawnCompleteMsg{Err: nil})24 got := next.(model)2526 if !got.session.generating {27 t.Fatal("expected stale completion to be ignored")28 }29 if called {30 t.Fatal("stale completion should not cancel active spawn")31 }32}3334func TestGeneratingEscapeCancelsActiveSpawn(t *testing.T) {35 called := false36 m := model{37 state: generatingView,38 session: sessionState{39 generating: true,40 spawnJobID: 3,41 spawnCancel: func() {42 called = true43 },44 spawn: &spawnRequest{45 source: spawnSourceSeed,46 returnState: playMenuView,47 },48 },49 }5051 next, _ := m.Update(tea.KeyPressMsg{Code: tea.KeyEscape})52 got := next.(model)5354 if !called {55 t.Fatal("expected spawn cancellation callback to run")56 }57 if got.session.generating {58 t.Fatal("expected generating to be false after escape")59 }60 if got.state != playMenuView {61 t.Fatalf("expected playMenuView after seeded generation escape, got %d", got.state)62 }63 if got.session.spawnCancel != nil {64 t.Fatal("expected spawnCancel to be cleared")65 }66}6768func TestHandleSpawnCompleteSurfacingErrors(t *testing.T) {69 m := model{70 state: generatingView,71 session: sessionState{72 generating: true,73 spawnJobID: 9,74 spawn: &spawnRequest{75 returnState: playMenuView,76 },77 },78 }7980 next, _ := m.handleSpawnComplete(9, game.SpawnCompleteMsg{Err: assertiveError("boom")})81 got := next.(model)8283 if got.state != playMenuView {84 t.Fatalf("state = %d, want %d", got.state, playMenuView)85 }86 if got.notice.message == "" {87 t.Fatal("expected spawn error notice to be populated")88 }89}9091type assertiveError string9293func (e assertiveError) Error() string { return string(e) }