1
0
Fork 0
mirror of https://github.com/diamondburned/arikawa.git synced 2024-11-01 12:34:28 +00:00
arikawa/internal/testenv/testenv.go
Cléo Rebert 8f548d2607 go fmt + gci
Signed-off-by: Cléo Rebert <cleo.rebert@gmail.com>
2023-09-19 11:37:24 -07:00

82 lines
1.3 KiB
Go

//go:build !uintonly
// +build !uintonly
package testenv
import (
"errors"
"fmt"
"os"
"strconv"
"sync"
"testing"
"time"
"github.com/diamondburned/arikawa/v3/discord"
)
const PerseveranceTime = 50 * time.Minute
type Env struct {
BotToken string
ChannelID discord.ChannelID
VoiceChID discord.ChannelID
ShardCount int // default 3
}
var (
globalEnv Env
globalErr error
once sync.Once
)
func Must(t *testing.T) Env {
if testing.Short() {
t.Skip("skipping integration test")
}
e, err := GetEnv()
if err != nil {
t.Skip("integration test variables missing")
}
return e
}
func GetEnv() (Env, error) {
once.Do(getEnv)
return globalEnv, globalErr
}
func getEnv() {
token := os.Getenv("BOT_TOKEN")
if token == "" {
globalErr = errors.New("missing $BOT_TOKEN")
return
}
id, err := discord.ParseSnowflake(os.Getenv("CHANNEL_ID"))
if err != nil {
globalErr = fmt.Errorf("invalid $CHANNEL_ID: %w", err)
return
}
vid, err := discord.ParseSnowflake(os.Getenv("VOICE_ID"))
if err != nil {
globalErr = fmt.Errorf("invalid $VOICE_ID: %w", err)
return
}
shardCount := 2
if c, err := strconv.Atoi(os.Getenv("SHARD_COUNT")); err == nil {
shardCount = c
}
globalEnv = Env{
BotToken: token,
ChannelID: discord.ChannelID(id),
VoiceChID: discord.ChannelID(vid),
ShardCount: shardCount,
}
}