1package app23import (4 "testing"56 tea "charm.land/bubbletea/v2"7 "github.com/FelineStateMachine/puzzletea/ui"8)910func TestMainMenuScreenRoutesByStableAction(t *testing.T) {11 tests := []struct {12 name string13 item ui.MenuItem14 assert func(t *testing.T, action screenAction)15 }{16 {17 name: "play",18 item: ui.MenuItem{Action: mainMenuActionPlay, ItemTitle: "Launch", Desc: "custom label"},19 assert: func(t *testing.T, action screenAction) {20 t.Helper()21 if _, ok := action.(openPlayMenuAction); !ok {22 t.Fatalf("action = %T, want %T", action, openPlayMenuAction{})23 }24 },25 },26 {27 name: "export",28 item: ui.MenuItem{Action: mainMenuActionExport, ItemTitle: "Print Pack", Desc: "custom label"},29 assert: func(t *testing.T, action screenAction) {30 t.Helper()31 if _, ok := action.(openExportAction); !ok {32 t.Fatalf("action = %T, want %T", action, openExportAction{})33 }34 },35 },36 }3738 for _, tt := range tests {39 t.Run(tt.name, func(t *testing.T) {40 screen := mainMenuScreen{41 menu: ui.NewMainMenu([]ui.MenuItem{tt.item}),42 }4344 _, _, action := screen.Update(tea.KeyPressMsg{Code: tea.KeyEnter})45 tt.assert(t, action)46 })47 }48}4950func TestMainMenuItemsPlacesExportBetweenPlayAndStats(t *testing.T) {51 if len(mainMenuItems) < 3 {52 t.Fatalf("mainMenuItems length = %d, want at least 3", len(mainMenuItems))53 }54 if got := mainMenuItems[0].Action; got != mainMenuActionPlay {55 t.Fatalf("mainMenuItems[0] = %q, want %q", got, mainMenuActionPlay)56 }57 if got := mainMenuItems[1].Action; got != mainMenuActionExport {58 t.Fatalf("mainMenuItems[1] = %q, want %q", got, mainMenuActionExport)59 }60 if got := mainMenuItems[2].Action; got != mainMenuActionStats {61 t.Fatalf("mainMenuItems[2] = %q, want %q", got, mainMenuActionStats)62 }63}6465func TestPlayMenuScreenRoutesByStableAction(t *testing.T) {66 tests := []struct {67 name string68 item ui.MenuItem69 assert func(t *testing.T, action screenAction)70 }{71 {72 name: "daily",73 item: ui.MenuItem{Action: playMenuActionDaily, ItemTitle: "Today", Desc: "custom label"},74 assert: func(t *testing.T, action screenAction) {75 t.Helper()76 if _, ok := action.(openDailyAction); !ok {77 t.Fatalf("action = %T, want %T", action, openDailyAction{})78 }79 },80 },81 {82 name: "create",83 item: ui.MenuItem{Action: playMenuActionCreate, ItemTitle: "New", Desc: "custom label"},84 assert: func(t *testing.T, action screenAction) {85 t.Helper()86 if _, ok := action.(openCreateAction); !ok {87 t.Fatalf("action = %T, want %T", action, openCreateAction{})88 }89 },90 },91 }9293 for _, tt := range tests {94 t.Run(tt.name, func(t *testing.T) {95 screen := playMenuScreen{96 menu: ui.NewMainMenu([]ui.MenuItem{tt.item}),97 }9899 _, _, action := screen.Update(tea.KeyPressMsg{Code: tea.KeyEnter})100 tt.assert(t, action)101 })102 }103}104105func TestOptionsMenuScreenRoutesByStableAction(t *testing.T) {106 screen := optionsMenuScreen{107 menu: ui.NewMainMenu([]ui.MenuItem{108 {Action: optionsMenuActionGuides, ItemTitle: "Help Docs", Desc: "custom label"},109 }),110 }111112 _, _, action := screen.Update(tea.KeyPressMsg{Code: tea.KeyEnter})113 if _, ok := action.(openHelpSelectAction); !ok {114 t.Fatalf("action = %T, want %T", action, openHelpSelectAction{})115 }116}