2022-10-03 11:46:49 +00:00
|
|
|
package gateway
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"encoding/json"
|
|
|
|
"reflect"
|
|
|
|
"strings"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/diamondburned/arikawa/v3/discord"
|
|
|
|
"github.com/diamondburned/arikawa/v3/utils/json/option"
|
|
|
|
"github.com/diamondburned/arikawa/v3/utils/ws"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestRequestGuildMembersCommand(t *testing.T) {
|
|
|
|
assert := func(cmd Event, data map[string]interface{}) {
|
|
|
|
cmdBytes, err := json.Marshal(cmd)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal("failed to marshal command:", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
var cmdMap map[string]interface{}
|
|
|
|
if err := json.Unmarshal(cmdBytes, &cmdMap); err != nil {
|
|
|
|
t.Fatal("failed to unmarshal command:", err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if !reflect.DeepEqual(cmdMap, data) {
|
|
|
|
t.Fatalf("mismatched command, got %#v", cmdMap)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
t.Run("userIDs", func(t *testing.T) {
|
|
|
|
cmd := RequestGuildMembersCommand{
|
|
|
|
GuildIDs: []discord.GuildID{123},
|
|
|
|
UserIDs: []discord.UserID{456},
|
|
|
|
}
|
|
|
|
|
|
|
|
assert(&cmd, map[string]interface{}{
|
2022-10-03 11:48:50 +00:00
|
|
|
"guild_id": []interface{}{"123"},
|
2022-10-03 11:46:49 +00:00
|
|
|
"user_ids": []interface{}{"456"},
|
|
|
|
"presences": false,
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("query_empty", func(t *testing.T) {
|
|
|
|
cmd := RequestGuildMembersCommand{
|
|
|
|
GuildIDs: []discord.GuildID{123},
|
|
|
|
Query: option.NewString(""),
|
|
|
|
}
|
|
|
|
|
|
|
|
assert(&cmd, map[string]interface{}{
|
2022-10-03 11:48:50 +00:00
|
|
|
"guild_id": []interface{}{"123"},
|
2022-10-03 11:46:49 +00:00
|
|
|
"query": "",
|
|
|
|
"limit": float64(0),
|
|
|
|
"presences": false,
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("query_nonempty", func(t *testing.T) {
|
|
|
|
cmd := RequestGuildMembersCommand{
|
|
|
|
GuildIDs: []discord.GuildID{123},
|
|
|
|
Query: option.NewString("abc"),
|
|
|
|
}
|
|
|
|
|
|
|
|
assert(&cmd, map[string]interface{}{
|
2022-10-03 11:48:50 +00:00
|
|
|
"guild_id": []interface{}{"123"},
|
2022-10-03 11:46:49 +00:00
|
|
|
"query": "abc",
|
|
|
|
"limit": float64(0),
|
|
|
|
"presences": false,
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
t.Run("both", func(t *testing.T) {
|
|
|
|
cmd := RequestGuildMembersCommand{
|
|
|
|
GuildIDs: []discord.GuildID{123},
|
|
|
|
UserIDs: []discord.UserID{456},
|
|
|
|
Query: option.NewString("abc"),
|
|
|
|
}
|
|
|
|
|
|
|
|
// Gateway should never be touched when Marshal fails, so we can just
|
|
|
|
// create a zero-value.
|
|
|
|
var gateway ws.Gateway
|
|
|
|
|
|
|
|
err := gateway.Send(context.Background(), &cmd)
|
|
|
|
if err == nil || !strings.Contains(err.Error(), "neither UserIDs nor Query can be filled") {
|
|
|
|
t.Fatal("unexpected error:", err)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|