From b7e6f6cf01269b7df30aa5eb23a060d4ec69d716 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=AEittaG=20ordnasselA?= Date: Fri, 31 May 2019 15:13:13 +0200 Subject: [PATCH] Add tests to mlp --- mlp/booster_test.go | 118 ++++++++++++++++++++++++++++++++++++++++++++ mlp/i8pcube_test.go | 4 +- mlp/royalrares.go | 20 ++++---- mlp/set.go | 6 ++- mlp/set_test.go | 41 +++++++++++++++ 5 files changed, 176 insertions(+), 13 deletions(-) create mode 100644 mlp/booster_test.go create mode 100644 mlp/set_test.go diff --git a/mlp/booster_test.go b/mlp/booster_test.go new file mode 100644 index 0000000..25b1a0b --- /dev/null +++ b/mlp/booster_test.go @@ -0,0 +1,118 @@ +package mlp_test + +import ( + "fmt" + "testing" + + "git.fromouter.space/mcg/draft" + "git.fromouter.space/mcg/draft/mlp" +) + +// TestAlternates tries to get alternates (SR/UR/RR) +// This might require a while since it needs to generate MANY packs! +// This test *requires* an internet connection! +func TestAlternates(t *testing.T) { + // Load Premiere/CN as they have their own UR ratios + prSet, err := mlp.LoadSetHTTP(mlp.SetPremiere) + if err != nil { + t.Errorf("Could not fetch set data: %s", err.Error()) + } + + cnSet, err := mlp.LoadSetHTTP(mlp.SetCanterlotNights) + if err != nil { + t.Errorf("Could not fetch set data: %s", err.Error()) + } + + // Load set with Royal rares + eoSet, err := mlp.LoadSetHTTP(mlp.SetEquestrialOdysseys) + if err != nil { + t.Errorf("Could not fetch set data: %s", err.Error()) + } + + // Find all Premiere URs + prURs := []string{} + for _, card := range prSet.Cards { + if card.Rarity == mlp.RarityUltraRare { + prURs = append(prURs, card.ID) + } + } + + // Find all CN URs + cnURs := []string{} + for _, card := range cnSet.Cards { + if card.Rarity == mlp.RarityUltraRare { + cnURs = append(cnURs, card.ID) + } + } + + // Get some PR packs and search for URs + prurfound := false + for i := 0; i < 1000; i++ { + pack := draft.MakePack(prSet) + // Check for ultra rares + for _, id := range prURs { + if pack[7].ID == id { + prurfound = true + break + } + } + if prurfound { + fmt.Printf("PR Ultra Rare found after %d packs\n", i) + break + } + } + + if !prurfound { + t.Errorf("No PR UR found after 1000 packs") + } + + // Get some CN packs and search for URs + cnurfound := false + for i := 0; i < 1000; i++ { + pack := draft.MakePack(cnSet) + // Check for ultra rares + for _, id := range cnURs { + if pack[7].ID == id { + cnurfound = true + break + } + } + if cnurfound { + fmt.Printf("CN Ultra Rare found after %d packs\n", i) + break + } + } + + if !cnurfound { + t.Errorf("No CN UR found after 1000 packs") + } + + eorrfound := false + for i := 0; i < 100000; i++ { + pack := draft.MakePack(eoSet) + // Check for royal rares + if pack[6].ID == "eo207/rr1" || pack[6].ID == "eo208/rr2" { + fmt.Printf("EO Royal Rare found after %d packs\n", i) + eorrfound = true + break + } + } + + if !eorrfound { + t.Errorf("No EO RR found after 100k packs") + } +} + +// TestPackFixedSets tries to get packs a set that isn't a true set +// This should result in empty packs +func TestPackFixedSets(t *testing.T) { + set, err := mlp.LoadSet(mlp.SetRockNRave, []byte("{}")) + if err != nil { + t.Errorf("Could not load set: %s", err.Error()) + } + + pack := draft.MakePack(set) + if len(pack) != 0 { + t.Errorf("Expected an empty pack but got %d cards", len(pack)) + } +} diff --git a/mlp/i8pcube_test.go b/mlp/i8pcube_test.go index 6b19d22..d9ba9d6 100644 --- a/mlp/i8pcube_test.go +++ b/mlp/i8pcube_test.go @@ -18,8 +18,8 @@ func TestDraftI8PCube(t *testing.T) { mlp.I8PTypeWhite: mockCards("w1", "w2", "w3"), mlp.I8PTypeYellow: mockCards("y1", "y2", "y3"), mlp.I8PTypeNone: mockCards("n1", "n2", "n3"), - mlp.I8PTypeMulti: mockCards("m1", "m2", "m3", "m4"), - mlp.I8PTypeEntry: mockCards("e1", "e2", "e3", "e4"), + mlp.I8PTypeMulti: mockCards("m1", "m2", "m3", "m4", "m5"), + mlp.I8PTypeEntry: mockCards("e1", "e2", "e3", "e4", "e5"), mlp.I8PTypeProblem: mockCards("P1", "P2"), } cube := mlp.MakeI8PCube(pool) diff --git a/mlp/royalrares.go b/mlp/royalrares.go index 88ce95c..4c7fa55 100644 --- a/mlp/royalrares.go +++ b/mlp/royalrares.go @@ -6,25 +6,25 @@ import "git.fromouter.space/mcg/draft" var royalRares = map[SetID][]draft.Card{ SetEquestrialOdysseys: { - draft.Card{ID: "eo207"}, // Discord, Wrathful - draft.Card{ID: "eo208"}, // Pinkie Pie, Remix Master + draft.Card{ID: "eo207/rr1"}, // Discord, Wrathful + draft.Card{ID: "eo208/rr2"}, // Pinkie Pie, Remix Master }, SetHighMagic: { - draft.Card{ID: "hm149"}, // Trixie, Highest Level Unicorn - draft.Card{ID: "hm147"}, // Fluttershy, Saddle Rager - draft.Card{ID: "hm145"}, // Rarity, Radiance + draft.Card{ID: "hm149/rr1"}, // Trixie, Highest Level Unicorn + draft.Card{ID: "hm147/rr2"}, // Fluttershy, Saddle Rager + draft.Card{ID: "hm145/rr3"}, // Rarity, Radiance }, SetMarksInTime: { - draft.Card{ID: "mt139"}, // Rainbow Dash, One Winged Warrior - draft.Card{ID: "mt141"}, // Princess Twilight Sparkle, Time Patrol + draft.Card{ID: "mt139/rr1"}, // Rainbow Dash, One Winged Warrior + draft.Card{ID: "mt141/rr2"}, // Princess Twilight Sparkle, Time Patrol }, SetDefendersOfEquestria: { - draft.Card{ID: "de135"}, // Applejack, Captain of the Seven Seas + draft.Card{ID: "de135/rr1"}, // Applejack, Captain of the Seven Seas }, SetSeaquestriaBeyond: { - draft.Card{ID: "sb135"}, // Tempest Shadow, Stormcaller + draft.Card{ID: "sb135/rr1"}, // Tempest Shadow, Stormcaller }, SetFriendsForever: { - draft.Card{ID: "ff136"}, // Mistmane, Pillar of Beauty + draft.Card{ID: "ff136/rr1"}, // Mistmane, Pillar of Beauty }, } diff --git a/mlp/set.go b/mlp/set.go index d196f8e..e1400b4 100644 --- a/mlp/set.go +++ b/mlp/set.go @@ -2,6 +2,7 @@ package mlp import ( "encoding/json" + "fmt" "io/ioutil" "net/http" "strings" @@ -59,7 +60,10 @@ func LoadSetHTTP(id SetID) (*Set, error) { setid := strings.ToLower(string(id)) resp, err := http.Get("https://mcg.zyg.ovh/setdata/" + setid + ".json") - if err != nil { + if err != nil || resp.StatusCode != 200 { + if err == nil { + err = fmt.Errorf("server returned non-200 response code (%d)", resp.StatusCode) + } return nil, err } diff --git a/mlp/set_test.go b/mlp/set_test.go new file mode 100644 index 0000000..68a46d0 --- /dev/null +++ b/mlp/set_test.go @@ -0,0 +1,41 @@ +package mlp_test + +import ( + "fmt" + "testing" + + "git.fromouter.space/mcg/draft" + "git.fromouter.space/mcg/draft/mlp" +) + +// TestSet retrieves a set online and generates a couple packs with it +// This test *requires* an internet connection! +func TestSet(t *testing.T) { + deSet, err := mlp.LoadSetHTTP(mlp.SetDefendersOfEquestria) + if err != nil { + t.Errorf("Could not fetch set data: %s", err.Error()) + } + + pack1 := draft.MakePack(deSet) + pack2 := draft.MakePack(deSet) + + // Make sure both packs have the exact number of cards + if len(pack1) != 12 { + t.Errorf("Expected 12 cards in pack 1 but got %d", len(pack1)) + } + if len(pack2) != 12 { + t.Errorf("Expected 12 cards in pack 2 but got %d", len(pack2)) + } + + fmt.Printf("Cards in pack 1: %s\n", pack1) + fmt.Printf("Cards in pack 2: %s\n", pack2) +} + +// TestWrongSet tries to fetch a set that doesn't exist +// This test *requires* an internet connection! +func TestWrongSet(t *testing.T) { + _, err := mlp.LoadSetHTTP("nopenope") + if err == nil { + t.Errorf("Expected an error but didn't get one!") + } +}