Files
barnard/client_notification_test.go
2026-05-20 18:36:49 -04:00

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)
}
}