Skip to content

Commit

Permalink
tests(restQL): update testes to handle the new ResponseBody type
Browse files Browse the repository at this point in the history
  • Loading branch information
caiorcferreira authored and cupello committed Sep 28, 2020
1 parent 683ba0d commit d54d9ec
Show file tree
Hide file tree
Showing 11 changed files with 441 additions and 218 deletions.
173 changes: 130 additions & 43 deletions internal/eval/aggregators_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,21 @@ func TestApplyAggregators(t *testing.T) {
{Resource: "sidekick", In: []string{"hero", "sidekick"}},
}},
domain.Resources{
"hero": restql.DoneResource{ResponseBody: test.Unmarshal(`{ "id": 1, "name": "batman" }`)},
"sidekick": restql.DoneResource{ResponseBody: test.Unmarshal(`{ "id": 10, "name": "robin" }`)},
"hero": restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 1, "name": "batman" }`),
)},
"sidekick": restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 10, "name": "robin" }`),
)},
},
domain.Resources{
"hero": restql.DoneResource{ResponseBody: test.Unmarshal(`{ "id": 1, "name": "batman", "sidekick": { "id": 10, "name": "robin" } }`)},
"sidekick": restql.DoneResource{ResponseBody: nil},
"hero": restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 1, "name": "batman", "sidekick": { "id": 10, "name": "robin" } }`),
)},
"sidekick": restql.DoneResource{ResponseBody: &restql.ResponseBody{}},
},
},
{
Expand All @@ -50,12 +59,21 @@ func TestApplyAggregators(t *testing.T) {
{Resource: "sidekick", In: []string{"hero", "info", "partners", "sidekick"}},
}},
domain.Resources{
"hero": restql.DoneResource{ResponseBody: test.Unmarshal(`{ "id": 1, "name": "batman" }`)},
"sidekick": restql.DoneResource{ResponseBody: test.Unmarshal(`{ "id": 10, "name": "robin" }`)},
"hero": restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 1, "name": "batman" }`),
)},
"sidekick": restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 10, "name": "robin" }`),
)},
},
domain.Resources{
"hero": restql.DoneResource{ResponseBody: test.Unmarshal(`{ "id": 1, "name": "batman", "info": { "partners": { "sidekick": { "id": 10, "name": "robin" } } } }`)},
"sidekick": restql.DoneResource{ResponseBody: nil},
"hero": restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 1, "name": "batman", "info": { "partners": { "sidekick": { "id": 10, "name": "robin" } } } }`),
)},
"sidekick": restql.DoneResource{ResponseBody: &restql.ResponseBody{}},
},
},
{
Expand All @@ -65,12 +83,21 @@ func TestApplyAggregators(t *testing.T) {
{Resource: "sidekick", In: []string{"hero", "sidekick"}},
}},
domain.Resources{
"hero": restql.DoneResource{ResponseBody: test.Unmarshal(`{ "id": 1, "name": "batman" }`)},
"sidekick": restql.DoneResource{ResponseBody: test.Unmarshal(`[{ "id": 10, "name": "robin" }, { "id": 11, "name": "batgirl" }]`)},
"hero": restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 1, "name": "batman" }`),
)},
"sidekick": restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`[{ "id": 10, "name": "robin" }, { "id": 11, "name": "batgirl" }]`),
)},
},
domain.Resources{
"hero": restql.DoneResource{ResponseBody: test.Unmarshal(`{ "id": 1, "name": "batman", "sidekick": [{ "id": 10, "name": "robin" }, { "id": 11, "name": "batgirl" }]}`)},
"sidekick": restql.DoneResource{ResponseBody: nil},
"hero": restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 1, "name": "batman", "sidekick": [{ "id": 10, "name": "robin" }, { "id": 11, "name": "batgirl" }]}`),
)},
"sidekick": restql.DoneResource{ResponseBody: &restql.ResponseBody{}},
},
},
{
Expand All @@ -81,17 +108,32 @@ func TestApplyAggregators(t *testing.T) {
}},
domain.Resources{
"hero": restql.DoneResources{
restql.DoneResource{ResponseBody: test.Unmarshal(`{ "id": 1, "name": "batman" }`)},
restql.DoneResource{ResponseBody: test.Unmarshal(`{ "id": 2, "name": "wonder woman" }`)},
restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 1, "name": "batman" }`),
)},
restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 2, "name": "wonder woman" }`),
)},
},
"sidekick": restql.DoneResource{ResponseBody: test.Unmarshal(`{ "id": 10, "name": "robin" }`)},
"sidekick": restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 10, "name": "robin" }`),
)},
},
domain.Resources{
"hero": restql.DoneResources{
restql.DoneResource{ResponseBody: test.Unmarshal(`{ "id": 1, "name": "batman", "sidekick": { "id": 10, "name": "robin" } }`)},
restql.DoneResource{ResponseBody: test.Unmarshal(`{ "id": 2, "name": "wonder woman", "sidekick": { "id": 10, "name": "robin" } }`)},
restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 1, "name": "batman", "sidekick": { "id": 10, "name": "robin" } }`),
)},
restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 2, "name": "wonder woman", "sidekick": { "id": 10, "name": "robin" } }`),
)},
},
"sidekick": restql.DoneResource{ResponseBody: nil},
"sidekick": restql.DoneResource{ResponseBody: &restql.ResponseBody{}},
},
},
{
Expand All @@ -101,12 +143,21 @@ func TestApplyAggregators(t *testing.T) {
{Resource: "sidekick", In: []string{"hero", "sidekick"}},
}},
domain.Resources{
"hero": restql.DoneResource{ResponseBody: test.Unmarshal(`[{ "id": 1, "name": "batman" }, { "id": 2, "name": "wonder woman" }]`)},
"sidekick": restql.DoneResource{ResponseBody: test.Unmarshal(`{ "id": 10, "name": "robin" }`)},
"hero": restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`[{ "id": 1, "name": "batman" }, { "id": 2, "name": "wonder woman" }]`),
)},
"sidekick": restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 10, "name": "robin" }`),
)},
},
domain.Resources{
"hero": restql.DoneResource{ResponseBody: test.Unmarshal(`[{ "id": 1, "name": "batman", "sidekick": { "id": 10, "name": "robin" } }, { "id": 2, "name": "wonder woman", "sidekick": { "id": 10, "name": "robin" } }]`)},
"sidekick": restql.DoneResource{ResponseBody: nil},
"hero": restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`[{ "id": 1, "name": "batman", "sidekick": { "id": 10, "name": "robin" } }, { "id": 2, "name": "wonder woman", "sidekick": { "id": 10, "name": "robin" } }]`),
)},
"sidekick": restql.DoneResource{ResponseBody: &restql.ResponseBody{}},
},
},
{
Expand All @@ -116,20 +167,31 @@ func TestApplyAggregators(t *testing.T) {
{Resource: "sidekick", In: []string{"hero", "sidekick"}},
}},
domain.Resources{
"hero": restql.DoneResource{ResponseBody: test.Unmarshal(`{ "id": 1, "name": "batman" }`)},
"hero": restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 1, "name": "batman" }`),
)},
"sidekick": restql.DoneResources{
restql.DoneResource{ResponseBody: test.Unmarshal(`{ "id": 10, "name": "robin" }`)},
restql.DoneResource{ResponseBody: test.Unmarshal(`{ "id": 11, "name": "batgirl" }`)},
restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 10, "name": "robin" }`),
)},
restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 11, "name": "batgirl" }`),
)},
},
},
domain.Resources{
"hero": restql.DoneResource{

ResponseBody: test.Unmarshal(`{ "id": 1, "name": "batman", "sidekick": [{ "id": 10, "name": "robin" }, { "id": 11, "name": "batgirl" }] }`),
ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 1, "name": "batman", "sidekick": [{ "id": 10, "name": "robin" }, { "id": 11, "name": "batgirl" }] }`),
),
},
"sidekick": restql.DoneResources{
restql.DoneResource{ResponseBody: nil},
restql.DoneResource{ResponseBody: nil},
restql.DoneResource{ResponseBody: &restql.ResponseBody{}},
restql.DoneResource{ResponseBody: &restql.ResponseBody{}},
},
},
},
Expand All @@ -141,28 +203,44 @@ func TestApplyAggregators(t *testing.T) {
}},
domain.Resources{
"hero": restql.DoneResources{
restql.DoneResource{ResponseBody: test.Unmarshal(`{ "id": 1, "name": "batman"}`)},
restql.DoneResource{ResponseBody: test.Unmarshal(`{ "id": 2, "name": "wonder woman"}`)},
restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 1, "name": "batman"}`),
)},
restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 2, "name": "wonder woman"}`),
)},
},
"sidekick": restql.DoneResources{
restql.DoneResource{ResponseBody: test.Unmarshal(`{ "id": 10, "name": "robin" }`)},
restql.DoneResource{ResponseBody: test.Unmarshal(`{ "id": 11, "name": "batgirl" }`)},
restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 10, "name": "robin" }`),
)},
restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 11, "name": "batgirl" }`),
)},
},
},
domain.Resources{
"hero": restql.DoneResources{
restql.DoneResource{

ResponseBody: test.Unmarshal(`{ "id": 1, "name": "batman", "sidekick": { "id": 10, "name": "robin" } }`),
ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 1, "name": "batman", "sidekick": { "id": 10, "name": "robin" } }`),
),
},
restql.DoneResource{

ResponseBody: test.Unmarshal(`{ "id": 2, "name": "wonder woman", "sidekick": { "id": 11, "name": "batgirl" } }`),
ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`{ "id": 2, "name": "wonder woman", "sidekick": { "id": 11, "name": "batgirl" } }`),
),
},
},
"sidekick": restql.DoneResources{
restql.DoneResource{ResponseBody: nil},
restql.DoneResource{ResponseBody: nil},
restql.DoneResource{ResponseBody: &restql.ResponseBody{}},
restql.DoneResource{ResponseBody: &restql.ResponseBody{}},
},
},
},
Expand All @@ -173,12 +251,21 @@ func TestApplyAggregators(t *testing.T) {
{Resource: "sidekick", In: []string{"hero", "sidekick"}},
}},
domain.Resources{
"hero": restql.DoneResource{ResponseBody: test.Unmarshal(`[{ "id": 1, "name": "batman" }, { "id": 2, "name": "wonder woman" }]`)},
"sidekick": restql.DoneResource{ResponseBody: test.Unmarshal(`[{ "id": 10, "name": "robin" }, { "id": 11, "name": "batgirl" }]`)},
"hero": restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`[{ "id": 1, "name": "batman" }, { "id": 2, "name": "wonder woman" }]`),
)},
"sidekick": restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`[{ "id": 10, "name": "robin" }, { "id": 11, "name": "batgirl" }]`),
)},
},
domain.Resources{
"hero": restql.DoneResource{ResponseBody: test.Unmarshal(`[{ "id": 1, "name": "batman", "sidekick": { "id": 10, "name": "robin" } }, { "id": 2, "name": "wonder woman", "sidekick": { "id": 11, "name": "batgirl" } }]`)},
"sidekick": restql.DoneResource{ResponseBody: nil},
"hero": restql.DoneResource{ResponseBody: restql.NewResponseBodyFromValue(
test.NoOpLogger,
test.Unmarshal(`[{ "id": 1, "name": "batman", "sidekick": { "id": 10, "name": "robin" } }, { "id": 2, "name": "wonder woman", "sidekick": { "id": 11, "name": "batgirl" } }]`),
)},
"sidekick": restql.DoneResource{ResponseBody: &restql.ResponseBody{}},
},
},
}
Expand Down
15 changes: 8 additions & 7 deletions internal/eval/filters.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ import (

// ApplyFilters returns a version of the already resolved Resources
// only with the fields defined by the `only` clause.
func ApplyFilters(log restql.Logger, query domain.Query, resources restql.Resources) (restql.Resources, error) {
result := make(restql.Resources)
func ApplyFilters(log restql.Logger, query domain.Query, resources domain.Resources) (domain.Resources, error) {
result := make(domain.Resources)

for _, stmt := range query.Statements {
resourceID := restql.NewResourceID(stmt)
resourceID := domain.NewResourceID(stmt)
dr := resources[resourceID]

filtered, err := applyOnlyFilters(stmt.Only, dr)
Expand All @@ -37,7 +37,8 @@ func applyOnlyFilters(filters []interface{}, resourceResult interface{}) (interf

switch resourceResult := resourceResult.(type) {
case restql.DoneResource:
result, err := extractWithFilters(buildFilterTree(filters), resourceResult.ResponseBody)
body := resourceResult.ResponseBody.Unmarshal()
result, err := extractWithFilters(buildFilterTree(filters), body)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -263,14 +264,14 @@ func parsePath(s interface{}) []interface{} {

// ApplyHidden returns a version of the already resolved Resources
// removing the statement results with the `hidden` clause.
func ApplyHidden(query domain.Query, resources restql.Resources) restql.Resources {
result := make(restql.Resources)
func ApplyHidden(query domain.Query, resources domain.Resources) domain.Resources {
result := make(domain.Resources)

for _, stmt := range query.Statements {
if stmt.Hidden {
continue
}
resourceID := restql.NewResourceID(stmt)
resourceID := domain.NewResourceID(stmt)
dr := resources[resourceID]

result[resourceID] = dr
Expand Down
Loading

0 comments on commit d54d9ec

Please sign in to comment.