command_test.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. package command
  2. import (
  3. _ "embed"
  4. "io/ioutil"
  5. "os"
  6. "path/filepath"
  7. "sort"
  8. "strings"
  9. "testing"
  10. "github.com/stretchr/testify/assert"
  11. "github.com/zeromicro/go-zero/tools/goctl/config"
  12. "github.com/zeromicro/go-zero/tools/goctl/model/sql/gen"
  13. "github.com/zeromicro/go-zero/tools/goctl/util/pathx"
  14. )
  15. var (
  16. //go:embed testdata/user.sql
  17. sql string
  18. cfg = &config.Config{
  19. NamingFormat: "gozero",
  20. }
  21. )
  22. func TestFromDDl(t *testing.T) {
  23. err := gen.Clean()
  24. assert.Nil(t, err)
  25. err = fromDDL(ddlArg{
  26. src: "./user.sql",
  27. dir: pathx.MustTempDir(),
  28. cfg: cfg,
  29. cache: true,
  30. database: "go-zero",
  31. strict: false,
  32. })
  33. assert.Equal(t, errNotMatched, err)
  34. // case dir is not exists
  35. unknownDir := filepath.Join(pathx.MustTempDir(), "test", "user.sql")
  36. err = fromDDL(ddlArg{
  37. src: unknownDir,
  38. dir: pathx.MustTempDir(),
  39. cfg: cfg,
  40. cache: true,
  41. database: "go_zero",
  42. })
  43. assert.True(t, func() bool {
  44. switch err.(type) {
  45. case *os.PathError:
  46. return true
  47. default:
  48. return false
  49. }
  50. }())
  51. // case empty src
  52. err = fromDDL(ddlArg{
  53. dir: pathx.MustTempDir(),
  54. cfg: cfg,
  55. cache: true,
  56. database: "go_zero",
  57. })
  58. if err != nil {
  59. assert.Equal(t, "expected path or path globbing patterns, but nothing found", err.Error())
  60. }
  61. tempDir := filepath.Join(pathx.MustTempDir(), "test")
  62. err = pathx.MkdirIfNotExist(tempDir)
  63. if err != nil {
  64. return
  65. }
  66. user1Sql := filepath.Join(tempDir, "user1.sql")
  67. user2Sql := filepath.Join(tempDir, "user2.sql")
  68. err = ioutil.WriteFile(user1Sql, []byte(sql), os.ModePerm)
  69. if err != nil {
  70. return
  71. }
  72. err = ioutil.WriteFile(user2Sql, []byte(sql), os.ModePerm)
  73. if err != nil {
  74. return
  75. }
  76. _, err = os.Stat(user1Sql)
  77. assert.Nil(t, err)
  78. _, err = os.Stat(user2Sql)
  79. assert.Nil(t, err)
  80. filename := filepath.Join(tempDir, "usermodel.go")
  81. fromDDL := func(db string) {
  82. err = fromDDL(ddlArg{
  83. src: filepath.Join(tempDir, "user*.sql"),
  84. dir: tempDir,
  85. cfg: cfg,
  86. cache: true,
  87. database: db,
  88. })
  89. assert.Nil(t, err)
  90. _, err = os.Stat(filename)
  91. assert.Nil(t, err)
  92. }
  93. fromDDL("go_zero")
  94. _ = os.Remove(filename)
  95. fromDDL("go-zero")
  96. _ = os.Remove(filename)
  97. fromDDL("1gozero")
  98. }
  99. func Test_parseTableList(t *testing.T) {
  100. testData := []string{"foo", "b*", "bar", "back_up", "foo,bar,b*"}
  101. patterns := parseTableList(testData)
  102. actual := patterns.list()
  103. expected := []string{"foo", "b*", "bar", "back_up"}
  104. sort.Slice(actual, func(i, j int) bool {
  105. return actual[i] > actual[j]
  106. })
  107. sort.Slice(expected, func(i, j int) bool {
  108. return expected[i] > expected[j]
  109. })
  110. assert.Equal(t, strings.Join(expected, ","), strings.Join(actual, ","))
  111. matchTestData := map[string]bool{
  112. "foo": true,
  113. "bar": true,
  114. "back_up": true,
  115. "bit": true,
  116. "ab": false,
  117. "b": true,
  118. }
  119. for v, expected := range matchTestData {
  120. actual := patterns.Match(v)
  121. assert.Equal(t, expected, actual)
  122. }
  123. }