Files
chaisql/query/create_test.go
2019-12-15 14:31:04 +01:00

77 lines
1.8 KiB
Go

package query_test
import (
"testing"
"github.com/asdine/genji"
"github.com/asdine/genji/database"
"github.com/asdine/genji/engine/memoryengine"
"github.com/stretchr/testify/require"
)
func TestCreateTable(t *testing.T) {
tests := []struct {
name string
query string
fails bool
}{
{"Basic", `CREATE TABLE test`, false},
{"Exists", "CREATE TABLE test;CREATE TABLE test", true},
{"If not exists", "CREATE TABLE IF NOT EXISTS test", false},
{"If not exists, twice", "CREATE TABLE IF NOT EXISTS test;CREATE TABLE IF NOT EXISTS test", false},
{"With primary key", "CREATE TABLE test(foo STRING PRIMARY KEY)", false},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
db, err := genji.New(memoryengine.NewEngine())
require.NoError(t, err)
defer db.Close()
err = db.Exec(test.query)
if test.fails {
require.Error(t, err)
return
}
require.NoError(t, err)
err = db.ViewTable("test", func(_ *genji.Tx, _ *database.Table) error {
return nil
})
require.NoError(t, err)
})
}
}
func TestCreateIndex(t *testing.T) {
tests := []struct {
name string
query string
fails bool
}{
{"Basic", "CREATE INDEX idx ON test (foo)", false},
{"If not exists", "CREATE INDEX IF NOT EXISTS idx ON test (foo)", false},
{"Unique", "CREATE UNIQUE INDEX IF NOT EXISTS idx ON test (foo)", false},
{"No fields", "CREATE INDEX idx ON test", true},
{"More than 1 field", "CREATE INDEX idx ON test (foo, bar)", true},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
db, err := genji.New(memoryengine.NewEngine())
require.NoError(t, err)
defer db.Close()
err = db.Exec("CREATE TABLE test")
require.NoError(t, err)
err = db.Exec(test.query)
if test.fails {
require.Error(t, err)
return
}
require.NoError(t, err)
})
}
}