package model import ( "bytes" "moredoc/conf" "os" "strings" "testing" "text/template" "go.uber.org/zap" "gorm.io/driver/mysql" "gorm.io/gorm" ) const dataGoTpl = ` package model func getPermissions() (permissions []Permission) { permissions = []Permission{ {{ range .Permissions }}{Title: "{{.Title}}", Description: "{{.Description}}", Method: "{{.Method}}", Path: "{{.Path}}"}, {{end}} } return } ` func TestGenData(t *testing.T) { // 访问的数据库链接地址。 dsn: data source name // 【注意】:以哪个数据库的【菜单】和【API】为准,则配置查询哪个数据库,以生成menu和api基础数据 dsn := "root:root@tcp(127.0.0.1)/moredoc?charset=utf8mb4&parseTime=True&loc=Local" t.Log("开始生成 data.go 文件") t.Log("dsn:", dsn) db, err := gorm.Open(mysql.New(mysql.Config{ DSN: dsn, // DSN }), &gorm.Config{}) if err != nil { return } defer func() { d, _ := db.DB() d.Close() }() var ( permissions []Permission permissionTableName = Permission{}.TableName() ) err = db.Table(permissionTableName).Find(&permissions).Error if err != nil { t.Errorf("生成 data.go 文件失败: %s", err.Error()) return } replacer := strings.NewReplacer("\"", "\\\"") for idx, permission := range permissions { permissions[idx].Title = replacer.Replace(permission.Title) permissions[idx].Description = replacer.Replace(permission.Description) } tmpl, err := template.New("data.go").Parse(dataGoTpl) if err != nil { t.Fatal(err.Error()) } buf := new(bytes.Buffer) if err := tmpl.Execute(buf, map[string]interface{}{"Permissions": permissions}); err != nil { t.Fatal(err.Error()) } err = os.WriteFile("data.go", buf.Bytes(), 0666) if err != nil { t.Fatalf("生成 data.go 文件失败: %s", err.Error()) } t.Log("生成 data.go 文件成功") } func TestConvertDocument(t *testing.T) { dsn := "root:root@tcp(127.0.0.1)/moredoc?charset=utf8mb4&parseTime=True&loc=Local" logger, _ := zap.NewDevelopment() dbModel, err := NewDBModel(&conf.Database{ DSN: dsn, Prefix: "mnt_", ShowSQL: true, }, logger) if err != nil { t.Fatal(err.Error()) } err = dbModel.ConvertDocument() if err != nil { t.Fatal(err.Error()) } t.Log("success") }