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) } } }