mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-13 23:16:45 +00:00
* set limiter to first level mock data list and updated unit tests * address nested slices length limit * minor fix recording file and update unit tests * minor updates on unit tests * re-record mock files and minor fix on the unit tests ti adapt the mock data change * improve http recording limit value and fix issues with mock data in binance * added MockDataSliceLimit in request items and resolve minor unit test issues * resolve missed conflict * rename mock variables, resolve unit test issues, and other updates * minor fix to CheckJSON and update unit tests * minor unit test fix * further optimization on mock CheckJSON method, unit tests, and re-record poloniex * common and recording unit tests fix * minor linter issues fix * unit tests format fix * fix miscellaneous error * unit tests fix and minor docs update * re-record and reduce mock file size * indentation fix * minor assertion test fix * reverted log.Printf line in live testing * rename variables * update NewVCRServer unit test * replace string comparison with *net.OpError check * restructur net error test * exchanges/mock: Remove redundant error assertion message in TestNewVCRServer --------- Co-authored-by: Adrian Gallagher <adrian.gallagher@thrasher.io>
319 lines
7.9 KiB
Go
319 lines
7.9 KiB
Go
package slack
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/thrasher-corp/gocryptotrader/communications/base"
|
|
"github.com/thrasher-corp/gocryptotrader/config"
|
|
"github.com/thrasher-corp/gocryptotrader/encoding/json"
|
|
)
|
|
|
|
type group struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
Members []string `json:"members"`
|
|
}
|
|
|
|
func TestSetup(t *testing.T) {
|
|
t.Parallel()
|
|
var s Slack
|
|
cfg := &config.Config{Communications: base.CommunicationsConfig{}}
|
|
commsCfg := cfg.GetCommunicationsConfig()
|
|
s.Setup(&commsCfg)
|
|
}
|
|
|
|
func TestConnect(t *testing.T) {
|
|
t.Parallel()
|
|
var s Slack
|
|
if err := s.Connect(); err == nil {
|
|
t.Error("slack Connect() error cannot be nil")
|
|
}
|
|
}
|
|
|
|
func TestPushEvent(t *testing.T) {
|
|
t.Parallel()
|
|
var s Slack
|
|
err := s.PushEvent(base.Event{})
|
|
if err == nil {
|
|
t.Error("slack PushEvent() error cannot be nil")
|
|
}
|
|
}
|
|
|
|
func TestBuildURL(t *testing.T) {
|
|
t.Parallel()
|
|
var s Slack
|
|
if v := s.BuildURL("lol123"); v != "https://slack.com/api/rtm.start?token=lol123" {
|
|
t.Error("slack BuildURL() error")
|
|
}
|
|
}
|
|
|
|
func TestGetChannelsString(t *testing.T) {
|
|
t.Parallel()
|
|
var s Slack
|
|
s.Details.Channels = append(s.Details.Channels, struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
NameNormalized string `json:"name_normalized"`
|
|
PreviousNames []string `json:"previous_names"`
|
|
}{
|
|
NameNormalized: "General",
|
|
})
|
|
|
|
chans := s.GetChannelsString()
|
|
testpassed := false
|
|
for i := range chans {
|
|
if chans[i] == "General" {
|
|
testpassed = true
|
|
}
|
|
}
|
|
if !testpassed {
|
|
t.Error("slack GetChannelsString() error")
|
|
}
|
|
}
|
|
|
|
func TestGetUsernameByID(t *testing.T) {
|
|
t.Parallel()
|
|
var s Slack
|
|
username := s.GetUsernameByID("1337")
|
|
if username != "" {
|
|
t.Error("slack GetUsernameByID() error")
|
|
}
|
|
|
|
s.Details.Users = append(s.Details.Users, struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
TeamID string `json:"team_id"`
|
|
}{
|
|
ID: "1337",
|
|
Name: "cranktakular",
|
|
})
|
|
|
|
username = s.GetUsernameByID("1337")
|
|
if username != "cranktakular" {
|
|
t.Error("slack GetUsernameByID() error")
|
|
}
|
|
}
|
|
|
|
func TestGetIDByName(t *testing.T) {
|
|
t.Parallel()
|
|
var s Slack
|
|
id, err := s.GetIDByName("batman")
|
|
require.Error(t, err, "GetIDByName must return an error for non-existent name")
|
|
assert.Empty(t, id, "GetIDByName should return an empty string for non-existent name")
|
|
s.Details.Groups = append(s.Details.Groups, group{
|
|
Name: "this is a group",
|
|
ID: "210314",
|
|
})
|
|
id, err = s.GetIDByName("this is a group")
|
|
|
|
require.NoError(t, err, "GetIDByName must not return an error for existing name")
|
|
assert.Equal(t, "210314", id, "GetIDByName should return the correct ID for existing name")
|
|
}
|
|
|
|
func TestGetGroupIDByName(t *testing.T) {
|
|
t.Parallel()
|
|
var s Slack
|
|
id, err := s.GetGroupIDByName("batman")
|
|
require.Error(t, err, "GetGroupIDByName must return an error for non-existent group name")
|
|
assert.Empty(t, id, "GetGroupIDByName should return an empty string for non-existent group name")
|
|
|
|
s.Details.Groups = append(s.Details.Groups, group{
|
|
Name: "another group",
|
|
ID: "11223344",
|
|
})
|
|
id, err = s.GetGroupIDByName("another group")
|
|
require.NoError(t, err, "GetGroupIDByName must not return an error for existing group name")
|
|
assert.Equal(t, "11223344", id, "GetGroupIDByName should return the correct ID for existing group name")
|
|
}
|
|
|
|
func TestGetChannelIDByName(t *testing.T) {
|
|
t.Parallel()
|
|
var s Slack
|
|
id, err := s.GetChannelIDByName("1337")
|
|
require.Error(t, err, "GetChannelIDByName must return an error for non-existent channel name")
|
|
assert.Empty(t, id, "GetChannelIDByName should return an empty string for non-existent channel name")
|
|
|
|
s.Details.Channels = append(s.Details.Channels, struct {
|
|
ID string `json:"id"`
|
|
Name string `json:"name"`
|
|
NameNormalized string `json:"name_normalized"`
|
|
PreviousNames []string `json:"previous_names"`
|
|
}{
|
|
ID: "2048",
|
|
Name: "Slack Test",
|
|
})
|
|
|
|
id, err = s.GetChannelIDByName("Slack Test")
|
|
require.NoError(t, err, "GetChannelIDByName must not return an error for existing channel name")
|
|
assert.Equal(t, "2048", id, "GetChannelIDByName should return the correct ID for existing channel name")
|
|
}
|
|
|
|
func TestGetUsersInGroup(t *testing.T) {
|
|
t.Parallel()
|
|
var s Slack
|
|
assert.Empty(t, s.GetUsersInGroup("supergroup"), "GetUsersInGroup should return an empty slice")
|
|
|
|
s.Details.Groups = append(s.Details.Groups, group{
|
|
Name: "three guys",
|
|
ID: "3",
|
|
Members: []string{"Guy one", "Guy two", "Guy three"},
|
|
})
|
|
|
|
assert.Len(t, s.GetUsersInGroup("three guys"), 3)
|
|
}
|
|
|
|
func TestNewConnection(t *testing.T) {
|
|
t.Parallel()
|
|
var s Slack
|
|
if err := s.NewConnection(); err == nil {
|
|
t.Error("slack NewConnection() error")
|
|
}
|
|
}
|
|
|
|
func TestWebsocketConnect(t *testing.T) {
|
|
t.Parallel()
|
|
var s Slack
|
|
if err := s.WebsocketConnect(); err == nil {
|
|
t.Error("slack WebsocketConnect() error")
|
|
}
|
|
}
|
|
|
|
func TestHandlePresenceChange(t *testing.T) {
|
|
t.Parallel()
|
|
var s Slack
|
|
var presChange PresenceChange
|
|
presChange.User = "1337"
|
|
presChange.Presence = "Present"
|
|
|
|
err := s.handlePresenceChange([]byte(`{"malformedjson}`))
|
|
if err == nil {
|
|
t.Error("slack handlePresenceChange(), unmarshalled malformed json")
|
|
}
|
|
|
|
data, err := json.Marshal(presChange)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
err = s.handlePresenceChange(data)
|
|
if err != nil {
|
|
t.Errorf("slack handlePresenceChange() Error: %s", err)
|
|
}
|
|
}
|
|
|
|
func TestHandleMessageResponse(t *testing.T) {
|
|
t.Parallel()
|
|
var s Slack
|
|
var data WebsocketResponse
|
|
data.ReplyTo = 1
|
|
|
|
err := s.handleMessageResponse(nil, data)
|
|
if err.Error() != "reply to is != 0" {
|
|
t.Errorf("slack handleMessageResponse(), Incorrect Error: %s",
|
|
err)
|
|
}
|
|
|
|
data.ReplyTo = 0
|
|
|
|
err = s.handleMessageResponse([]byte(`{"malformedjson}`), data)
|
|
if err == nil {
|
|
t.Error("slack handleMessageResponse(), unmarshalled malformed json")
|
|
}
|
|
|
|
var msg Message
|
|
msg.User = "1337"
|
|
msg.Text = "Hello World!"
|
|
resp, err := json.Marshal(msg)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
err = s.handleMessageResponse(resp, data)
|
|
if err != nil {
|
|
t.Error("slack HandleMessage(), Sent message through nil websocket")
|
|
}
|
|
|
|
msg.Text = "!notacommand"
|
|
resp, err = json.Marshal(msg)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
err = s.handleMessageResponse(resp, data)
|
|
if err == nil {
|
|
t.Errorf("slack handleMessageResponse() Expected error")
|
|
}
|
|
}
|
|
|
|
func TestHandleErrorResponse(t *testing.T) {
|
|
t.Parallel()
|
|
var s Slack
|
|
var data WebsocketResponse
|
|
err := s.handleErrorResponse(data)
|
|
if err == nil {
|
|
t.Error("slack handleErrorResponse() Ignored strange input")
|
|
}
|
|
|
|
data.Error.Msg = "Socket URL has expired"
|
|
err = s.handleErrorResponse(data)
|
|
if err == nil {
|
|
t.Error("slack handleErrorResponse() Didn't error on nil websocket")
|
|
}
|
|
}
|
|
|
|
func TestHandleHelloResponse(t *testing.T) {
|
|
t.Parallel()
|
|
var s Slack
|
|
s.handleHelloResponse()
|
|
}
|
|
|
|
func TestHandleReconnectResponse(t *testing.T) {
|
|
t.Parallel()
|
|
var s Slack
|
|
err := s.handleReconnectResponse([]byte(`{"malformedjson}`))
|
|
assert.Error(t, err, "handleReconnectResponse should error on malformed JSON")
|
|
|
|
testURL := struct {
|
|
URL string `json:"url"`
|
|
}{
|
|
URL: "https://www.thrasher.io",
|
|
}
|
|
|
|
data, err := json.Marshal(testURL)
|
|
require.NoError(t, err, "Marshal must not error")
|
|
|
|
err = s.handleReconnectResponse(data)
|
|
require.NoError(t, err, "handleReconnectResponse must not error")
|
|
assert.Equal(t, "https://www.thrasher.io", s.ReconnectURL)
|
|
}
|
|
|
|
func TestWebsocketSend(t *testing.T) {
|
|
t.Parallel()
|
|
var s Slack
|
|
err := s.WebsocketSend("test", "Hello World!")
|
|
if err == nil {
|
|
t.Error("slack WebsocketSend(), Sent message through nil websocket")
|
|
}
|
|
}
|
|
|
|
func TestHandleMessage(t *testing.T) {
|
|
t.Parallel()
|
|
var s Slack
|
|
msg := &Message{}
|
|
err := s.HandleMessage(msg)
|
|
if err == nil {
|
|
t.Error("slack HandleMessage(), Sent message through nil websocket")
|
|
}
|
|
msg.Text = cmdStatus
|
|
err = s.HandleMessage(msg)
|
|
if err == nil {
|
|
t.Error("slack HandleMessage(), Sent message through nil websocket")
|
|
}
|
|
msg.Text = cmdHelp
|
|
err = s.HandleMessage(msg)
|
|
if err == nil {
|
|
t.Error("slack HandleMessage(), Sent message through nil websocket")
|
|
}
|
|
}
|