正在显示
12 个修改的文件
包含
278 行增加
和
3 行删除
| 1 | +package command | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + "reflect" | ||
| 6 | + "strings" | ||
| 7 | + | ||
| 8 | + "github.com/beego/beego/v2/core/validation" | ||
| 9 | +) | ||
| 10 | + | ||
| 11 | +type BatchDeleteMenuCommand struct { | ||
| 12 | + // 菜单ID列表 | ||
| 13 | + MenuIds []int64 `cname:"菜单ID列表" json:"menuIds,omitempty"` | ||
| 14 | +} | ||
| 15 | + | ||
| 16 | +func (batchDeleteMenuCommand *BatchDeleteMenuCommand) Valid(validation *validation.Validation) { | ||
| 17 | + //validation.SetError("CustomValid", "未实现的自定义认证") | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +func (batchDeleteMenuCommand *BatchDeleteMenuCommand) ValidateCommand() error { | ||
| 21 | + valid := validation.Validation{} | ||
| 22 | + b, err := valid.Valid(batchDeleteMenuCommand) | ||
| 23 | + if err != nil { | ||
| 24 | + return err | ||
| 25 | + } | ||
| 26 | + if !b { | ||
| 27 | + elem := reflect.TypeOf(batchDeleteMenuCommand).Elem() | ||
| 28 | + for _, validErr := range valid.Errors { | ||
| 29 | + field, isExist := elem.FieldByName(validErr.Field) | ||
| 30 | + if isExist { | ||
| 31 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
| 32 | + } else { | ||
| 33 | + return fmt.Errorf(validErr.Message) | ||
| 34 | + } | ||
| 35 | + } | ||
| 36 | + } | ||
| 37 | + return nil | ||
| 38 | +} |
| 1 | +package command | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + "reflect" | ||
| 6 | + "strings" | ||
| 7 | + | ||
| 8 | + "github.com/beego/beego/v2/core/validation" | ||
| 9 | +) | ||
| 10 | + | ||
| 11 | +type BatchEnableMenuCommand struct { | ||
| 12 | + // 菜单ID列表 | ||
| 13 | + MenuIds []int64 `cname:"菜单ID列表" json:"menuIds,omitempty"` | ||
| 14 | + // 菜单状态 | ||
| 15 | + Status int `cname:"菜单状态" json:"status,omitempty"` | ||
| 16 | +} | ||
| 17 | + | ||
| 18 | +func (batchEnableMenuCommand *BatchEnableMenuCommand) Valid(validation *validation.Validation) { | ||
| 19 | + //validation.SetError("CustomValid", "未实现的自定义认证") | ||
| 20 | +} | ||
| 21 | + | ||
| 22 | +func (batchEnableMenuCommand *BatchEnableMenuCommand) ValidateCommand() error { | ||
| 23 | + valid := validation.Validation{} | ||
| 24 | + b, err := valid.Valid(batchEnableMenuCommand) | ||
| 25 | + if err != nil { | ||
| 26 | + return err | ||
| 27 | + } | ||
| 28 | + if !b { | ||
| 29 | + elem := reflect.TypeOf(batchEnableMenuCommand).Elem() | ||
| 30 | + for _, validErr := range valid.Errors { | ||
| 31 | + field, isExist := elem.FieldByName(validErr.Field) | ||
| 32 | + if isExist { | ||
| 33 | + return fmt.Errorf(strings.Replace(validErr.Message, validErr.Field, field.Tag.Get("cname"), -1)) | ||
| 34 | + } else { | ||
| 35 | + return fmt.Errorf(validErr.Message) | ||
| 36 | + } | ||
| 37 | + } | ||
| 38 | + } | ||
| 39 | + return nil | ||
| 40 | +} |
| @@ -26,7 +26,7 @@ type CreateMenuCommand struct { | @@ -26,7 +26,7 @@ type CreateMenuCommand struct { | ||
| 26 | // 菜单是否公开状态,[0:隐藏],[1:显示],默认显示 | 26 | // 菜单是否公开状态,[0:隐藏],[1:显示],默认显示 |
| 27 | IsPublish int `json:"isPublish" valid:"Required"` | 27 | IsPublish int `json:"isPublish" valid:"Required"` |
| 28 | // 启用状态(启用:1 禁用:2),默认启用 | 28 | // 启用状态(启用:1 禁用:2),默认启用 |
| 29 | - EnableStatus int `json:"enableStatus" valid:"Required"` | 29 | + EnableStatus int `json:"enableStatus" ` |
| 30 | } | 30 | } |
| 31 | 31 | ||
| 32 | func (createMenuCommand *CreateMenuCommand) Valid(validation *validation.Validation) { | 32 | func (createMenuCommand *CreateMenuCommand) Valid(validation *validation.Validation) { |
| @@ -41,7 +41,7 @@ func (menuService *MenuService) CreateMenu(createMenuCommand *command.CreateMenu | @@ -41,7 +41,7 @@ func (menuService *MenuService) CreateMenu(createMenuCommand *command.CreateMenu | ||
| 41 | Sort: createMenuCommand.Sort, | 41 | Sort: createMenuCommand.Sort, |
| 42 | Remark: createMenuCommand.Desc, | 42 | Remark: createMenuCommand.Desc, |
| 43 | IsPublish: createMenuCommand.IsPublish, | 43 | IsPublish: createMenuCommand.IsPublish, |
| 44 | - EnableStatus: createMenuCommand.EnableStatus, | 44 | + EnableStatus: domain.MenuStatusDisable, |
| 45 | } | 45 | } |
| 46 | var menuRepository domain.MenuRepository | 46 | var menuRepository domain.MenuRepository |
| 47 | if value, err := factory.CreateMenuRepository(map[string]interface{}{ | 47 | if value, err := factory.CreateMenuRepository(map[string]interface{}{ |
| @@ -292,6 +292,81 @@ func (menuService *MenuService) UpdateMenu(updateMenuCommand *command.UpdateMenu | @@ -292,6 +292,81 @@ func (menuService *MenuService) UpdateMenu(updateMenuCommand *command.UpdateMenu | ||
| 292 | } | 292 | } |
| 293 | } | 293 | } |
| 294 | 294 | ||
| 295 | +// 批量删除菜单 | ||
| 296 | +func (menuService *MenuService) BatchDeleteMenu(batchDeleteMenu *command.BatchDeleteMenuCommand) (interface{}, error) { | ||
| 297 | + if err := batchDeleteMenu.ValidateCommand(); err != nil { | ||
| 298 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
| 299 | + } | ||
| 300 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
| 301 | + if err != nil { | ||
| 302 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 303 | + } | ||
| 304 | + if err := transactionContext.StartTransaction(); err != nil { | ||
| 305 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 306 | + } | ||
| 307 | + defer func() { | ||
| 308 | + transactionContext.RollbackTransaction() | ||
| 309 | + }() | ||
| 310 | + menuRepository, _, err := factory.FastPgMenu(transactionContext, 0) | ||
| 311 | + if err != nil { | ||
| 312 | + return nil, err | ||
| 313 | + } | ||
| 314 | + | ||
| 315 | + for i := 0; i < len(batchDeleteMenu.MenuIds); i++ { | ||
| 316 | + if menu, err := menuRepository.FindOne(map[string]interface{}{"menuId": batchDeleteMenu.MenuIds[i]}); err != nil { | ||
| 317 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 318 | + } else { | ||
| 319 | + if _, err := menuRepository.Remove(menu); err != nil { | ||
| 320 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 321 | + } | ||
| 322 | + } | ||
| 323 | + } | ||
| 324 | + | ||
| 325 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
| 326 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 327 | + } | ||
| 328 | + return struct{}{}, nil | ||
| 329 | +} | ||
| 330 | + | ||
| 331 | +// 批量删除菜单 | ||
| 332 | +func (menuService *MenuService) BatchEnableMenu(batchEnableMenu *command.BatchEnableMenuCommand) (interface{}, error) { | ||
| 333 | + if err := batchEnableMenu.ValidateCommand(); err != nil { | ||
| 334 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
| 335 | + } | ||
| 336 | + transactionContext, err := factory.CreateTransactionContext(nil) | ||
| 337 | + if err != nil { | ||
| 338 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 339 | + } | ||
| 340 | + if err := transactionContext.StartTransaction(); err != nil { | ||
| 341 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 342 | + } | ||
| 343 | + defer func() { | ||
| 344 | + transactionContext.RollbackTransaction() | ||
| 345 | + }() | ||
| 346 | + | ||
| 347 | + menuRepository, _, err := factory.FastPgMenu(transactionContext, 0) | ||
| 348 | + if err != nil { | ||
| 349 | + return nil, err | ||
| 350 | + } | ||
| 351 | + for i := 0; i < len(batchEnableMenu.MenuIds); i++ { | ||
| 352 | + if menu, err := menuRepository.FindOne(map[string]interface{}{"menuId": batchEnableMenu.MenuIds[i]}); err != nil { | ||
| 353 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 354 | + } else { | ||
| 355 | + if err := menu.SetPublic(batchEnableMenu.Status); err != nil { | ||
| 356 | + return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error()) | ||
| 357 | + } | ||
| 358 | + if _, err := menuRepository.Save(menu); err != nil { | ||
| 359 | + return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 360 | + } | ||
| 361 | + } | ||
| 362 | + } | ||
| 363 | + | ||
| 364 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
| 365 | + return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 366 | + } | ||
| 367 | + return struct{}{}, nil | ||
| 368 | +} | ||
| 369 | + | ||
| 295 | func NewMenuService(options map[string]interface{}) *MenuService { | 370 | func NewMenuService(options map[string]interface{}) *MenuService { |
| 296 | newMenuService := &MenuService{} | 371 | newMenuService := &MenuService{} |
| 297 | return newMenuService | 372 | return newMenuService |
| @@ -27,6 +27,8 @@ type ListUserQuery struct { | @@ -27,6 +27,8 @@ type ListUserQuery struct { | ||
| 27 | DepName string `cname:"部门名称" json:"depName,omitempty"` | 27 | DepName string `cname:"部门名称" json:"depName,omitempty"` |
| 28 | // 手机号码 | 28 | // 手机号码 |
| 29 | Phone string `cname:"手机号码" json:"phone,omitempty"` | 29 | Phone string `cname:"手机号码" json:"phone,omitempty"` |
| 30 | + // 用户类型 | ||
| 31 | + UserType int `cname:"用户类型 1:普通用户 2:共创用户 1024:企业注册用户" json:"userType,omitempty"` | ||
| 30 | // 实时拉取数据 (获取最新的) | 32 | // 实时拉取数据 (获取最新的) |
| 31 | PullRealTime bool `cname:"拉取最新数据" json:"pullRealTime,omitempty"` | 33 | PullRealTime bool `cname:"拉取最新数据" json:"pullRealTime,omitempty"` |
| 32 | } | 34 | } |
| @@ -151,6 +151,14 @@ func (menu *Menu) ValidMenuType() bool { | @@ -151,6 +151,14 @@ func (menu *Menu) ValidMenuType() bool { | ||
| 151 | return false | 151 | return false |
| 152 | } | 152 | } |
| 153 | 153 | ||
| 154 | +func (menu *Menu) SetPublic(status int) error { | ||
| 155 | + if !(status == MenuPublic || status == MenuPrivate) { | ||
| 156 | + return fmt.Errorf("非法的公开状态: %v", status) | ||
| 157 | + } | ||
| 158 | + menu.IsPublish = status | ||
| 159 | + return nil | ||
| 160 | +} | ||
| 161 | + | ||
| 154 | /***** 1.实现树 *****/ | 162 | /***** 1.实现树 *****/ |
| 155 | /*1.1 实现树的方法*/ | 163 | /*1.1 实现树的方法*/ |
| 156 | // GetParentPath 获取菜单路径 | 164 | // GetParentPath 获取菜单路径 |
| @@ -28,4 +28,6 @@ type Menu struct { | @@ -28,4 +28,6 @@ type Menu struct { | ||
| 28 | IsPublish int `comment:"菜单是否公开状态,[2:隐藏],[1:显示],默认显示"` | 28 | IsPublish int `comment:"菜单是否公开状态,[2:隐藏],[1:显示],默认显示"` |
| 29 | // 启用状态(启用:1 禁用:2),默认启用 | 29 | // 启用状态(启用:1 禁用:2),默认启用 |
| 30 | EnableStatus int `comment:"启用状态(启用:1 禁用:2),默认启用"` | 30 | EnableStatus int `comment:"启用状态(启用:1 禁用:2),默认启用"` |
| 31 | + // 删除时间 | ||
| 32 | + //DeletedAt time.Time `comment:"删除时间"` | ||
| 31 | } | 33 | } |
| @@ -196,6 +196,7 @@ func (repository *UserRepository) Find(queryOptions map[string]interface{}) (int | @@ -196,6 +196,7 @@ func (repository *UserRepository) Find(queryOptions map[string]interface{}) (int | ||
| 196 | query.SetWhereByQueryOption("company_id=?", "companyId") | 196 | query.SetWhereByQueryOption("company_id=?", "companyId") |
| 197 | query.SetWhereByQueryOption("organization_id=?", "organizationId") | 197 | query.SetWhereByQueryOption("organization_id=?", "organizationId") |
| 198 | query.SetWhereByQueryOption("user_base_id=?", "userBaseId") | 198 | query.SetWhereByQueryOption("user_base_id=?", "userBaseId") |
| 199 | + query.SetWhereByQueryOption("(user_type & ?)>0", "userType") | ||
| 199 | if v, ok := queryOptions["depName"]; ok && len(v.(string)) > 0 { | 200 | if v, ok := queryOptions["depName"]; ok && len(v.(string)) > 0 { |
| 200 | query.Where(fmt.Sprintf(`ext->>'depName' like '%%%v%%'`, v)) | 201 | query.Where(fmt.Sprintf(`ext->>'depName' like '%%%v%%'`, v)) |
| 201 | } | 202 | } |
| @@ -203,7 +204,7 @@ func (repository *UserRepository) Find(queryOptions map[string]interface{}) (int | @@ -203,7 +204,7 @@ func (repository *UserRepository) Find(queryOptions map[string]interface{}) (int | ||
| 203 | query.Where(fmt.Sprintf(`ext->>'userName' like '%%%v%%'`, v)) | 204 | query.Where(fmt.Sprintf(`ext->>'userName' like '%%%v%%'`, v)) |
| 204 | } | 205 | } |
| 205 | if v, ok := queryOptions["cooperationCompany"]; ok && len(v.(string)) > 0 { | 206 | if v, ok := queryOptions["cooperationCompany"]; ok && len(v.(string)) > 0 { |
| 206 | - query.Where(fmt.Sprintf(`cooperation_info->>'cooperationCompany'' like '%%%v%%'`, v)) | 207 | + query.Where(fmt.Sprintf(`cooperation_info->>'cooperationCompany' like '%%%v%%'`, v)) |
| 207 | } | 208 | } |
| 208 | query.SetOffsetAndLimit(999) | 209 | query.SetOffsetAndLimit(999) |
| 209 | query.SetOrderDirect("user_id", "DESC") | 210 | query.SetOrderDirect("user_id", "DESC") |
| @@ -72,3 +72,19 @@ func (controller *MenuController) SearchMenu() { | @@ -72,3 +72,19 @@ func (controller *MenuController) SearchMenu() { | ||
| 72 | data, err := menuService.ListMenu(listMenuQuery) | 72 | data, err := menuService.ListMenu(listMenuQuery) |
| 73 | controller.Response(data, err) | 73 | controller.Response(data, err) |
| 74 | } | 74 | } |
| 75 | + | ||
| 76 | +func (controller *MenuController) BatchDeleteMenu() { | ||
| 77 | + menuService := service.NewMenuService(nil) | ||
| 78 | + batchDeleteMenuCommand := &command.BatchDeleteMenuCommand{} | ||
| 79 | + controller.Unmarshal(batchDeleteMenuCommand) | ||
| 80 | + data, err := menuService.BatchDeleteMenu(batchDeleteMenuCommand) | ||
| 81 | + controller.Response(data, err) | ||
| 82 | +} | ||
| 83 | + | ||
| 84 | +func (controller *MenuController) BatchEnableMenu() { | ||
| 85 | + menuService := service.NewMenuService(nil) | ||
| 86 | + batchEnableMenu := &command.BatchEnableMenuCommand{} | ||
| 87 | + controller.Unmarshal(batchEnableMenu) | ||
| 88 | + data, err := menuService.BatchEnableMenu(batchEnableMenu) | ||
| 89 | + controller.Response(data, err) | ||
| 90 | +} |
| @@ -12,6 +12,8 @@ func init() { | @@ -12,6 +12,8 @@ func init() { | ||
| 12 | web.Router("/menus/:menuId", &controllers.MenuController{}, "Delete:RemoveMenu") | 12 | web.Router("/menus/:menuId", &controllers.MenuController{}, "Delete:RemoveMenu") |
| 13 | web.Router("/menus/", &controllers.MenuController{}, "Get:ListMenu") | 13 | web.Router("/menus/", &controllers.MenuController{}, "Get:ListMenu") |
| 14 | web.Router("/menus/search", &controllers.MenuController{}, "Post:SearchMenu") | 14 | web.Router("/menus/search", &controllers.MenuController{}, "Post:SearchMenu") |
| 15 | + web.Router("/menus/batch-delete", &controllers.MenuController{}, "Post:BatchDeleteMenu") | ||
| 16 | + web.Router("/menus/batch-enable", &controllers.MenuController{}, "Post:BatchEnableMenu") | ||
| 15 | 17 | ||
| 16 | web.Router("/v1/web/menus/", &controllers.MenuController{}, "Post:CreateMenu") | 18 | web.Router("/v1/web/menus/", &controllers.MenuController{}, "Post:CreateMenu") |
| 17 | web.Router("/v1/web/menus/:menuId", &controllers.MenuController{}, "Put:UpdateMenu") | 19 | web.Router("/v1/web/menus/:menuId", &controllers.MenuController{}, "Put:UpdateMenu") |
| @@ -19,6 +21,8 @@ func init() { | @@ -19,6 +21,8 @@ func init() { | ||
| 19 | web.Router("/v1/web/menus/:menuId", &controllers.MenuController{}, "Delete:RemoveMenu") | 21 | web.Router("/v1/web/menus/:menuId", &controllers.MenuController{}, "Delete:RemoveMenu") |
| 20 | web.Router("/v1/web/menus/search", &controllers.MenuController{}, "Get:ListMenu") | 22 | web.Router("/v1/web/menus/search", &controllers.MenuController{}, "Get:ListMenu") |
| 21 | web.Router("/v1/web/menus/search", &controllers.MenuController{}, "Post:SearchMenu") | 23 | web.Router("/v1/web/menus/search", &controllers.MenuController{}, "Post:SearchMenu") |
| 24 | + web.Router("/v1/web/menus/batch-delete", &controllers.MenuController{}, "Post:BatchDeleteMenu") | ||
| 25 | + web.Router("/v1/web/menus/batch-enable", &controllers.MenuController{}, "Post:BatchEnableMenu") | ||
| 22 | 26 | ||
| 23 | web.Router("/v1/web/common/dictionary/search", &controllers.CommonController{}, "Post:DictionarySearch") | 27 | web.Router("/v1/web/common/dictionary/search", &controllers.CommonController{}, "Post:DictionarySearch") |
| 24 | } | 28 | } |
| 1 | +package menu | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "net/http" | ||
| 5 | + | ||
| 6 | + "github.com/gavv/httpexpect" | ||
| 7 | + . "github.com/onsi/ginkgo" | ||
| 8 | + . "github.com/onsi/gomega" | ||
| 9 | + pG "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/infrastructure/pg" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +var _ = Describe("批量删除菜单", func() { | ||
| 13 | + var menuId int64 | ||
| 14 | + BeforeEach(func() { | ||
| 15 | + _, err := pG.DB.QueryOne( | ||
| 16 | + pg.Scan(&menuId), | ||
| 17 | + "INSERT INTO menus (menu_id, parent_id, menu_name, code, access_code, menu_type, icon, sort, remark, category, parent_path, enable_status, is_publish) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING menu_id", | ||
| 18 | + "testMenuId", "testParentId", "testMenuName", "testCode", "testAccessCode", "testMenuType", "testIcon", "testSort", "testRemark", "testCategory", "testParentPath", "testEnableStatus", "testIsPublish") | ||
| 19 | + Expect(err).NotTo(HaveOccurred()) | ||
| 20 | + }) | ||
| 21 | + Describe("批量删除菜单", func() { | ||
| 22 | + Context("", func() { | ||
| 23 | + It("", func() { | ||
| 24 | + httpExpect := httpexpect.New(GinkgoT(), server.URL) | ||
| 25 | + body := map[string]interface{}{ | ||
| 26 | + "menuIds": "array", | ||
| 27 | + } | ||
| 28 | + httpExpect.POST("/menu/batch-delete"). | ||
| 29 | + WithJSON(body). | ||
| 30 | + Expect(). | ||
| 31 | + Status(http.StatusOK). | ||
| 32 | + JSON(). | ||
| 33 | + Object(). | ||
| 34 | + ContainsKey("code").ValueEqual("code", 0). | ||
| 35 | + ContainsKey("msg").ValueEqual("msg", "ok"). | ||
| 36 | + ContainsKey("data").Value("data").Object() | ||
| 37 | + }) | ||
| 38 | + }) | ||
| 39 | + }) | ||
| 40 | + AfterEach(func() { | ||
| 41 | + _, err := pG.DB.Exec("DELETE FROM menus WHERE true") | ||
| 42 | + Expect(err).NotTo(HaveOccurred()) | ||
| 43 | + }) | ||
| 44 | +}) |
| 1 | +package menu | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "net/http" | ||
| 5 | + | ||
| 6 | + "github.com/gavv/httpexpect" | ||
| 7 | + . "github.com/onsi/ginkgo" | ||
| 8 | + . "github.com/onsi/gomega" | ||
| 9 | + pG "gitlab.fjmaimaimai.com/allied-creation/allied-creation-user/pkg/infrastructure/pg" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +var _ = Describe("批量启用菜单", func() { | ||
| 13 | + var menuId int64 | ||
| 14 | + BeforeEach(func() { | ||
| 15 | + _, err := pG.DB.QueryOne( | ||
| 16 | + pg.Scan(&menuId), | ||
| 17 | + "INSERT INTO menus (menu_id, parent_id, menu_name, code, access_code, menu_type, icon, sort, remark, category, parent_path, enable_status, is_publish) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) RETURNING menu_id", | ||
| 18 | + "testMenuId", "testParentId", "testMenuName", "testCode", "testAccessCode", "testMenuType", "testIcon", "testSort", "testRemark", "testCategory", "testParentPath", "testEnableStatus", "testIsPublish") | ||
| 19 | + Expect(err).NotTo(HaveOccurred()) | ||
| 20 | + }) | ||
| 21 | + Describe("批量启用菜单", func() { | ||
| 22 | + Context("", func() { | ||
| 23 | + It("", func() { | ||
| 24 | + httpExpect := httpexpect.New(GinkgoT(), server.URL) | ||
| 25 | + body := map[string]interface{}{ | ||
| 26 | + "menuIds": "array", | ||
| 27 | + "status": "int", | ||
| 28 | + } | ||
| 29 | + httpExpect.POST("/menu/batch-enable"). | ||
| 30 | + WithJSON(body). | ||
| 31 | + Expect(). | ||
| 32 | + Status(http.StatusOK). | ||
| 33 | + JSON(). | ||
| 34 | + Object(). | ||
| 35 | + ContainsKey("code").ValueEqual("code", 0). | ||
| 36 | + ContainsKey("msg").ValueEqual("msg", "ok"). | ||
| 37 | + ContainsKey("data").Value("data").Object() | ||
| 38 | + }) | ||
| 39 | + }) | ||
| 40 | + }) | ||
| 41 | + AfterEach(func() { | ||
| 42 | + _, err := pG.DB.Exec("DELETE FROM menus WHERE true") | ||
| 43 | + Expect(err).NotTo(HaveOccurred()) | ||
| 44 | + }) | ||
| 45 | +}) |
-
请 注册 或 登录 后发表评论