Stage 7 (wip): tests + UI CI
- Vitest units: board replay, placement machine, premium parity, i18n key parity, FlatBuffers codec round-trips (19 tests) - Playwright smoke (mock transport): guest -> lobby -> board -> place tile -> preview - ui-test.yaml workflow: check/unit/build + bundle-size budget (67.5KB gzip < 100KB) + chromium e2e - gateway transcode tests for games.list (seat display_name), pass, hint - backend integration test for game.ListForAccount
This commit is contained in:
@@ -86,6 +86,63 @@ func readStats(t *testing.T, id uuid.UUID) (wins, losses, draws, maxGame, maxWor
|
||||
return wins, losses, draws, maxGame, maxWord, true
|
||||
}
|
||||
|
||||
// TestListForAccount checks the lobby "my games" query: it returns exactly the
|
||||
// games the account is seated in (each with its seats), and nothing for an outsider.
|
||||
func TestListForAccount(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
svc := newGameService()
|
||||
me, opp := provisionAccount(t), provisionAccount(t)
|
||||
|
||||
g1, err := svc.Create(ctx, game.CreateParams{
|
||||
Variant: engine.VariantEnglish, Seats: []uuid.UUID{me, opp}, TurnTimeout: 24 * time.Hour, Seed: 1,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("create g1: %v", err)
|
||||
}
|
||||
g2, err := svc.Create(ctx, game.CreateParams{
|
||||
Variant: engine.VariantEnglish, Seats: []uuid.UUID{opp, me}, TurnTimeout: 24 * time.Hour, Seed: 2,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("create g2: %v", err)
|
||||
}
|
||||
|
||||
games, err := svc.ListForAccount(ctx, me)
|
||||
if err != nil {
|
||||
t.Fatalf("list: %v", err)
|
||||
}
|
||||
if len(games) != 2 {
|
||||
t.Fatalf("got %d games, want 2", len(games))
|
||||
}
|
||||
seen := map[uuid.UUID]bool{}
|
||||
for _, g := range games {
|
||||
seen[g.ID] = true
|
||||
if len(g.Seats) != 2 {
|
||||
t.Errorf("game %s has %d seats, want 2", g.ID, len(g.Seats))
|
||||
}
|
||||
seated := false
|
||||
for _, s := range g.Seats {
|
||||
if s.AccountID == me {
|
||||
seated = true
|
||||
}
|
||||
}
|
||||
if !seated {
|
||||
t.Errorf("account not found among seats of returned game %s", g.ID)
|
||||
}
|
||||
}
|
||||
if !seen[g1.ID] || !seen[g2.ID] {
|
||||
t.Errorf("returned games %v missing g1=%s or g2=%s", seen, g1.ID, g2.ID)
|
||||
}
|
||||
|
||||
other := provisionAccount(t)
|
||||
og, err := svc.ListForAccount(ctx, other)
|
||||
if err != nil {
|
||||
t.Fatalf("list other: %v", err)
|
||||
}
|
||||
if len(og) != 0 {
|
||||
t.Errorf("outsider sees %d games, want 0", len(og))
|
||||
}
|
||||
}
|
||||
|
||||
// TestGameLifecycleAndStats drives a greedy two-player game to its natural end
|
||||
// through the service and checks the finish state and statistics.
|
||||
func TestGameLifecycleAndStats(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user