import { describe, expect, it } from 'vitest'; import { resultBadge } from './result'; import type { GameView, Seat } from './model'; const seat = (s: number, accountId: string, score: number, isWinner = false): Seat => ({ seat: s, accountId, displayName: accountId, score, hintsUsed: 0, isWinner, }); function game(seats: Seat[], status = 'finished', toMove = 0): GameView { return { id: 'g', variant: 'english', dictVersion: 'v1', status, players: seats.length, toMove, turnTimeoutSecs: 0, moveCount: 0, endReason: '', seats, }; } describe('resultBadge', () => { it('active: your move vs opponent', () => { const g = game([seat(0, 'me', 5), seat(1, 'a', 3)], 'active', 0); expect(resultBadge(g, 'me')).toEqual({ key: 'result.yourMove', emoji: '🟢' }); expect(resultBadge({ ...g, toMove: 1 }, 'me').key).toBe('result.oppMove'); }); it('finished two-player: victory / defeat / draw', () => { expect(resultBadge(game([seat(0, 'me', 300, true), seat(1, 'a', 200)]), 'me')).toEqual({ key: 'result.victory', emoji: '🏆', }); expect(resultBadge(game([seat(0, 'me', 200), seat(1, 'a', 300, true)]), 'me')).toEqual({ key: 'result.defeat', emoji: '🥈', }); expect(resultBadge(game([seat(0, 'me', 200), seat(1, 'a', 200)]), 'me')).toEqual({ key: 'result.draw', emoji: '🏅', }); }); it('finished four-player: places by score', () => { const last = game([seat(0, 'me', 100), seat(1, 'a', 400, true), seat(2, 'b', 300), seat(3, 'c', 200)]); expect(resultBadge(last, 'me')).toEqual({ key: 'result.place4', emoji: '🏅' }); const second = game([seat(0, 'me', 300), seat(1, 'a', 400, true), seat(2, 'b', 200), seat(3, 'c', 100)]); expect(resultBadge(second, 'me')).toEqual({ key: 'result.place2', emoji: '🥈' }); }); });