gen_test.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. package gen
  2. import (
  3. "database/sql"
  4. "io/ioutil"
  5. "os"
  6. "path/filepath"
  7. "strings"
  8. "testing"
  9. "time"
  10. "github.com/stretchr/testify/assert"
  11. "github.com/tal-tech/go-zero/core/logx"
  12. "github.com/tal-tech/go-zero/core/stringx"
  13. "github.com/tal-tech/go-zero/tools/goctl/config"
  14. "github.com/tal-tech/go-zero/tools/goctl/model/sql/builderx"
  15. )
  16. var source = "CREATE TABLE `test_user` (\n `id` bigint NOT NULL AUTO_INCREMENT,\n `mobile` varchar(255) COLLATE utf8mb4_bin NOT NULL,\n `class` bigint NOT NULL,\n `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,\n `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,\n `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,\n PRIMARY KEY (`id`),\n UNIQUE KEY `mobile_unique` (`mobile`),\n UNIQUE KEY `class_name_unique` (`class`,`name`),\n KEY `create_index` (`create_time`),\n KEY `name_index` (`name`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;"
  17. func TestCacheModel(t *testing.T) {
  18. logx.Disable()
  19. _ = Clean()
  20. sqlFile := filepath.Join(t.TempDir(), "tmp.sql")
  21. err := ioutil.WriteFile(sqlFile, []byte(source), 0o777)
  22. assert.Nil(t, err)
  23. dir := filepath.Join(t.TempDir(), "./testmodel")
  24. cacheDir := filepath.Join(dir, "cache")
  25. noCacheDir := filepath.Join(dir, "nocache")
  26. g, err := NewDefaultGenerator(cacheDir, &config.Config{
  27. NamingFormat: "GoZero",
  28. })
  29. assert.Nil(t, err)
  30. err = g.StartFromDDL(sqlFile, true)
  31. assert.Nil(t, err)
  32. assert.True(t, func() bool {
  33. _, err := os.Stat(filepath.Join(cacheDir, "TestUserModel.go"))
  34. return err == nil
  35. }())
  36. g, err = NewDefaultGenerator(noCacheDir, &config.Config{
  37. NamingFormat: "gozero",
  38. })
  39. assert.Nil(t, err)
  40. err = g.StartFromDDL(sqlFile, false)
  41. assert.Nil(t, err)
  42. assert.True(t, func() bool {
  43. _, err := os.Stat(filepath.Join(noCacheDir, "testusermodel.go"))
  44. return err == nil
  45. }())
  46. }
  47. func TestNamingModel(t *testing.T) {
  48. logx.Disable()
  49. _ = Clean()
  50. sqlFile := filepath.Join(t.TempDir(), "tmp.sql")
  51. err := ioutil.WriteFile(sqlFile, []byte(source), 0o777)
  52. assert.Nil(t, err)
  53. dir, _ := filepath.Abs("./testmodel")
  54. camelDir := filepath.Join(dir, "camel")
  55. snakeDir := filepath.Join(dir, "snake")
  56. defer func() {
  57. _ = os.RemoveAll(dir)
  58. }()
  59. g, err := NewDefaultGenerator(camelDir, &config.Config{
  60. NamingFormat: "GoZero",
  61. })
  62. assert.Nil(t, err)
  63. err = g.StartFromDDL(sqlFile, true)
  64. assert.Nil(t, err)
  65. assert.True(t, func() bool {
  66. _, err := os.Stat(filepath.Join(camelDir, "TestUserModel.go"))
  67. return err == nil
  68. }())
  69. g, err = NewDefaultGenerator(snakeDir, &config.Config{
  70. NamingFormat: "go_zero",
  71. })
  72. assert.Nil(t, err)
  73. err = g.StartFromDDL(sqlFile, true)
  74. assert.Nil(t, err)
  75. assert.True(t, func() bool {
  76. _, err := os.Stat(filepath.Join(snakeDir, "test_user_model.go"))
  77. return err == nil
  78. }())
  79. }
  80. func TestWrapWithRawString(t *testing.T) {
  81. assert.Equal(t, "``", wrapWithRawString(""))
  82. assert.Equal(t, "``", wrapWithRawString("``"))
  83. assert.Equal(t, "`a`", wrapWithRawString("a"))
  84. assert.Equal(t, "` `", wrapWithRawString(" "))
  85. }
  86. func TestFields(t *testing.T) {
  87. type Student struct {
  88. ID int64 `db:"id"`
  89. Name string `db:"name"`
  90. Age sql.NullInt64 `db:"age"`
  91. Score sql.NullFloat64 `db:"score"`
  92. CreateTime time.Time `db:"create_time"`
  93. UpdateTime sql.NullTime `db:"update_time"`
  94. }
  95. var (
  96. studentFieldNames = builderx.RawFieldNames(&Student{})
  97. studentRows = strings.Join(studentFieldNames, ",")
  98. studentRowsExpectAutoSet = strings.Join(stringx.Remove(studentFieldNames, "`id`", "`create_time`", "`update_time`"), ",")
  99. studentRowsWithPlaceHolder = strings.Join(stringx.Remove(studentFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
  100. )
  101. assert.Equal(t, []string{"`id`", "`name`", "`age`", "`score`", "`create_time`", "`update_time`"}, studentFieldNames)
  102. assert.Equal(t, "`id`,`name`,`age`,`score`,`create_time`,`update_time`", studentRows)
  103. assert.Equal(t, "`name`,`age`,`score`", studentRowsExpectAutoSet)
  104. assert.Equal(t, "`name`=?,`age`=?,`score`=?", studentRowsWithPlaceHolder)
  105. }