command_test.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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("./user.sql", pathx.MustTempDir(), cfg, true, false, "go_zero")
  26. assert.Equal(t, errNotMatched, err)
  27. // case dir is not exists
  28. unknownDir := filepath.Join(pathx.MustTempDir(), "test", "user.sql")
  29. err = fromDDL(unknownDir, pathx.MustTempDir(), cfg, true, false, "go_zero")
  30. assert.True(t, func() bool {
  31. switch err.(type) {
  32. case *os.PathError:
  33. return true
  34. default:
  35. return false
  36. }
  37. }())
  38. // case empty src
  39. err = fromDDL("", pathx.MustTempDir(), cfg, true, false, "go_zero")
  40. if err != nil {
  41. assert.Equal(t, "expected path or path globbing patterns, but nothing found", err.Error())
  42. }
  43. tempDir := filepath.Join(pathx.MustTempDir(), "test")
  44. err = pathx.MkdirIfNotExist(tempDir)
  45. if err != nil {
  46. return
  47. }
  48. user1Sql := filepath.Join(tempDir, "user1.sql")
  49. user2Sql := filepath.Join(tempDir, "user2.sql")
  50. err = ioutil.WriteFile(user1Sql, []byte(sql), os.ModePerm)
  51. if err != nil {
  52. return
  53. }
  54. err = ioutil.WriteFile(user2Sql, []byte(sql), os.ModePerm)
  55. if err != nil {
  56. return
  57. }
  58. _, err = os.Stat(user1Sql)
  59. assert.Nil(t, err)
  60. _, err = os.Stat(user2Sql)
  61. assert.Nil(t, err)
  62. filename := filepath.Join(tempDir, "usermodel.go")
  63. fromDDL := func(db string) {
  64. err = fromDDL(filepath.Join(tempDir, "user*.sql"), tempDir, cfg, true, false, db)
  65. assert.Nil(t, err)
  66. _, err = os.Stat(filename)
  67. assert.Nil(t, err)
  68. }
  69. fromDDL("go_zero")
  70. _ = os.Remove(filename)
  71. fromDDL("go-zero")
  72. _ = os.Remove(filename)
  73. fromDDL("1gozero")
  74. }
  75. func Test_parseTableList(t *testing.T) {
  76. testData := []string{"foo", "b*", "bar", "back_up", "foo,bar,b*"}
  77. patterns := parseTableList(testData)
  78. actual := patterns.list()
  79. expected := []string{"foo", "b*", "bar", "back_up"}
  80. sort.Slice(actual, func(i, j int) bool {
  81. return actual[i] > actual[j]
  82. })
  83. sort.Slice(expected, func(i, j int) bool {
  84. return expected[i] > expected[j]
  85. })
  86. assert.Equal(t, strings.Join(expected, ","), strings.Join(actual, ","))
  87. matchTestData := map[string]bool{
  88. "foo": true,
  89. "bar": true,
  90. "back_up": true,
  91. "bit": true,
  92. "ab": false,
  93. "b": true,
  94. }
  95. for v, expected := range matchTestData {
  96. actual := patterns.Match(v)
  97. assert.Equal(t, expected, actual)
  98. }
  99. }