61 lines
1.8 KiB
Go
61 lines
1.8 KiB
Go
package mysql
|
|
|
|
import (
|
|
"bytes"
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.warky.dev/wdevs/relspecgo/pkg/models"
|
|
"git.warky.dev/wdevs/relspecgo/pkg/writers"
|
|
)
|
|
|
|
func TestWriterGeneratesMySQLDDL(t *testing.T) {
|
|
db := models.InitDatabase("app")
|
|
s := models.InitSchema("app")
|
|
table := models.InitTable("users", "app")
|
|
table.Columns["id"] = models.InitColumn("id", "users", "app")
|
|
table.Columns["id"].Type = "int"
|
|
table.Columns["id"].IsPrimaryKey = true
|
|
table.Columns["id"].NotNull = true
|
|
table.Columns["name"] = models.InitColumn("name", "users", "app")
|
|
table.Columns["name"].Type = "string"
|
|
table.Columns["name"].Length = 80
|
|
s.Tables = append(s.Tables, table)
|
|
db.Schemas = append(db.Schemas, s)
|
|
var out bytes.Buffer
|
|
w := NewWriter(&writers.WriterOptions{Metadata: map[string]interface{}{}})
|
|
w.writer = &out
|
|
if err := w.WriteDatabase(db); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
got := out.String()
|
|
for _, want := range []string{"CREATE TABLE IF NOT EXISTS `app`.`users`", "`id` INT NOT NULL", "`name` VARCHAR(80)", "PRIMARY KEY (`id`)"} {
|
|
if !strings.Contains(got, want) {
|
|
t.Errorf("DDL missing %q:\n%s", want, got)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestDatabaseStatementsKeepEmbeddedDelimiters(t *testing.T) {
|
|
db := models.InitDatabase("app")
|
|
s := models.InitSchema("app")
|
|
db.Schemas = append(db.Schemas, s)
|
|
for _, name := range []string{"one", "two"} {
|
|
table := models.InitTable(name, s.Name)
|
|
col := models.InitColumn("text", name, s.Name)
|
|
col.Type = "text"
|
|
col.Default = "first;\n-- data, not a comment\nlast"
|
|
table.Columns[col.Name] = col
|
|
s.Tables = append(s.Tables, table)
|
|
}
|
|
statements := databaseStatements(db)
|
|
if len(statements) != 2 {
|
|
t.Fatalf("got %d statements", len(statements))
|
|
}
|
|
for _, stmt := range statements {
|
|
if !strings.Contains(stmt, "first;\n-- data, not a comment\nlast") {
|
|
t.Fatalf("default corrupted: %s", stmt)
|
|
}
|
|
}
|
|
}
|