package bob_test import ( "testing" "github.com/aldy505/bob" ) func TestCreate(t *testing.T) { t.Run("should return correct sql string with basic columns and types", func(t *testing.T) { sql, _, err := bob.CreateTable("users").Columns("name", "password", "date").Types("varchar(255)", "text", "date").ToSql() if err != nil { t.Fatal(err.Error()) } result := "CREATE TABLE `users` (`name` varchar(255), `password` text, `date` date);" if sql != result { t.Fatal("sql is not equal to result:", sql) } }) t.Run("should return correct sql with primary key and unique key", func(t *testing.T) { sql, _, err := bob.CreateTable("users"). Columns("id", "name", "email", "password", "date"). Types("uuid", "varchar(255)", "varchar(255)", "text", "date"). Primary("id"). Unique("email"). ToSql() if err != nil { t.Fatal(err.Error()) } result := "CREATE TABLE `users` (`id` uuid, `name` varchar(255), `email` varchar(255), `password` text, `date` date); ALTER TABLE `users` ADD PRIMARY KEY (`id`); ALTER TABLE `users` ADD UNIQUE (`email`);" if sql != result { t.Fatal("sql is not equal to result:", sql) } }) t.Run("should emit error on unmatched column and types length", func(t *testing.T) { _, _, err := bob.CreateTable("users"). Columns("id", "name", "email", "password", "date"). Types("uuid", "varchar(255)", "varchar(255)", "date"). ToSql() if err.Error() != "columns and types should have equal length" { t.Fatal("should throw an error, it didn't:", err.Error()) } }) t.Run("should emit error on empty table name", func(t *testing.T) { _, _, err := bob.CreateTable("").Columns("name").Types("text").ToSql() if err.Error() != "create statements must specify a table" { t.Fatal("should throw an error, it didn't:", err.Error()) } }) t.Run("should emit error for primary key not in columns", func(t *testing.T) { _, _, err := bob.CreateTable("users").Columns("name").Types("text").Primary("id").ToSql() if err.Error() != "supplied primary column name doesn't exists on columns" { t.Fatal("should throw an error, it didn't:", err.Error()) } }) t.Run("should emit error for unique key not in columns", func(t *testing.T) { _, _, err := bob.CreateTable("users").Columns("name").Types("text").Unique("id").ToSql() if err.Error() != "supplied unique column name doesn't exists on columns" { t.Fatal("should throw an error, it didn't:", err.Error()) } }) }