|
@@ -0,0 +1,173 @@
|
|
|
+package discordgo_test
|
|
|
+
|
|
|
+import (
|
|
|
+ "os"
|
|
|
+ "runtime"
|
|
|
+ "testing"
|
|
|
+ "time"
|
|
|
+
|
|
|
+ . "github.com/bwmarrin/discordgo"
|
|
|
+)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+var (
|
|
|
+ dg *Session
|
|
|
+
|
|
|
+ envToken string = os.Getenv("DG_TOKEN")
|
|
|
+ envUsername string = os.Getenv("DG_USERNAME")
|
|
|
+ envPassword string = os.Getenv("DG_PASSWORD")
|
|
|
+ envGuild string = os.Getenv("DG_GUILD")
|
|
|
+ envChannel string = os.Getenv("DG_CHANNEL")
|
|
|
+ envUser string = os.Getenv("DG_USER")
|
|
|
+ envAdmin string = os.Getenv("DG_ADMIN")
|
|
|
+)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+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()
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func isConnected() bool {
|
|
|
+
|
|
|
+ if dg == nil {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+
|
|
|
+ if dg.Token == "" {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if !waitBoolEqual(10*time.Second, &dg.DataReady, true) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+
|
|
|
+ return true
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func TestNew(t *testing.T) {
|
|
|
+
|
|
|
+ _, err := New()
|
|
|
+ if err != nil {
|
|
|
+ t.Errorf("New() returned error: %+v", err)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func TestInvalidToken(t *testing.T) {
|
|
|
+
|
|
|
+ _, err := New("asjkldhflkjasdh")
|
|
|
+ if err == nil {
|
|
|
+ t.Errorf("New(InvalidToken) returned nil error.")
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func TestInvalidEmailPass(t *testing.T) {
|
|
|
+
|
|
|
+ _, err := New("invalidemail", "invalidpassword")
|
|
|
+ if err == nil {
|
|
|
+ t.Errorf("New(InvalidEmail, InvalidPass) returned nil error.")
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+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.")
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+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
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+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
|
|
|
+
|
|
|
+}
|