super-graph/qcode/parse_test.go

146 lines
2.4 KiB
Go
Raw Permalink Normal View History

2019-03-24 14:57:29 +01:00
package qcode
import (
"errors"
"testing"
)
2019-09-05 06:09:56 +02:00
func TestCompile1(t *testing.T) {
2019-10-14 08:51:36 +02:00
qc, _ := NewCompiler(Config{})
qc.AddRole("user", "product", TRConfig{
Query: QueryConfig{
Columns: []string{"id", "Name"},
},
})
2019-06-15 04:17:21 +02:00
2019-10-14 08:51:36 +02:00
_, err := qc.Compile([]byte(`
2019-11-19 06:47:55 +01:00
{ product(id: 15) {
2019-04-20 16:45:12 +02:00
id
name
2019-11-19 06:47:55 +01:00
} }`), "user")
2019-06-15 04:17:21 +02:00
2019-04-20 16:45:12 +02:00
if err != nil {
t.Fatal(err)
}
2019-03-24 14:57:29 +01:00
}
2019-09-05 06:09:56 +02:00
func TestCompile2(t *testing.T) {
2019-10-14 08:51:36 +02:00
qc, _ := NewCompiler(Config{})
qc.AddRole("user", "product", TRConfig{
Query: QueryConfig{
Columns: []string{"ID"},
},
})
2019-09-05 06:09:56 +02:00
2019-10-14 08:51:36 +02:00
_, err := qc.Compile([]byte(`
2019-09-05 06:09:56 +02:00
query { product(id: 15) {
id
name
2019-10-14 08:51:36 +02:00
} }`), "user")
2019-09-05 06:09:56 +02:00
if err != nil {
t.Fatal(err)
}
}
func TestCompile3(t *testing.T) {
2019-10-14 08:51:36 +02:00
qc, _ := NewCompiler(Config{})
qc.AddRole("user", "product", TRConfig{
Query: QueryConfig{
Columns: []string{"ID"},
},
})
2019-09-05 06:09:56 +02:00
2019-10-14 08:51:36 +02:00
_, err := qc.Compile([]byte(`
2019-09-05 06:09:56 +02:00
mutation {
product(id: 15, name: "Test") {
id
name
}
2019-10-14 08:51:36 +02:00
}`), "user")
2019-09-05 06:09:56 +02:00
if err != nil {
t.Fatal(err)
}
}
2019-06-16 21:41:28 +02:00
func TestInvalidCompile1(t *testing.T) {
2019-04-21 01:42:08 +02:00
qcompile, _ := NewCompiler(Config{})
2019-10-14 08:51:36 +02:00
_, err := qcompile.Compile([]byte(`#`), "user")
2019-06-15 04:17:21 +02:00
2019-04-21 01:42:08 +02:00
if err == nil {
t.Fatal(errors.New("expecting an error"))
}
}
2019-06-16 21:41:28 +02:00
func TestInvalidCompile2(t *testing.T) {
qcompile, _ := NewCompiler(Config{})
2019-10-14 08:51:36 +02:00
_, err := qcompile.Compile([]byte(`{u(where:{not:0})}`), "user")
2019-06-16 21:41:28 +02:00
if err == nil {
t.Fatal(errors.New("expecting an error"))
}
}
func TestEmptyCompile(t *testing.T) {
qcompile, _ := NewCompiler(Config{})
2019-10-14 08:51:36 +02:00
_, err := qcompile.Compile([]byte(``), "user")
2019-06-15 04:17:21 +02:00
if err == nil {
t.Fatal(errors.New("expecting an error"))
}
}
2019-06-15 04:17:21 +02:00
var gql = []byte(`
products(
# returns only 30 items
limit: 30,
# starts from item 10, commented out for now
# offset: 10,
# orders the response items by highest price
order_by: { price: desc },
# no duplicate prices returned
distinct: [ price ]
# only items with an id >= 30 and < 30 are returned
where: { id: { AND: { greater_or_equals: 20, lt: 28 } } }) {
id
name
price
2019-06-15 04:17:21 +02:00
}`)
func BenchmarkQCompile(b *testing.B) {
qcompile, _ := NewCompiler(Config{})
b.ResetTimer()
b.ReportAllocs()
for n := 0; n < b.N; n++ {
2019-10-14 08:51:36 +02:00
_, err := qcompile.Compile(gql, "user")
if err != nil {
b.Fatal(err)
}
}
}
func BenchmarkQCompileP(b *testing.B) {
qcompile, _ := NewCompiler(Config{})
b.ResetTimer()
b.ReportAllocs()
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
2019-10-14 08:51:36 +02:00
_, err := qcompile.Compile(gql, "user")
if err != nil {
b.Fatal(err)
}
}
})
}