147 lines
3.7 KiB
Go
147 lines
3.7 KiB
Go
package main
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"git.stormux.org/storm/barnard/gumble/gumble"
|
|
)
|
|
|
|
func TestUserChangeNotification(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 *gumble.Channel
|
|
change gumble.UserChangeType
|
|
want userChangeNotification
|
|
wantOK bool
|
|
}{
|
|
{
|
|
name: "connected to current channel",
|
|
user: &gumble.User{Session: 2, Name: "Guest", Channel: current},
|
|
change: gumble.UserChangeConnected,
|
|
want: userChangeNotification{
|
|
event: "join",
|
|
who: "Guest",
|
|
what: "Current",
|
|
line: "Guest joined Current",
|
|
},
|
|
wantOK: true,
|
|
},
|
|
{
|
|
name: "disconnected from current channel",
|
|
user: &gumble.User{Session: 2, Name: "Guest", Channel: current},
|
|
previous: current,
|
|
change: gumble.UserChangeDisconnected,
|
|
want: userChangeNotification{
|
|
event: "leave",
|
|
who: "Guest",
|
|
what: "Current",
|
|
line: "Guest left Current",
|
|
},
|
|
wantOK: true,
|
|
},
|
|
{
|
|
name: "moved into current channel",
|
|
user: &gumble.User{Session: 2, Name: "Guest", Channel: current},
|
|
previous: other,
|
|
change: gumble.UserChangeChannel,
|
|
want: userChangeNotification{
|
|
event: "join",
|
|
who: "Guest",
|
|
what: "Current",
|
|
line: "Guest joined Current",
|
|
},
|
|
wantOK: true,
|
|
},
|
|
{
|
|
name: "moved out of current channel",
|
|
user: &gumble.User{Session: 2, Name: "Guest", Channel: other},
|
|
previous: current,
|
|
change: gumble.UserChangeChannel,
|
|
want: userChangeNotification{
|
|
event: "leave",
|
|
who: "Guest",
|
|
what: "Current",
|
|
line: "Guest left Current",
|
|
},
|
|
wantOK: true,
|
|
},
|
|
{
|
|
name: "connected to other channel",
|
|
user: &gumble.User{Session: 2, Name: "Guest", Channel: other},
|
|
change: gumble.UserChangeConnected,
|
|
},
|
|
{
|
|
name: "moved between other channels",
|
|
user: &gumble.User{Session: 2, Name: "Guest", Channel: other},
|
|
previous: &gumble.Channel{ID: 3, Name: "Elsewhere"},
|
|
change: gumble.UserChangeChannel,
|
|
},
|
|
{
|
|
name: "self channel move",
|
|
user: self,
|
|
previous: other,
|
|
change: gumble.UserChangeChannel,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
b := &Barnard{
|
|
Client: &gumble.Client{Self: self},
|
|
}
|
|
if tt.previous != nil {
|
|
b.userChannels = map[uint32]*gumble.Channel{tt.user.Session: tt.previous}
|
|
}
|
|
|
|
got, ok := b.userChangeNotification(&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 TestUpdateUserChannel(t *testing.T) {
|
|
current := &gumble.Channel{ID: 1, Name: "Current"}
|
|
other := &gumble.Channel{ID: 2, Name: "Other"}
|
|
user := &gumble.User{Session: 2, Name: "Guest", Channel: current}
|
|
b := &Barnard{}
|
|
|
|
b.updateUserChannel(&gumble.UserChangeEvent{
|
|
Type: gumble.UserChangeConnected,
|
|
User: user,
|
|
})
|
|
if got := b.previousUserChannel(user); got != current {
|
|
t.Fatalf("expected current channel to be remembered, got %#v", got)
|
|
}
|
|
|
|
user.Channel = other
|
|
b.updateUserChannel(&gumble.UserChangeEvent{
|
|
Type: gumble.UserChangeChannel,
|
|
User: user,
|
|
})
|
|
if got := b.previousUserChannel(user); got != other {
|
|
t.Fatalf("expected other channel to be remembered, got %#v", got)
|
|
}
|
|
|
|
b.updateUserChannel(&gumble.UserChangeEvent{
|
|
Type: gumble.UserChangeDisconnected,
|
|
User: user,
|
|
})
|
|
if got := b.previousUserChannel(user); got != nil {
|
|
t.Fatalf("expected disconnected user channel to be removed, got %#v", got)
|
|
}
|
|
}
|