428 lines
8.3 KiB
Markdown
428 lines
8.3 KiB
Markdown
|
|
# Miku UNO Bot - Testing Checklist
|
||
|
|
|
||
|
|
## Pre-Testing Setup
|
||
|
|
|
||
|
|
### 1. Install Playwright Browsers ✅
|
||
|
|
```bash
|
||
|
|
cd /home/koko210Serve/docker/miku-discord/bot
|
||
|
|
bash setup_uno_playwright.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
**Expected Output**:
|
||
|
|
```
|
||
|
|
✅ Playwright browsers installed successfully!
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Verify UNO Servers Running ✅
|
||
|
|
```bash
|
||
|
|
# Terminal 1 - Backend
|
||
|
|
cd /home/koko210Serve/docker/uno-online
|
||
|
|
node server.js
|
||
|
|
# Should show: Server listening on port 5000
|
||
|
|
|
||
|
|
# Terminal 2 - Frontend
|
||
|
|
cd /home/koko210Serve/docker/uno-online/client
|
||
|
|
npm start
|
||
|
|
# Should show: webpack compiled successfully
|
||
|
|
# Available at: http://192.168.1.2:3002
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Start Miku Bot ✅
|
||
|
|
```bash
|
||
|
|
cd /home/koko210Serve/docker/miku-discord/bot
|
||
|
|
python bot.py
|
||
|
|
```
|
||
|
|
|
||
|
|
**Look for**:
|
||
|
|
```
|
||
|
|
🎤 MikuBot connected as <bot name>
|
||
|
|
```
|
||
|
|
|
||
|
|
## Testing Scenarios
|
||
|
|
|
||
|
|
### Test 1: Help Command
|
||
|
|
**Discord Command**: `!uno help`
|
||
|
|
|
||
|
|
**Expected Response**:
|
||
|
|
```
|
||
|
|
🎮 Miku UNO Commands
|
||
|
|
|
||
|
|
!uno create
|
||
|
|
Create a new UNO game room and join as Player 2
|
||
|
|
|
||
|
|
!uno join <room_code>
|
||
|
|
Join an existing UNO game room
|
||
|
|
Example: !uno join ABC123
|
||
|
|
|
||
|
|
!uno list
|
||
|
|
Show all active UNO games
|
||
|
|
|
||
|
|
!uno quit <room_code>
|
||
|
|
Leave an active UNO game
|
||
|
|
Example: !uno quit ABC123
|
||
|
|
|
||
|
|
!uno help
|
||
|
|
Show this help message
|
||
|
|
```
|
||
|
|
|
||
|
|
**Status**: [ ] Pass [ ] Fail
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Test 2: Create Game
|
||
|
|
**Discord Command**: `!uno create`
|
||
|
|
|
||
|
|
**Expected Response**:
|
||
|
|
```
|
||
|
|
🎮 Created UNO room: <6-char code>
|
||
|
|
Join at: http://192.168.1.2:3002
|
||
|
|
I'm joining now as Player 2! ✨
|
||
|
|
```
|
||
|
|
|
||
|
|
**Verification Steps**:
|
||
|
|
1. Copy the room code from response
|
||
|
|
2. Open http://192.168.1.2:3002 in browser
|
||
|
|
3. Click "Join Room"
|
||
|
|
4. Enter the room code
|
||
|
|
5. You should see "Player 1" (you) and "Player 2" (Miku) in the room
|
||
|
|
|
||
|
|
**Bot Logs Should Show**:
|
||
|
|
```
|
||
|
|
[UNO] Creating new game room...
|
||
|
|
[MikuUnoPlayer] Browser launched
|
||
|
|
[MikuUnoPlayer] Navigating to UNO game...
|
||
|
|
[MikuUnoPlayer] Joining room: <code>
|
||
|
|
[MikuUnoPlayer] Waiting for game to start...
|
||
|
|
```
|
||
|
|
|
||
|
|
**Status**: [ ] Pass [ ] Fail
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Test 3: Game Starts (2 Players)
|
||
|
|
**Action**: After joining the room in browser (Test 2), game should auto-start
|
||
|
|
|
||
|
|
**Expected Behavior**:
|
||
|
|
- Game initializes with 7 cards each
|
||
|
|
- A top card appears in the center
|
||
|
|
- Turn indicator shows whose turn it is
|
||
|
|
|
||
|
|
**Bot Logs Should Show**:
|
||
|
|
```
|
||
|
|
[MikuUnoPlayer] Game started! Players: 2
|
||
|
|
[MikuUnoPlayer] Polling game state...
|
||
|
|
[MikuUnoPlayer] Current turn: Player 1 (or Player 2)
|
||
|
|
```
|
||
|
|
|
||
|
|
**Status**: [ ] Pass [ ] Fail
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Test 4: Miku's First Turn
|
||
|
|
**Action**: Let the game proceed until it's Miku's turn (Player 2)
|
||
|
|
|
||
|
|
**Expected Behavior**:
|
||
|
|
1. Bot detects it's Player 2's turn
|
||
|
|
2. Bot analyzes game state
|
||
|
|
3. Bot prompts LLM for strategy
|
||
|
|
4. Bot makes a valid move (play or draw)
|
||
|
|
5. Bot sends trash talk to Discord
|
||
|
|
|
||
|
|
**Bot Logs Should Show**:
|
||
|
|
```
|
||
|
|
[MikuUnoPlayer] It's my turn! Analyzing game state...
|
||
|
|
[MikuUnoPlayer] Hand: ['R5', 'G2', 'B7', ...] (7 cards)
|
||
|
|
[MikuUnoPlayer] Top card: Y3
|
||
|
|
[MikuUnoPlayer] Getting Miku's strategic decision...
|
||
|
|
[MikuUnoPlayer] LLM Response: {"action": "play", "card": "Y5"}
|
||
|
|
[MikuUnoPlayer] Action executed successfully!
|
||
|
|
```
|
||
|
|
|
||
|
|
**Discord Should Show**:
|
||
|
|
```
|
||
|
|
(One of the trash talk messages based on card played)
|
||
|
|
```
|
||
|
|
|
||
|
|
**Status**: [ ] Pass [ ] Fail
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Test 5: LLM Strategy Quality
|
||
|
|
**Action**: Observe several of Miku's turns
|
||
|
|
|
||
|
|
**Expected Behavior**:
|
||
|
|
- Miku plays matching cards when available
|
||
|
|
- Miku uses special cards strategically (Draw 2, Skip, etc.)
|
||
|
|
- Miku draws when no valid plays
|
||
|
|
- Miku calls UNO when down to 1 card
|
||
|
|
|
||
|
|
**Quality Checks**:
|
||
|
|
- [ ] Plays valid cards only
|
||
|
|
- [ ] Matches color or number correctly
|
||
|
|
- [ ] Uses Wild cards when necessary
|
||
|
|
- [ ] Strategic use of action cards
|
||
|
|
- [ ] Calls UNO at right time
|
||
|
|
|
||
|
|
**Status**: [ ] Pass [ ] Fail
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Test 6: Trash Talk Personality
|
||
|
|
**Action**: Check Discord messages during gameplay
|
||
|
|
|
||
|
|
**Expected Messages** (examples):
|
||
|
|
- Draw 4: "Take four cards! 💙✨ I hope you're ready for a comeback~"
|
||
|
|
- Draw 2: "Draw two cards! Don't worry, I still believe in you~ ✨"
|
||
|
|
- Skip: "Sorry~ Skipping your turn! Maybe next time? 🎶"
|
||
|
|
- Wild: "I'm changing the color! Let's see how you handle this~ 💫"
|
||
|
|
- Regular: "Playing my card~ Let's keep this fun! 🎵"
|
||
|
|
|
||
|
|
**Personality Checks**:
|
||
|
|
- [ ] Messages are cheerful
|
||
|
|
- [ ] Uses emojis appropriately
|
||
|
|
- [ ] Sounds like Miku (idol personality)
|
||
|
|
- [ ] Varies based on card type
|
||
|
|
|
||
|
|
**Status**: [ ] Pass [ ] Fail
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Test 7: Game Completion
|
||
|
|
**Action**: Play until game ends (someone wins)
|
||
|
|
|
||
|
|
**Expected Behavior**:
|
||
|
|
1. Winner is determined
|
||
|
|
2. Bot detects game end
|
||
|
|
3. Bot stops polling
|
||
|
|
4. Bot sends final message to Discord
|
||
|
|
5. Bot cleans up resources
|
||
|
|
|
||
|
|
**Bot Logs Should Show**:
|
||
|
|
```
|
||
|
|
[MikuUnoPlayer] Game ended! Winner: <Player 1 or Player 2>
|
||
|
|
[MikuUnoPlayer] Stopping game loop...
|
||
|
|
[MikuUnoPlayer] Browser closed
|
||
|
|
```
|
||
|
|
|
||
|
|
**Discord Should Show**:
|
||
|
|
```
|
||
|
|
🎮 Game <code> has ended!
|
||
|
|
(Winner message)
|
||
|
|
```
|
||
|
|
|
||
|
|
**Status**: [ ] Pass [ ] Fail
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Test 8: Join Existing Game
|
||
|
|
**Setup**: Create a game manually at http://192.168.1.2:3002, get room code
|
||
|
|
|
||
|
|
**Discord Command**: `!uno join ABC123` (use actual code)
|
||
|
|
|
||
|
|
**Expected Response**:
|
||
|
|
```
|
||
|
|
🎮 Joining UNO room: ABC123
|
||
|
|
I'll be Player 2! ✨
|
||
|
|
```
|
||
|
|
|
||
|
|
**Verification**: Same as Test 2 & 3
|
||
|
|
|
||
|
|
**Status**: [ ] Pass [ ] Fail
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Test 9: List Active Games
|
||
|
|
**Setup**: Have 1-2 active games running
|
||
|
|
|
||
|
|
**Discord Command**: `!uno list`
|
||
|
|
|
||
|
|
**Expected Response**:
|
||
|
|
```
|
||
|
|
🎮 Active UNO Games:
|
||
|
|
|
||
|
|
Room: ABC123
|
||
|
|
Players: 2/2
|
||
|
|
Status: Playing
|
||
|
|
Started: 2 minutes ago
|
||
|
|
|
||
|
|
Room: XYZ789
|
||
|
|
Players: 2/2
|
||
|
|
Status: Playing
|
||
|
|
Started: 5 minutes ago
|
||
|
|
```
|
||
|
|
|
||
|
|
**Status**: [ ] Pass [ ] Fail
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Test 10: Quit Game
|
||
|
|
**Setup**: Have an active game running
|
||
|
|
|
||
|
|
**Discord Command**: `!uno quit ABC123`
|
||
|
|
|
||
|
|
**Expected Response**:
|
||
|
|
```
|
||
|
|
👋 Left UNO room: ABC123
|
||
|
|
See you next game! ✨
|
||
|
|
```
|
||
|
|
|
||
|
|
**Verification**:
|
||
|
|
- Bot stops polling
|
||
|
|
- Browser closes
|
||
|
|
- Game removed from active games list
|
||
|
|
|
||
|
|
**Status**: [ ] Pass [ ] Fail
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Error Scenarios
|
||
|
|
|
||
|
|
### Test E1: Invalid Room Code
|
||
|
|
**Discord Command**: `!uno join INVALID`
|
||
|
|
|
||
|
|
**Expected Response**:
|
||
|
|
```
|
||
|
|
❌ Couldn't join room INVALID
|
||
|
|
The room might not exist or is full.
|
||
|
|
```
|
||
|
|
|
||
|
|
**Status**: [ ] Pass [ ] Fail
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Test E2: Room Already Full
|
||
|
|
**Setup**: Create a game, have 2 players join via browser
|
||
|
|
|
||
|
|
**Discord Command**: `!uno join <code>`
|
||
|
|
|
||
|
|
**Expected Response**:
|
||
|
|
```
|
||
|
|
❌ Room <code> is full (2/2 players)
|
||
|
|
```
|
||
|
|
|
||
|
|
**Status**: [ ] Pass [ ] Fail
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Test E3: Servers Not Running
|
||
|
|
**Setup**: Stop UNO server (port 5000)
|
||
|
|
|
||
|
|
**Discord Command**: `!uno create`
|
||
|
|
|
||
|
|
**Expected Response**:
|
||
|
|
```
|
||
|
|
❌ Failed to create game room
|
||
|
|
Make sure the UNO server is running.
|
||
|
|
```
|
||
|
|
|
||
|
|
**Status**: [ ] Pass [ ] Fail
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Test E4: Invalid JSON from LLM
|
||
|
|
**Action**: This should be caught and handled gracefully
|
||
|
|
|
||
|
|
**Expected Behavior**:
|
||
|
|
- Bot logs error
|
||
|
|
- Bot attempts to draw card as fallback
|
||
|
|
- Game continues without crashing
|
||
|
|
|
||
|
|
**Bot Logs Should Show**:
|
||
|
|
```
|
||
|
|
[MikuUnoPlayer] Error: Invalid LLM response format
|
||
|
|
[MikuUnoPlayer] Falling back to draw action
|
||
|
|
```
|
||
|
|
|
||
|
|
**Status**: [ ] Pass [ ] Fail
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Performance Tests
|
||
|
|
|
||
|
|
### Test P1: Response Time
|
||
|
|
**Metric**: Time from "It's Miku's turn" to action executed
|
||
|
|
|
||
|
|
**Target**: < 5 seconds
|
||
|
|
|
||
|
|
**Measured**: _______ seconds
|
||
|
|
|
||
|
|
**Status**: [ ] Pass [ ] Fail
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Test P2: Multiple Concurrent Games
|
||
|
|
**Action**: Start 2-3 games simultaneously
|
||
|
|
|
||
|
|
**Expected Behavior**:
|
||
|
|
- All games run independently
|
||
|
|
- No cross-contamination of game state
|
||
|
|
- Each game has own polling loop
|
||
|
|
|
||
|
|
**Status**: [ ] Pass [ ] Fail
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### Test P3: Long Game (20+ turns)
|
||
|
|
**Action**: Play a full game with many turns
|
||
|
|
|
||
|
|
**Expected Behavior**:
|
||
|
|
- Bot maintains performance throughout
|
||
|
|
- No memory leaks
|
||
|
|
- No degradation in response time
|
||
|
|
|
||
|
|
**Status**: [ ] Pass [ ] Fail
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Test Results Summary
|
||
|
|
|
||
|
|
**Total Tests**: 17 (10 main + 4 error + 3 performance)
|
||
|
|
|
||
|
|
**Passed**: _____
|
||
|
|
**Failed**: _____
|
||
|
|
**Percentage**: _____%
|
||
|
|
|
||
|
|
## Issues Found
|
||
|
|
|
||
|
|
### Issue 1
|
||
|
|
**Description**:
|
||
|
|
**Severity**: [ ] Critical [ ] Major [ ] Minor
|
||
|
|
**Status**: [ ] Open [ ] Fixed
|
||
|
|
|
||
|
|
### Issue 2
|
||
|
|
**Description**:
|
||
|
|
**Severity**: [ ] Critical [ ] Major [ ] Minor
|
||
|
|
**Status**: [ ] Open [ ] Fixed
|
||
|
|
|
||
|
|
### Issue 3
|
||
|
|
**Description**:
|
||
|
|
**Severity**: [ ] Critical [ ] Major [ ] Minor
|
||
|
|
**Status**: [ ] Open [ ] Fixed
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Next Steps
|
||
|
|
|
||
|
|
### If All Tests Pass ✅
|
||
|
|
1. Document any quirks or limitations
|
||
|
|
2. Create user-facing documentation
|
||
|
|
3. Consider Discord Activity conversion (Phase 2)
|
||
|
|
4. Implement enhancement features
|
||
|
|
|
||
|
|
### If Tests Fail ❌
|
||
|
|
1. Document failures in detail
|
||
|
|
2. Prioritize by severity
|
||
|
|
3. Debug and fix critical issues first
|
||
|
|
4. Re-test after fixes
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Notes
|
||
|
|
|
||
|
|
**Date Tested**: __________
|
||
|
|
**Tester**: __________
|
||
|
|
**Bot Version**: __________
|
||
|
|
**Environment**: __________
|
||
|
|
|
||
|
|
**Additional Observations**:
|