forked from cerc-io/ipld-eth-server
* Add graphql server * Update Makefile * Update log_filters constraint * Add GetLogFilter to repo * Update travis (use Makefile, go fmt, go vet) * Add logFilter schema and resolvers * Add GetWatchedEvent to watched_events_repo * Add watchedEventLog schema and resolvers
76 lines
1.5 KiB
Go
76 lines
1.5 KiB
Go
package tests
|
|
|
|
import (
|
|
"os"
|
|
"reflect"
|
|
"sort"
|
|
"testing"
|
|
|
|
"encoding/json"
|
|
|
|
"github.com/neelance/graphql-go/errors"
|
|
"github.com/neelance/graphql-go/internal/query"
|
|
"github.com/neelance/graphql-go/internal/schema"
|
|
"github.com/neelance/graphql-go/internal/validation"
|
|
)
|
|
|
|
type Test struct {
|
|
Name string
|
|
Rule string
|
|
Schema int
|
|
Query string
|
|
Errors []*errors.QueryError
|
|
}
|
|
|
|
func TestAll(t *testing.T) {
|
|
f, err := os.Open("testdata/tests.json")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
var testData struct {
|
|
Schemas []string
|
|
Tests []*Test
|
|
}
|
|
if err := json.NewDecoder(f).Decode(&testData); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
schemas := make([]*schema.Schema, len(testData.Schemas))
|
|
for i, schemaStr := range testData.Schemas {
|
|
schemas[i] = schema.New()
|
|
if err := schemas[i].Parse(schemaStr); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
for _, test := range testData.Tests {
|
|
t.Run(test.Name, func(t *testing.T) {
|
|
d, err := query.Parse(test.Query)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
errs := validation.Validate(schemas[test.Schema], d)
|
|
got := []*errors.QueryError{}
|
|
for _, err := range errs {
|
|
if err.Rule == test.Rule {
|
|
err.Rule = ""
|
|
got = append(got, err)
|
|
}
|
|
}
|
|
sortLocations(test.Errors)
|
|
sortLocations(got)
|
|
if !reflect.DeepEqual(test.Errors, got) {
|
|
t.Errorf("wrong errors\nexpected: %v\ngot: %v", test.Errors, got)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func sortLocations(errs []*errors.QueryError) {
|
|
for _, err := range errs {
|
|
locs := err.Locations
|
|
sort.Slice(locs, func(i, j int) bool { return locs[i].Before(locs[j]) })
|
|
}
|
|
}
|