moth/cmd/mothd/mothballs_test.go

80 lines
1.6 KiB
Go
Raw Normal View History

2020-08-17 17:43:57 -06:00
package main
import (
2020-08-17 20:33:23 -06:00
"archive/zip"
"fmt"
2020-08-17 17:43:57 -06:00
"testing"
2020-08-17 20:33:23 -06:00
"github.com/spf13/afero"
2020-08-17 17:43:57 -06:00
)
2020-08-17 20:33:23 -06:00
var testFiles = []struct {
Name, Body string
}{
{"puzzles.txt", "1"},
2020-08-19 18:01:21 -06:00
{"answers.txt", "1 answer123\n1 answer456\n"},
2020-08-17 20:33:23 -06:00
{"content/1/puzzle.json", `{"name": "moo"}`},
2020-08-19 18:01:21 -06:00
{"content/1/moo.txt", `moo`},
2020-08-17 20:33:23 -06:00
}
func (m *Mothballs) createMothball(cat string) {
f, _ := m.Create(fmt.Sprintf("%s.mb", cat))
defer f.Close()
w := zip.NewWriter(f)
defer w.Close()
for _, file := range testFiles {
of, _ := w.Create(file.Name)
of.Write([]byte(file.Body))
}
}
2020-08-19 18:01:21 -06:00
func NewTestMothballs() *Mothballs {
2020-08-17 20:33:23 -06:00
m := NewMothballs(new(afero.MemMapFs))
2020-08-19 18:01:21 -06:00
m.createMothball("pategory")
2020-08-18 17:04:23 -06:00
m.refresh()
2020-08-19 18:01:21 -06:00
return m
}
func TestMothballs(t *testing.T) {
m := NewTestMothballs()
if _, ok := m.categories["pategory"]; !ok {
2020-08-17 20:33:23 -06:00
t.Error("Didn't create a new category")
}
inv := m.Inventory()
if len(inv) != 1 {
t.Error("Wrong inventory size:", inv)
}
for _, cat := range inv {
for _, points := range cat.Puzzles {
f, _, err := m.Open(cat.Name, points, "puzzle.json")
if err != nil {
t.Error(cat.Name, err)
continue
}
f.Close()
}
}
2020-08-19 18:01:21 -06:00
if err := m.CheckAnswer("pategory", 1, "answer"); err == nil {
t.Error("Wrong answer marked right")
}
if err := m.CheckAnswer("pategory", 1, "answer123"); err != nil {
t.Error("Right answer marked wrong", err)
}
if err := m.CheckAnswer("pategory", 1, "answer456"); err != nil {
t.Error("Right answer marked wrong", err)
}
2020-08-17 20:33:23 -06:00
m.createMothball("test2")
2020-08-19 18:01:21 -06:00
m.Fs.Remove("pategory.mb")
2020-08-18 17:04:23 -06:00
m.refresh()
2020-08-17 20:33:23 -06:00
inv = m.Inventory()
if len(inv) != 1 {
t.Error("Deleted mothball is still around", inv)
}
2020-08-19 18:01:21 -06:00
2020-08-17 17:43:57 -06:00
}