clone

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

refactor/root-tui-model
puzzletea / catalog / catalog_test.go
catalog_test.go 1.9K
1package catalog_test23import (4 "testing"56 "github.com/FelineStateMachine/puzzletea/catalog"7 "github.com/FelineStateMachine/puzzletea/registry"8)910func TestValidateDefinitions(t *testing.T) {11 definitions := registry.Definitions()12 if err := catalog.Validate(definitions); err != nil {13 t.Fatalf("Validate(definitions) error = %v", err)14 }15}1617func TestResolveSupportsCanonicalNamesAndAliases(t *testing.T) {18 idx := catalog.MustBuild(registry.Definitions())19 tests := []struct {20 input string21 want string22 }{23 {input: "Sudoku", want: "Sudoku"},24 {input: "ripeto", want: "Sudoku RGB"},25 {input: "fillomino", want: "Fillomino"},26 {input: "hashi", want: "Hashiwokakero"},27 {input: "lights", want: "Lights Out"},28 {input: "network", want: "Netwalk"},29 {input: "ripple", want: "Ripple Effect"},30 {input: "spell", want: "Spell Puzzle"},31 {input: "wordsearch", want: "Word Search"},32 }3334 for _, tt := range tests {35 def, ok := idx.Resolve(tt.input)36 if !ok {37 t.Fatalf("Resolve(%q) returned !ok", tt.input)38 }39 if def.Name != tt.want {40 t.Fatalf("Resolve(%q).Name = %q, want %q", tt.input, def.Name, tt.want)41 }42 }43}4445func TestDefinitionsAndNamesPreserveRegistryOrder(t *testing.T) {46 definitions := registry.Definitions()47 idx := catalog.MustBuild(definitions)48 names := idx.Names()49 if len(names) != len(definitions) {50 t.Fatalf("len(Names()) = %d, want %d", len(names), len(definitions))51 }52 for i, def := range definitions {53 if names[i] != def.Name {54 t.Fatalf("Names()[%d] = %q, want %q", i, names[i], def.Name)55 }56 }57}5859func TestDailyEntriesHaveMetadata(t *testing.T) {60 idx := catalog.MustBuild(registry.Definitions())61 entries := idx.DailyEntries()62 if len(entries) == 0 {63 t.Fatal("DailyEntries returned no entries")64 }65 for i, entry := range entries {66 if entry.GameID == "" || entry.GameName == "" || entry.ModeID == "" || entry.Mode == "" {67 t.Fatalf("DailyEntries()[%d] missing metadata", i)68 }69 }70}