187 lines
5.0 KiB
Go
187 lines
5.0 KiB
Go
package auth
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/break/junhong_cmp_fiber/internal/model"
|
|
"github.com/break/junhong_cmp_fiber/pkg/constants"
|
|
"github.com/stretchr/testify/assert"
|
|
"go.uber.org/zap"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func TestClassifyPermissions_PlatformFilter(t *testing.T) {
|
|
logger, _ := zap.NewDevelopment()
|
|
service := &Service{logger: logger}
|
|
|
|
permissions := []*model.Permission{
|
|
{
|
|
Model: gorm.Model{ID: 1},
|
|
PermCode: "dashboard:menu",
|
|
PermName: "仪表盘",
|
|
PermType: constants.PermissionTypeMenu,
|
|
Platform: constants.PlatformAll,
|
|
Status: constants.StatusEnabled,
|
|
},
|
|
{
|
|
Model: gorm.Model{ID: 2},
|
|
PermCode: "user:menu",
|
|
PermName: "用户管理",
|
|
PermType: constants.PermissionTypeMenu,
|
|
Platform: constants.PlatformWeb,
|
|
Status: constants.StatusEnabled,
|
|
},
|
|
{
|
|
Model: gorm.Model{ID: 3},
|
|
PermCode: "mobile:menu",
|
|
PermName: "移动端菜单",
|
|
PermType: constants.PermissionTypeMenu,
|
|
Platform: constants.PlatformH5,
|
|
Status: constants.StatusEnabled,
|
|
},
|
|
}
|
|
|
|
allCodes, menus, buttons, err := service.classifyPermissions(permissions, constants.PlatformWeb)
|
|
|
|
assert.NoError(t, err)
|
|
assert.Len(t, allCodes, 2)
|
|
assert.Contains(t, allCodes, "dashboard:menu")
|
|
assert.Contains(t, allCodes, "user:menu")
|
|
assert.NotContains(t, allCodes, "mobile:menu")
|
|
assert.Len(t, menus, 2)
|
|
assert.Empty(t, buttons)
|
|
}
|
|
|
|
func TestClassifyPermissions_MenuAndButton(t *testing.T) {
|
|
logger, _ := zap.NewDevelopment()
|
|
service := &Service{logger: logger}
|
|
|
|
permissions := []*model.Permission{
|
|
{
|
|
Model: gorm.Model{ID: 1},
|
|
PermCode: "user:menu",
|
|
PermName: "用户管理",
|
|
PermType: constants.PermissionTypeMenu,
|
|
Platform: constants.PlatformAll,
|
|
Status: constants.StatusEnabled,
|
|
},
|
|
{
|
|
Model: gorm.Model{ID: 2},
|
|
PermCode: "user:create",
|
|
PermName: "创建用户",
|
|
PermType: constants.PermissionTypeButton,
|
|
Platform: constants.PlatformAll,
|
|
Status: constants.StatusEnabled,
|
|
},
|
|
{
|
|
Model: gorm.Model{ID: 3},
|
|
PermCode: "user:delete",
|
|
PermName: "删除用户",
|
|
PermType: constants.PermissionTypeButton,
|
|
Platform: constants.PlatformAll,
|
|
Status: constants.StatusEnabled,
|
|
},
|
|
}
|
|
|
|
allCodes, menus, buttons, err := service.classifyPermissions(permissions, constants.PlatformWeb)
|
|
|
|
assert.NoError(t, err)
|
|
assert.Len(t, allCodes, 3)
|
|
assert.Len(t, menus, 1)
|
|
assert.Equal(t, "user:menu", menus[0].PermCode)
|
|
assert.Len(t, buttons, 2)
|
|
assert.Contains(t, buttons, "user:create")
|
|
assert.Contains(t, buttons, "user:delete")
|
|
}
|
|
|
|
func TestClassifyPermissions_AllPermissions(t *testing.T) {
|
|
logger, _ := zap.NewDevelopment()
|
|
service := &Service{logger: logger}
|
|
|
|
permissions := []*model.Permission{
|
|
{
|
|
Model: gorm.Model{ID: 1},
|
|
PermCode: "menu1",
|
|
PermName: "菜单1",
|
|
PermType: constants.PermissionTypeMenu,
|
|
Platform: constants.PlatformAll,
|
|
Status: constants.StatusEnabled,
|
|
},
|
|
{
|
|
Model: gorm.Model{ID: 2},
|
|
PermCode: "button1",
|
|
PermName: "按钮1",
|
|
PermType: constants.PermissionTypeButton,
|
|
Platform: constants.PlatformAll,
|
|
Status: constants.StatusEnabled,
|
|
},
|
|
}
|
|
|
|
allCodes, _, _, err := service.classifyPermissions(permissions, constants.PlatformWeb)
|
|
|
|
assert.NoError(t, err)
|
|
assert.Len(t, allCodes, 2)
|
|
assert.Contains(t, allCodes, "menu1")
|
|
assert.Contains(t, allCodes, "button1")
|
|
}
|
|
|
|
func TestClassifyPermissions_PlatformAll(t *testing.T) {
|
|
logger, _ := zap.NewDevelopment()
|
|
service := &Service{logger: logger}
|
|
|
|
permissions := []*model.Permission{
|
|
{
|
|
Model: gorm.Model{ID: 1},
|
|
PermCode: "common:menu",
|
|
PermName: "通用菜单",
|
|
PermType: constants.PermissionTypeMenu,
|
|
Platform: constants.PlatformAll,
|
|
Status: constants.StatusEnabled,
|
|
},
|
|
}
|
|
|
|
allCodesWeb, menusWeb, _, errWeb := service.classifyPermissions(permissions, constants.PlatformWeb)
|
|
allCodesH5, menusH5, _, errH5 := service.classifyPermissions(permissions, constants.PlatformH5)
|
|
|
|
assert.NoError(t, errWeb)
|
|
assert.NoError(t, errH5)
|
|
assert.Len(t, allCodesWeb, 1)
|
|
assert.Len(t, allCodesH5, 1)
|
|
assert.Len(t, menusWeb, 1)
|
|
assert.Len(t, menusH5, 1)
|
|
assert.Equal(t, "common:menu", menusWeb[0].PermCode)
|
|
assert.Equal(t, "common:menu", menusH5[0].PermCode)
|
|
}
|
|
|
|
func TestClassifyPermissions_DisabledPermissions(t *testing.T) {
|
|
logger, _ := zap.NewDevelopment()
|
|
service := &Service{logger: logger}
|
|
|
|
permissions := []*model.Permission{
|
|
{
|
|
Model: gorm.Model{ID: 1},
|
|
PermCode: "enabled:menu",
|
|
PermName: "启用菜单",
|
|
PermType: constants.PermissionTypeMenu,
|
|
Platform: constants.PlatformAll,
|
|
Status: constants.StatusEnabled,
|
|
},
|
|
{
|
|
Model: gorm.Model{ID: 2},
|
|
PermCode: "disabled:menu",
|
|
PermName: "禁用菜单",
|
|
PermType: constants.PermissionTypeMenu,
|
|
Platform: constants.PlatformAll,
|
|
Status: constants.StatusDisabled,
|
|
},
|
|
}
|
|
|
|
allCodes, menus, _, err := service.classifyPermissions(permissions, constants.PlatformWeb)
|
|
|
|
assert.NoError(t, err)
|
|
assert.Len(t, allCodes, 1)
|
|
assert.Contains(t, allCodes, "enabled:menu")
|
|
assert.NotContains(t, allCodes, "disabled:menu")
|
|
assert.Len(t, menus, 1)
|
|
}
|