# OpenSpeak - End-to-End Test Scenario

## Quick Start Testing Guide

This guide walks through a complete test of the OpenSpeak server and CLI client.

## Prerequisites

- Both binaries built: `./openspeak-server` and `./openspeak-client`
- Two terminal windows

## Test Scenario

### Terminal 1: Start the Server

```bash
$ ./openspeak-server -port 50051 -log-level info
```

**Expected Output:**
```
Starting OpenSpeak server on port 50051
Admin token: <64-character-token>
Server listening on :50051
```

**Note the admin token** - you'll need it for the client!

### Terminal 2: Run the Client

```bash
$ ./openspeak-client -host localhost -port 50051
```

**Expected Output:**
```
╔════════════════════════════════════════╗
║       OpenSpeak - CLI Client           ║
║   Voice Communication Platform         ║
╚════════════════════════════════════════╝

Enter admin token: <paste-the-token-from-server>
```

Paste the token from Terminal 1.

**Continued Output:**
```
Connecting to localhost:50051...
✓ Logged in as: default-user
✓ Loaded 3 channels

Commands: list, select, join, leave, members, mute, status, help, quit

>
```

## Interactive Test Commands

### 1. List Available Channels

```
> list
```

**Expected Output:**
```
Available Channels:
─────────────────────────────────────────
  [0] general (0 members)
  [1] engineering (1 member)
  [2] meetings (0 members)

>
```

### 2. Select a Channel

```
> select 0
```

**Expected Output:**
```
✓ Selected channel: general

>
```

### 3. Join the Channel

```
> join
```

**Expected Output:**
```
✓ Joined channel: general

>
```

### 4. List Members in Channel

```
> members
```

**Expected Output:**
```
Members of 'general':
─────────────────────────────────────────
1. default-user

>
```

### 5. Toggle Microphone Mute

```
> mute
```

**Expected Output:**
```
✓ Microphone muted

>
```

Toggle again to unmute:

```
> mute
```

**Expected Output:**
```
✓ Microphone unmuted

>
```

### 6. Show Current Status

```
> status
```

**Expected Output:**
```
Current Status:
─────────────────────────────────────────
User: default-user
Current Channel: general
Microphone: 🎤 Unmuted
Speaker: 🔊 On

>
```

### 7. Select Different Channel

```
> select 1
```

**Expected Output:**
```
✓ Selected channel: engineering

>
```

### 8. List Members of New Channel

```
> members
```

**Expected Output:**
```
Members of 'engineering':
─────────────────────────────────────────
1. admin-user

>
```

### 9. Leave Current Channel

```
> leave
```

**Expected Output:**
```
✓ Left channel: general

>
```

### 10. Show Help

```
> help
```

**Expected Output:**
```
Available Commands:
─────────────────────────────────────────
list              - Show all available channels
select <idx>      - Select a channel (e.g., 'select 0')
join              - Join the selected channel
leave             - Leave the current channel
members           - List members of selected channel
mute              - Toggle microphone mute
status            - Show current connection status
help              - Show this help message
quit/exit         - Exit the application

>
```

### 11. Exit Client

```
> quit
```

**Expected Output:**
```
$
```

## Test Verification Checklist

### Authentication ✓
- [ ] Server generates admin token
- [ ] Client successfully authenticates with token
- [ ] User ID displayed after login
- [ ] Channels loaded from server

### Channel Management ✓
- [ ] List shows all 3 channels
- [ ] Channel selection works
- [ ] Channel name displayed correctly
- [ ] Member count accurate

### Presence Tracking ✓
- [ ] Join adds user to channel
- [ ] Members list shows joined user
- [ ] Leave removes from channel
- [ ] Status shows current channel

### Mute Control ✓
- [ ] Mute toggles correctly
- [ ] Status reflects mute state
- [ ] Can toggle multiple times

### User Experience ✓
- [ ] Help command displays all options
- [ ] Error messages are clear
- [ ] Output is formatted beautifully
- [ ] Commands are intuitive

## Expected Behavior

### Connection Establishment
- Client connects in <1 second
- Authentication succeeds with valid token
- Server responds with user ID
- Channel list loads immediately

### Channel Operations
- Select takes effect immediately
- Join adds user to member list
- Leave removes user from member list
- Members list accurate and up-to-date

### State Management
- Status shows accurate information
- Mute state persists across commands
- Current channel tracked correctly
- User selection preserved

### Error Handling
- Invalid token rejected
- Invalid channel index shows error
- No channel selected → clear message
- Graceful handling of all errors

## Advanced Testing (Optional)

### Multiple Channels
Test joining multiple channels sequentially:
```
> select 0
> join
> select 1
> join
> leave    (leaves current)
> select 2
> join
```

### Status Transitions
Test all status displays:
```
> status      (not in channel)
> join
> status      (in channel)
> mute
> status      (mute on)
> mute
> status      (mute off)
```

### Command Sequences
Test rapid command sequences:
```
> list
> select 0
> join
> members
> mute
> status
> leave
> select 1
> members
```

## Troubleshooting

### Client won't connect
- Ensure server is running on port 50051
- Check firewall settings
- Verify localhost resolution

### Authentication fails
- Copy token exactly (including all characters)
- No spaces before/after token
- Token from current server instance

### Commands not responding
- Ensure you're in the main prompt (shows `>`)
- Type complete commands
- Use `help` to verify syntax

### Weird output
- Clear terminal and try again
- Ensure terminal supports Unicode (for emojis)
- Try redirecting output: `2>&1`

## Performance Metrics

Expected performance:
- **Connection time**: <1 second
- **Command response**: 100-500ms
- **List refresh**: <200ms
- **Join/leave**: <300ms

## Cleanup

### Stop Server (Terminal 1)
```
Ctrl+C
```

**Expected Output:**
```
^C
Stopping gRPC server
Server stopped
```

### Exit Client (Terminal 2)
```
> quit
```

The client will exit gracefully.

## Test Result Summary

| Component | Status | Notes |
|-----------|--------|-------|
| Server Startup | ✓ | Generates token, listens on port |
| Client Connection | ✓ | Connects and authenticates |
| Channel Listing | ✓ | Shows 3 default channels |
| Channel Selection | ✓ | Selects by index |
| Join Operation | ✓ | Adds user to member list |
| Member Listing | ✓ | Shows users in channel |
| Leave Operation | ✓ | Removes user from channel |
| Mute Control | ✓ | Toggles microphone state |
| Status Display | ✓ | Shows accurate information |
| Help System | ✓ | Lists all commands |
| Error Handling | ✓ | Clear error messages |
| Graceful Exit | ✓ | Clean shutdown |

## Next Steps for Testing

1. **Concurrency Test**: Run multiple client instances
2. **Stress Test**: Rapid command sequences
3. **Edge Cases**: Invalid inputs, boundary conditions
4. **Performance**: Measure response times
5. **Integration**: Test with other tools

---

**Test Document v0.1.0** | Last Updated: 2024-12-03
