mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-08-28 10:54:59 +00:00
This commit refactors the query package tests to use the standard library testing package instead of goconvey. Goconvey is now completely removed from the repository.
157 lines
5.2 KiB
Go
157 lines
5.2 KiB
Go
package query_test
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
"github.com/davecgh/go-spew/spew"
|
|
"github.com/umbel/pilosa/query"
|
|
)
|
|
|
|
// Ensure the parser can parse a get() query.
|
|
func TestParser_Parse_Get(t *testing.T) {
|
|
if q, err := query.Parse(MustLex("get(10)")); err != nil {
|
|
t.Fatal(err)
|
|
} else if q.Operation != "get" {
|
|
t.Fatalf("unexpected operation: %q", q.Operation)
|
|
} else if !reflect.DeepEqual(q.Args, map[string]interface{}{
|
|
"id": uint64(10),
|
|
"frame": "general",
|
|
}) {
|
|
t.Fatalf("unexpected args:\n\n%s", spew.Sprint(q.Args))
|
|
}
|
|
}
|
|
|
|
// Ensure the parser can parse a get() query with a keyword.
|
|
func TestParser_Parse_Get_Keyword(t *testing.T) {
|
|
if q, err := query.Parse(MustLex("get(id=10)")); err != nil {
|
|
t.Fatal(err)
|
|
} else if q.Operation != "get" {
|
|
t.Fatalf("unexpected operation: %q", q.Operation)
|
|
} else if !reflect.DeepEqual(q.Args, map[string]interface{}{"id": uint64(10), "frame": "general"}) {
|
|
t.Fatalf("unexpected args:\n\n%s", spew.Sprint(q.Args))
|
|
}
|
|
}
|
|
|
|
// Ensure the parser can parse a get() query with a keyword.
|
|
func TestParser_Parse_Get_MultiKeyword(t *testing.T) {
|
|
if q, err := query.Parse(MustLex("get(id=10, frame=brands)")); err != nil {
|
|
t.Fatal(err)
|
|
} else if q.Operation != "get" {
|
|
t.Fatalf("unexpected operation: %q", q.Operation)
|
|
} else if !reflect.DeepEqual(q.Args, map[string]interface{}{"id": uint64(10), "frame": "brands"}) {
|
|
t.Fatalf("unexpected args:\n\n%s", spew.Sprint(q.Args))
|
|
}
|
|
}
|
|
|
|
// Ensure the parser can parse a clear() query.
|
|
func TestParser_Parse_Clear(t *testing.T) {
|
|
if q, err := query.Parse(MustLex("clear(10, general, 0, 20)")); err != nil {
|
|
t.Fatal(err)
|
|
} else if q.Operation != "clear" {
|
|
t.Fatalf("unexpected operation: %q", q.Operation)
|
|
} else if !reflect.DeepEqual(q.Args, map[string]interface{}{
|
|
"id": uint64(10),
|
|
"frame": "general",
|
|
"filter": uint64(0),
|
|
"profile_id": uint64(20),
|
|
}) {
|
|
t.Fatalf("unexpected args:\n\n%s", spew.Sprint(q.Args))
|
|
}
|
|
}
|
|
|
|
// Ensure the parser can parse a set() query.
|
|
func TestParser_Parse_Set(t *testing.T) {
|
|
if q, err := query.Parse(MustLex("set(10, general, 0, 20)")); err != nil {
|
|
t.Fatal(err)
|
|
} else if q.Operation != "set" {
|
|
t.Fatalf("unexpected operation: %q", q.Operation)
|
|
} else if !reflect.DeepEqual(q.Args, map[string]interface{}{
|
|
"id": uint64(10),
|
|
"frame": "general",
|
|
"filter": uint64(0),
|
|
"profile_id": uint64(20),
|
|
}) {
|
|
t.Fatalf("unexpected args:\n\n%s", spew.Sprint(q.Args))
|
|
}
|
|
}
|
|
|
|
// Ensure the parser can parse a nested query.
|
|
func TestParser_Parse_Nested(t *testing.T) {
|
|
q, err := query.Parse(MustLex("union(get(10,general), get(11,brand), get(12))"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
} else if q.Operation != "union" {
|
|
t.Fatalf("unexpected operation: %q", q.Operation)
|
|
} else if len(q.Subqueries) != 3 {
|
|
t.Fatalf("unexpected subquery count: %d", len(q.Subqueries))
|
|
}
|
|
|
|
if sq := q.Subqueries[0]; sq.Operation != "get" {
|
|
t.Fatalf("unexpected subquery(0) operation: %q", sq.Operation)
|
|
} else if !reflect.DeepEqual(sq.Args, map[string]interface{}{"id": uint64(10), "frame": "general"}) {
|
|
t.Fatalf("unexpected subquery(0) args:\n\n%s", spew.Sprint(q.Args))
|
|
}
|
|
|
|
if sq := q.Subqueries[1]; sq.Operation != "get" {
|
|
t.Fatalf("unexpected subquery(1) operation: %q", sq.Operation)
|
|
} else if !reflect.DeepEqual(sq.Args, map[string]interface{}{"id": uint64(11), "frame": "brand"}) {
|
|
t.Fatalf("unexpected subquery(1) args:\n\n%s", spew.Sprint(sq.Args))
|
|
}
|
|
|
|
if sq := q.Subqueries[2]; sq.Operation != "get" {
|
|
t.Fatalf("unexpected subquery(2) operation: %q", sq.Operation)
|
|
} else if !reflect.DeepEqual(sq.Args, map[string]interface{}{"id": uint64(12), "frame": "general"}) {
|
|
t.Fatalf("unexpected subquery(2) args:\n\n%s", spew.Sprint(sq.Args))
|
|
}
|
|
}
|
|
|
|
// Ensure the parser can parse a query with lists.
|
|
func TestParser_Parse_Lists(t *testing.T) {
|
|
q, err := query.Parse(MustLex("top-n(get(10, general), [1,2,3], 50)"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
} else if q.Operation != "top-n" {
|
|
t.Fatalf("unexpected operation: %q", q.Operation)
|
|
} else if !reflect.DeepEqual(q.Args, map[string]interface{}{"ids": []uint64{1, 2, 3}, "n": 50}) {
|
|
t.Fatalf("unexpected args:\n\n%s", spew.Sprint(q.Args))
|
|
}
|
|
|
|
if sq := q.Subqueries[0]; sq.Operation != "get" {
|
|
t.Fatalf("unexpected subquery(0) operation: %q", sq.Operation)
|
|
} else if !reflect.DeepEqual(sq.Args, map[string]interface{}{"id": uint64(10), "frame": "general"}) {
|
|
t.Fatalf("unexpected subquery(0) args:\n\n%s", spew.Sprint(q.Args))
|
|
}
|
|
}
|
|
|
|
// Ensure the parser can parse "all()".
|
|
func TestParser_Parse_All(t *testing.T) {
|
|
q, err := query.Parse(MustLex("top-n(all(), general, 30)"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
} else if q.Operation != "top-n" {
|
|
t.Fatalf("unexpected operation: %q", q.Operation)
|
|
}
|
|
|
|
if sq := q.Subqueries[0]; sq.Operation != "all" {
|
|
t.Fatalf("unexpected subquery(0) operation: %q", sq.Operation)
|
|
}
|
|
}
|
|
|
|
// Ensure the parser can parse bracketed lists.
|
|
func TestParser_Parse_Lists_Bracketed(t *testing.T) {
|
|
q, err := query.Parse(MustLex("plugin(get(99), [get(10), get(11)])"))
|
|
if err != nil {
|
|
t.Fatalf("expected error")
|
|
}
|
|
spew.Dump(q)
|
|
}
|
|
|
|
// Ensure the parser can parse a recall query.
|
|
func TestParser_Parse_Recall(t *testing.T) {
|
|
q, err := query.Parse(MustLex("recall(12345,1,12345,2,12345,3)"))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
spew.Dump(q)
|
|
}
|