From 806c9ae39176b15d0a95c570201075f2e5b328bc Mon Sep 17 00:00:00 2001 From: Bruce Marriner Date: Mon, 11 Jan 2016 12:02:59 -0600 Subject: [PATCH] Make main folder a cluttered mess in the name of idiomatic. --- discordgo_test.go | 173 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 discordgo_test.go diff --git a/discordgo_test.go b/discordgo_test.go new file mode 100644 index 0000000..3b0acb1 --- /dev/null +++ b/discordgo_test.go @@ -0,0 +1,173 @@ +package discordgo_test + +import ( + "os" + "runtime" + "testing" + "time" + + . "github.com/bwmarrin/discordgo" +) + +////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////// VARS NEEDED FOR TESTING +var ( + dg *Session // Stores global discordgo session + + envToken string = os.Getenv("DG_TOKEN") // Token to use when authenticating + envUsername string = os.Getenv("DG_USERNAME") // Username to use when authenticating + envPassword string = os.Getenv("DG_PASSWORD") // Password to use when authenticating + envGuild string = os.Getenv("DG_GUILD") // Guild ID to use for tests + envChannel string = os.Getenv("DG_CHANNEL") // Channel ID to use for tests + envUser string = os.Getenv("DG_USER") // User ID to use for tests + envAdmin string = os.Getenv("DG_ADMIN") // User ID of admin user to use for tests +) + +////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////// HELPER FUNCTIONS USED FOR TESTING + +// This waits x time for the check bool to be the want bool +func waitBoolEqual(timeout time.Duration, check *bool, want bool) bool { + + start := time.Now() + for { + if *check == want { + return true + } + + if time.Since(start) > timeout { + return false + } + + runtime.Gosched() + } +} + +// Checks if we're connected to Discord +func isConnected() bool { + + if dg == nil { + return false + } + + if dg.Token == "" { + return false + } + + // Need a way to see if the ws connection is nil + + if !waitBoolEqual(10*time.Second, &dg.DataReady, true) { + return false + } + + return true +} + +////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////// START OF TESTS + +// TestNew tests the New() function without any arguments. This should return +// a valid Session{} struct and no errors. +func TestNew(t *testing.T) { + + _, err := New() + if err != nil { + t.Errorf("New() returned error: %+v", err) + } +} + +// TestInvalidToken tests the New() function with an invalid token +func TestInvalidToken(t *testing.T) { + + _, err := New("asjkldhflkjasdh") + if err == nil { + t.Errorf("New(InvalidToken) returned nil error.") + } + +} + +// TestInvalidUserPass tests the New() function with an invalid Email and Pass +func TestInvalidEmailPass(t *testing.T) { + + _, err := New("invalidemail", "invalidpassword") + if err == nil { + t.Errorf("New(InvalidEmail, InvalidPass) returned nil error.") + } + +} + +// TestInvalidPass tests the New() function with an invalid Password +func TestInvalidPass(t *testing.T) { + + if envUsername == "" { + t.Skip("Skipping New(username,InvalidPass), DG_USERNAME not set") + return + } + _, err := New(envUsername, "invalidpassword") + if err == nil { + t.Errorf("New(Email, InvalidPass) returned nil error.") + } +} + +// TestNewUserPass tests the New() function with a username and password. +// This should return a valid Session{}, a valid Session.Token, and open +// a websocket connection to Discord. +func TestNewUserPass(t *testing.T) { + + if envUsername == "" || envPassword == "" { + t.Skip("Skipping New(username,password), DG_USERNAME or DG_PASSWORD not set") + return + } + + d, err := New(envUsername, envPassword) + if err != nil { + t.Fatalf("New(user,pass) returned error: %+v", err) + } + + if d == nil { + t.Fatal("New(user,pass), d is nil, should be Session{}") + } + + if d.Token == "" { + t.Fatal("New(user,pass), d.Token is empty, should be a valid Token.") + } + + if !waitBoolEqual(10*time.Second, &d.DataReady, true) { + t.Fatal("New(user,pass), d.DataReady is false after 10 seconds. Should be true.") + } + + t.Log("Successfully connected to Discord via New(user,pass).") + dg = d + + // Not testing yet. +} + +// TestNewToken tests the New() function with a Token. This should return +// the same as the TestNewUserPass function. +func TestNewToken(t *testing.T) { + + if envToken == "" { + t.Skip("Skipping New(token), DG_TOKEN not set") + } + + d, err := New(envToken) + if err != nil { + t.Fatalf("New(envToken) returned error: %+v", err) + } + + if d == nil { + t.Fatal("New(envToken), d is nil, should be Session{}") + } + + if d.Token == "" { + t.Fatal("New(envToken), d.Token is empty, should be a valid Token.") + } + + if !waitBoolEqual(10*time.Second, &d.DataReady, true) { + t.Fatal("New(envToken), d.DataReady is false after 10 seconds. Should be true.") + } + + t.Log("Successfully connected to Discord via New(token).") + dg = d + +}