command_test.go 2.9 KB

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