Hamcha
37645e37f7
All checks were successful
continuous-integration/drone/push Build is passing
Tests now do not require internet access anymore Closes #4
189 lines
5 KiB
Go
189 lines
5 KiB
Go
package mlp_test
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"os"
|
|
"testing"
|
|
|
|
"git.fromouter.space/mcg/draft"
|
|
"git.fromouter.space/mcg/draft/mlp"
|
|
"git.fromouter.space/mcg/draft/mlp/testdata"
|
|
)
|
|
|
|
// TestSet retrieves a set online and generates a couple packs with it
|
|
func TestSet(t *testing.T) {
|
|
// Clean all loaded sets
|
|
mlp.CleanSetCache()
|
|
|
|
prSet, err := mlp.LoadSetHTTP(mlp.SetPremiere)
|
|
if err != nil {
|
|
t.Fatalf("Could not fetch set data: %s", err.Error())
|
|
}
|
|
|
|
pack1 := draft.MakePack(prSet)
|
|
pack2 := draft.MakePack(prSet)
|
|
|
|
// Make sure both packs have the exact number of cards
|
|
if len(pack1) != 12 {
|
|
t.Fatalf("Expected 12 cards in pack 1 but got %d", len(pack1))
|
|
}
|
|
if len(pack2) != 12 {
|
|
t.Fatalf("Expected 12 cards in pack 2 but got %d", len(pack2))
|
|
}
|
|
|
|
t.Logf("Cards in pack 1: %s\n", pack1)
|
|
t.Logf("Cards in pack 2: %s\n", pack2)
|
|
}
|
|
|
|
// TestWrongSet tries to fetch a set that doesn't exist
|
|
func TestWrongSet(t *testing.T) {
|
|
_, err := mlp.LoadSetHTTP("nopenope")
|
|
if err == nil {
|
|
t.Fatalf("Expected an error but didn't get one!")
|
|
}
|
|
}
|
|
|
|
// TestAllLoads tests all the LoadSet* functions
|
|
func TestAllLoads(t *testing.T) {
|
|
// Clean all loaded sets
|
|
mlp.CleanSetCache()
|
|
|
|
// Test LoadSetHTTP
|
|
_, err := mlp.LoadSetHTTP(mlp.SetFriendsForever)
|
|
if err != nil {
|
|
t.Fatalf("[LoadSetHTTP] Could not fetch set data from the internet: %s", err.Error())
|
|
}
|
|
|
|
// Load set from bytes
|
|
_, err = mlp.LoadSetBytes(mlp.SetCelestialSolstice, []byte("{}"))
|
|
if err != nil {
|
|
t.Fatalf("[LoadSetBytes] Could not load set: %s", err.Error())
|
|
}
|
|
|
|
// Load set to memory
|
|
err = mlp.LoadSetData(map[mlp.SetID][]byte{
|
|
mlp.SetRockNRave: []byte("{}"),
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("[LoadSetData] Could not load set: %s", err.Error())
|
|
}
|
|
|
|
// Load set from memory
|
|
_, err = mlp.LoadSetMemory(mlp.SetRockNRave)
|
|
if err != nil {
|
|
t.Fatalf("[LoadSetMemory] Could not load set: %s", err.Error())
|
|
}
|
|
}
|
|
|
|
// TestNotLoadedErr tests that LoadSetMemory fails if set is not cached
|
|
func TestNotLoadedErr(t *testing.T) {
|
|
// Clean all sets from memory first
|
|
mlp.CleanSetCache()
|
|
|
|
// Load set from memory (should fail)
|
|
_, err := mlp.LoadSetMemory(mlp.SetFriendsForever)
|
|
if err == nil {
|
|
t.Fatal("[LoadSetMemory] Set loaded but shouldn't")
|
|
} else if err != mlp.ErrSetNotLoaded {
|
|
t.Fatalf("[LoadSetMemory] Set not loaded but error is not the right one: %s", err.Error())
|
|
}
|
|
|
|
// Actually load set
|
|
err = mlp.LoadSetData(map[mlp.SetID][]byte{
|
|
mlp.SetFriendsForever: []byte("{}"),
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("[LoadSetData] Could not load set: %s", err.Error())
|
|
}
|
|
|
|
// Load set from memory (should succeed)
|
|
_, err = mlp.LoadSetMemory(mlp.SetFriendsForever)
|
|
if err != nil {
|
|
t.Fatalf("[LoadSetMemory] Could not load set: %s", err.Error())
|
|
}
|
|
}
|
|
|
|
// TestLoadCache tests caching on all Load functions that support it
|
|
func TestLoadCache(t *testing.T) {
|
|
// Clean all sets from memory first
|
|
mlp.CleanSetCache()
|
|
|
|
// Load dummy set
|
|
err := mlp.LoadSetData(map[mlp.SetID][]byte{
|
|
mlp.SetFriendsForever: []byte("{}"),
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("[LoadSetData] Could not load set: %s", err.Error())
|
|
}
|
|
|
|
//
|
|
// Try all set loading functions to trigger the cache
|
|
//
|
|
|
|
_, err = mlp.LoadSetMemory(mlp.SetFriendsForever)
|
|
if err != nil {
|
|
t.Fatalf("[LoadSetMemory] Could not load set: %s", err.Error())
|
|
}
|
|
|
|
_, err = mlp.LoadSetBytes(mlp.SetFriendsForever, []byte("THIS SHOULD BE IGNORED"))
|
|
if err != nil {
|
|
t.Fatalf("[LoadSetBytes] Could not load set: %s", err.Error())
|
|
}
|
|
|
|
loadedset, err := mlp.LoadSetHTTP(mlp.SetFriendsForever)
|
|
if err != nil {
|
|
t.Fatalf("[LoadSetHTTP] Could not load set: %s", err.Error())
|
|
}
|
|
|
|
// Check that loaded set via HTTP is the dummy cache and not the real thing
|
|
if len(loadedset.CardList) != 0 {
|
|
t.Fatalf("[LoadSetHTTP] Set not loaded from cache")
|
|
}
|
|
}
|
|
|
|
// TestMalformedJSONLoad tests that LoadSetData/LoadSetBytes return an error when given malformed JSON
|
|
func TestMalformedJSONLoad(t *testing.T) {
|
|
// Clean all sets from memory first
|
|
mlp.CleanSetCache()
|
|
|
|
_, err := mlp.LoadSetBytes(mlp.SetFriendsForever, []byte("THIS SHOULD FAIL"))
|
|
if err == nil {
|
|
t.Fatalf("LoadSetBytes with invalid data succeeded but shouldn't have")
|
|
}
|
|
|
|
err = mlp.LoadSetData(map[mlp.SetID][]byte{
|
|
mlp.SetFriendsForever: []byte("THIS SHOULD FAIL"),
|
|
})
|
|
if err == nil {
|
|
t.Fatalf("LoadSetData with invalid data succeeded but shouldn't have")
|
|
}
|
|
|
|
_, err = mlp.LoadSetHTTP(mlp.SetID("broken"))
|
|
if err == nil {
|
|
t.Fatalf("LoadSetHTTP with invalid JSON succeded but shouldn't have")
|
|
}
|
|
}
|
|
|
|
var testServer *httptest.Server
|
|
|
|
func TestMain(m *testing.M) {
|
|
testServer = httptest.NewServer(http.HandlerFunc(func(res http.ResponseWriter, req *http.Request) {
|
|
switch req.URL.Path {
|
|
case "/nopenope.json":
|
|
// 404
|
|
http.Error(res, "Not found", http.StatusNotFound)
|
|
case "/broken.json":
|
|
// Broken response
|
|
fmt.Fprintf(res, "{{{{")
|
|
case "/pr.json":
|
|
fmt.Fprintf(res, testdata.SetPremiere)
|
|
default:
|
|
fmt.Fprintf(res, testdata.SetFriendForever)
|
|
}
|
|
}))
|
|
mlp.HTTPSource = testServer.URL + "/"
|
|
defer testServer.Close()
|
|
os.Exit(m.Run())
|
|
}
|