Attempt to improve over all voice code.
This commit is contained in:
@@ -144,3 +144,145 @@ func TestUpdateUserChannel(t *testing.T) {
|
||||
t.Fatalf("expected disconnected user channel to be removed, got %#v", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestUserAudioChangeNotification(t *testing.T) {
|
||||
current := &gumble.Channel{ID: 1, Name: "Current"}
|
||||
other := &gumble.Channel{ID: 2, Name: "Other"}
|
||||
self := &gumble.User{Session: 1, Name: "Username", Channel: current}
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
user *gumble.User
|
||||
previous userAudioState
|
||||
remember bool
|
||||
change gumble.UserChangeType
|
||||
want userChangeNotification
|
||||
wantOK bool
|
||||
}{
|
||||
{
|
||||
name: "user mutes themselves",
|
||||
user: &gumble.User{Session: 2, Name: "Guest", Channel: current, SelfMuted: true},
|
||||
remember: true,
|
||||
change: gumble.UserChangeAudio,
|
||||
want: userChangeNotification{
|
||||
event: "mute",
|
||||
who: "Guest",
|
||||
what: "Current",
|
||||
line: "Guest muted themselves",
|
||||
},
|
||||
wantOK: true,
|
||||
},
|
||||
{
|
||||
name: "user unmutes themselves",
|
||||
user: &gumble.User{Session: 2, Name: "Guest", Channel: current},
|
||||
previous: userAudioState{selfMuted: true},
|
||||
remember: true,
|
||||
change: gumble.UserChangeAudio,
|
||||
want: userChangeNotification{
|
||||
event: "unmute",
|
||||
who: "Guest",
|
||||
what: "Current",
|
||||
line: "Guest unmuted themselves",
|
||||
},
|
||||
wantOK: true,
|
||||
},
|
||||
{
|
||||
name: "deafen takes precedence over implied mute",
|
||||
user: &gumble.User{Session: 2, Name: "Guest", Channel: current, SelfMuted: true, SelfDeafened: true},
|
||||
remember: true,
|
||||
change: gumble.UserChangeAudio,
|
||||
want: userChangeNotification{
|
||||
event: "deafen",
|
||||
who: "Guest",
|
||||
what: "Current",
|
||||
line: "Guest deafened themselves",
|
||||
},
|
||||
wantOK: true,
|
||||
},
|
||||
{
|
||||
name: "undeafen takes precedence over implied unmute",
|
||||
user: &gumble.User{Session: 2, Name: "Guest", Channel: current},
|
||||
previous: userAudioState{selfMuted: true, selfDeafened: true},
|
||||
remember: true,
|
||||
change: gumble.UserChangeAudio,
|
||||
want: userChangeNotification{
|
||||
event: "undeafen",
|
||||
who: "Guest",
|
||||
what: "Current",
|
||||
line: "Guest undeafened themselves",
|
||||
},
|
||||
wantOK: true,
|
||||
},
|
||||
{
|
||||
name: "self mute uses self wording",
|
||||
user: &gumble.User{Session: 1, Name: "Username", Channel: current, SelfMuted: true},
|
||||
remember: true,
|
||||
change: gumble.UserChangeAudio,
|
||||
want: userChangeNotification{
|
||||
event: "mute",
|
||||
who: "me",
|
||||
what: "Current",
|
||||
line: "You muted yourself",
|
||||
},
|
||||
wantOK: true,
|
||||
},
|
||||
{
|
||||
name: "other channel is ignored",
|
||||
user: &gumble.User{Session: 2, Name: "Guest", Channel: other, SelfMuted: true},
|
||||
remember: true,
|
||||
change: gumble.UserChangeAudio,
|
||||
},
|
||||
{
|
||||
name: "initial state is remembered without notification",
|
||||
user: &gumble.User{Session: 2, Name: "Guest", Channel: current, SelfMuted: true},
|
||||
change: gumble.UserChangeConnected | gumble.UserChangeAudio,
|
||||
},
|
||||
{
|
||||
name: "unrelated user change is ignored",
|
||||
user: &gumble.User{Session: 2, Name: "Guest", Channel: current, SelfMuted: true},
|
||||
remember: true,
|
||||
change: gumble.UserChangeComment,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
b := &Barnard{
|
||||
Client: &gumble.Client{Self: self},
|
||||
}
|
||||
if tt.remember {
|
||||
b.userAudioStates = map[uint32]userAudioState{tt.user.Session: tt.previous}
|
||||
}
|
||||
|
||||
got, ok := b.userAudioChangeNotification(&gumble.UserChangeEvent{
|
||||
Client: b.Client,
|
||||
Type: tt.change,
|
||||
User: tt.user,
|
||||
})
|
||||
if ok != tt.wantOK {
|
||||
t.Fatalf("expected ok %v, got %v", tt.wantOK, ok)
|
||||
}
|
||||
if got != tt.want {
|
||||
t.Fatalf("expected %#v, got %#v", tt.want, got)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestUpdateUserAudioState(t *testing.T) {
|
||||
user := &gumble.User{Session: 2, SelfMuted: true, SelfDeafened: true}
|
||||
b := &Barnard{}
|
||||
|
||||
b.updateUserAudioState(&gumble.UserChangeEvent{User: user})
|
||||
if got := b.userAudioStates[user.Session]; got != (userAudioState{selfMuted: true, selfDeafened: true}) {
|
||||
t.Fatalf("unexpected remembered audio state: %#v", got)
|
||||
}
|
||||
|
||||
b.updateUserAudioState(&gumble.UserChangeEvent{
|
||||
Type: gumble.UserChangeDisconnected,
|
||||
User: user,
|
||||
})
|
||||
if _, ok := b.userAudioStates[user.Session]; ok {
|
||||
t.Fatal("expected disconnected user audio state to be removed")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user