components-contrib/state/redis/redis_query_schema_test.go

149 lines
3.2 KiB
Go

package redis
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestParsingEmptySchema(t *testing.T) {
schemas, err := parseQuerySchemas("")
assert.NoError(t, err)
assert.Equal(t, 0, len(schemas))
}
func TestParsingSingleSchema(t *testing.T) {
content := `
[
{
"name": "schema1",
"indexes": [
{
"key": "person.org",
"type": "TEXT"
},
{
"key": "person.id",
"type": "NUMERIC"
},
{
"key": "city",
"type": "TEXT"
},
{
"key": "state",
"type": "TEXT"
}
]
}
]`
schemas, err := parseQuerySchemas(content)
assert.NoError(t, err)
assert.Equal(t, 1, len(schemas))
assert.Equal(t,
schemas["schema1"].keys,
map[string]string{"person.org": "var0", "person.id": "var1", "city": "var2", "state": "var3"})
assert.Equal(t,
schemas["schema1"].schema,
[]interface{}{
"FT.CREATE", "schema1", "ON", "JSON", "SCHEMA",
"$.data.person.org", "AS", "var0", "TEXT", "SORTABLE",
"$.data.person.id", "AS", "var1", "NUMERIC", "SORTABLE",
"$.data.city", "AS", "var2", "TEXT", "SORTABLE",
"$.data.state", "AS", "var3", "TEXT", "SORTABLE",
})
}
func TestParsingMultiSchema(t *testing.T) {
content := `
[
{
"name": "schema1",
"indexes": [
{
"key": "person.org",
"type": "TEXT"
},
{
"key": "city",
"type": "TEXT"
}
]
},
{
"name": "schema2",
"indexes": [
{
"key": "person.id",
"type": "NUMERIC"
},
{
"key": "state",
"type": "TEXT"
}
]
}
]`
schemas, err := parseQuerySchemas(content)
assert.NoError(t, err)
assert.Equal(t, 2, len(schemas))
assert.Equal(t,
schemas["schema1"].keys,
map[string]string{"person.org": "var0", "city": "var1"})
assert.Equal(t,
schemas["schema1"].schema,
[]interface{}{
"FT.CREATE", "schema1", "ON", "JSON", "SCHEMA",
"$.data.person.org", "AS", "var0", "TEXT", "SORTABLE",
"$.data.city", "AS", "var1", "TEXT", "SORTABLE",
})
assert.Equal(t,
schemas["schema2"].keys,
map[string]string{"person.id": "var0", "state": "var1"})
assert.Equal(t,
schemas["schema2"].schema,
[]interface{}{
"FT.CREATE", "schema2", "ON", "JSON", "SCHEMA",
"$.data.person.id", "AS", "var0", "NUMERIC", "SORTABLE",
"$.data.state", "AS", "var1", "TEXT", "SORTABLE",
})
}
func TestParsingSchemaErrors(t *testing.T) {
tests := []struct{ content, err string }{
{
content: `
[
{
"name": "schema1",
"indexes": [
{
"type": "TEXT"
}
]
}
]`,
err: "empty key in query schema schema1",
},
{
content: `
[
{
"name": "schema3",
"indexes": [
{
"key": "state"
}
]
}
]`,
err: "empty type in query schema schema3",
},
}
for _, test := range tests {
_, err := parseQuerySchemas(test.content)
assert.EqualError(t, err, test.err)
}
}