147 lines
3.2 KiB
Go
147 lines
3.2 KiB
Go
package redis
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestParsingEmptySchema(t *testing.T) {
|
|
schemas, err := parseQuerySchemas("")
|
|
require.NoError(t, err)
|
|
assert.Empty(t, 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)
|
|
require.NoError(t, err)
|
|
assert.Len(t, schemas, 1)
|
|
assert.Equal(t,
|
|
map[string]string{"person.org": "var0", "person.id": "var1", "city": "var2", "state": "var3"},
|
|
schemas["schema1"].keys)
|
|
assert.Equal(t,
|
|
[]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",
|
|
}, schemas["schema1"].schema)
|
|
}
|
|
|
|
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)
|
|
require.NoError(t, err)
|
|
assert.Len(t, schemas, 2)
|
|
assert.Equal(t,
|
|
map[string]string{"person.org": "var0", "city": "var1"},
|
|
schemas["schema1"].keys)
|
|
assert.Equal(t,
|
|
[]interface{}{
|
|
"FT.CREATE", "schema1", "ON", "JSON", "SCHEMA",
|
|
"$.data.person.org", "AS", "var0", "TEXT", "SORTABLE",
|
|
"$.data.city", "AS", "var1", "TEXT", "SORTABLE",
|
|
}, schemas["schema1"].schema)
|
|
assert.Equal(t,
|
|
map[string]string{"person.id": "var0", "state": "var1"},
|
|
schemas["schema2"].keys)
|
|
assert.Equal(t,
|
|
[]interface{}{
|
|
"FT.CREATE", "schema2", "ON", "JSON", "SCHEMA",
|
|
"$.data.person.id", "AS", "var0", "NUMERIC", "SORTABLE",
|
|
"$.data.state", "AS", "var1", "TEXT", "SORTABLE",
|
|
}, schemas["schema2"].schema)
|
|
}
|
|
|
|
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)
|
|
require.EqualError(t, err, test.err)
|
|
}
|
|
}
|