| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390 |
- package auth
- import (
- "context"
- "errors"
- "testing"
- "perms-system-server/internal/consts"
- "perms-system-server/internal/model/dept"
- "perms-system-server/internal/model/productmember"
- "perms-system-server/internal/testutil/mocks"
- "github.com/stretchr/testify/assert"
- "go.uber.org/mock/gomock"
- )
- var errDB = errors.New("db error")
- // TC-0232: isSuperAdmin=true, deptId=0, FindAllCodesByProductCode返回err
- func TestGetUserPerms_Mock_SuperAdmin_FindAllCodesFail(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- mockPerm := mocks.NewMockSysPermModel(ctrl)
- mockPerm.EXPECT().FindAllCodesByProductCode(gomock.Any(), "pc").Return(nil, errDB)
- svcCtx := mocks.NewMockServiceContext(mocks.MockModels{
- Perm: mockPerm,
- })
- perms, memberType, err := GetUserPerms(context.Background(), svcCtx, 1, 0, "pc", true)
- assert.ErrorIs(t, err, errDB)
- assert.Nil(t, perms)
- assert.Empty(t, memberType)
- }
- // TC-0234: deptId=0, FindOneByProductCodeUserId返回DB error
- func TestGetUserPerms_Mock_MemberQueryDBError(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- mockPM := mocks.NewMockSysProductMemberModel(ctrl)
- mockPM.EXPECT().FindOneByProductCodeUserId(gomock.Any(), "pc", int64(1)).Return(nil, errDB)
- svcCtx := mocks.NewMockServiceContext(mocks.MockModels{
- ProductMember: mockPM,
- })
- perms, memberType, err := GetUserPerms(context.Background(), svcCtx, 1, 0, "pc", false)
- assert.ErrorIs(t, err, errDB)
- assert.Nil(t, perms)
- assert.Empty(t, memberType)
- }
- // TC-0237: deptId=0, MemberType="DEVELOPER", FindAllCodesByProductCode失败
- func TestGetUserPerms_Mock_Developer_FindAllCodesFail(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- mockPM := mocks.NewMockSysProductMemberModel(ctrl)
- mockPM.EXPECT().FindOneByProductCodeUserId(gomock.Any(), "pc", int64(1)).
- Return(&productmember.SysProductMember{MemberType: consts.MemberTypeDeveloper}, nil)
- mockPerm := mocks.NewMockSysPermModel(ctrl)
- mockPerm.EXPECT().FindAllCodesByProductCode(gomock.Any(), "pc").Return(nil, errDB)
- svcCtx := mocks.NewMockServiceContext(mocks.MockModels{
- ProductMember: mockPM,
- Perm: mockPerm,
- })
- perms, memberType, err := GetUserPerms(context.Background(), svcCtx, 1, 0, "pc", false)
- assert.ErrorIs(t, err, errDB)
- assert.Nil(t, perms)
- assert.Equal(t, consts.MemberTypeDeveloper, memberType)
- }
- // TC-0252: deptId=0, 返回err
- func TestGetUserPerms_Mock_Member_FindRoleIdsFail(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- mockPM := mocks.NewMockSysProductMemberModel(ctrl)
- mockPM.EXPECT().FindOneByProductCodeUserId(gomock.Any(), "pc", int64(1)).
- Return(&productmember.SysProductMember{MemberType: consts.MemberTypeMember}, nil)
- mockUR := mocks.NewMockSysUserRoleModel(ctrl)
- mockUR.EXPECT().FindRoleIdsByUserId(gomock.Any(), int64(1)).Return(nil, errDB)
- svcCtx := mocks.NewMockServiceContext(mocks.MockModels{
- ProductMember: mockPM,
- UserRole: mockUR,
- })
- perms, memberType, err := GetUserPerms(context.Background(), svcCtx, 1, 0, "pc", false)
- assert.ErrorIs(t, err, errDB)
- assert.Nil(t, perms)
- assert.Equal(t, consts.MemberTypeMember, memberType)
- }
- // TC-0253: deptId=0, 返回err
- func TestGetUserPerms_Mock_Member_FindRoleByIdsFail(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- mockPM := mocks.NewMockSysProductMemberModel(ctrl)
- mockPM.EXPECT().FindOneByProductCodeUserId(gomock.Any(), "pc", int64(1)).
- Return(&productmember.SysProductMember{MemberType: consts.MemberTypeMember}, nil)
- mockUR := mocks.NewMockSysUserRoleModel(ctrl)
- mockUR.EXPECT().FindRoleIdsByUserId(gomock.Any(), int64(1)).Return([]int64{10, 20}, nil)
- mockRole := mocks.NewMockSysRoleModel(ctrl)
- mockRole.EXPECT().FindByIds(gomock.Any(), []int64{10, 20}).Return(nil, errDB)
- svcCtx := mocks.NewMockServiceContext(mocks.MockModels{
- ProductMember: mockPM,
- UserRole: mockUR,
- Role: mockRole,
- })
- perms, memberType, err := GetUserPerms(context.Background(), svcCtx, 1, 0, "pc", false)
- assert.ErrorIs(t, err, errDB)
- assert.Nil(t, perms)
- assert.Equal(t, consts.MemberTypeMember, memberType)
- }
- // TC-0254: deptId=0, 返回err
- func TestGetUserPerms_Mock_Member_FindPermIdsByRoleIdsFail(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- mockPM := mocks.NewMockSysProductMemberModel(ctrl)
- mockPM.EXPECT().FindOneByProductCodeUserId(gomock.Any(), "pc", int64(1)).
- Return(&productmember.SysProductMember{MemberType: consts.MemberTypeMember}, nil)
- mockUR := mocks.NewMockSysUserRoleModel(ctrl)
- mockUR.EXPECT().FindRoleIdsByUserId(gomock.Any(), int64(1)).Return([]int64{}, nil)
- mockRP := mocks.NewMockSysRolePermModel(ctrl)
- mockRP.EXPECT().FindPermIdsByRoleIds(gomock.Any(), gomock.Any()).Return(nil, errDB)
- svcCtx := mocks.NewMockServiceContext(mocks.MockModels{
- ProductMember: mockPM,
- UserRole: mockUR,
- RolePerm: mockRP,
- })
- perms, memberType, err := GetUserPerms(context.Background(), svcCtx, 1, 0, "pc", false)
- assert.ErrorIs(t, err, errDB)
- assert.Nil(t, perms)
- assert.Equal(t, consts.MemberTypeMember, memberType)
- }
- // TC-0255: deptId=0, 返回err
- func TestGetUserPerms_Mock_Member_FindAllowPermIdsFail(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- mockPM := mocks.NewMockSysProductMemberModel(ctrl)
- mockPM.EXPECT().FindOneByProductCodeUserId(gomock.Any(), "pc", int64(1)).
- Return(&productmember.SysProductMember{MemberType: consts.MemberTypeMember}, nil)
- mockUR := mocks.NewMockSysUserRoleModel(ctrl)
- mockUR.EXPECT().FindRoleIdsByUserId(gomock.Any(), int64(1)).Return([]int64{}, nil)
- mockRP := mocks.NewMockSysRolePermModel(ctrl)
- mockRP.EXPECT().FindPermIdsByRoleIds(gomock.Any(), gomock.Any()).Return([]int64{}, nil)
- mockUP := mocks.NewMockSysUserPermModel(ctrl)
- mockUP.EXPECT().FindPermIdsByUserIdAndEffect(gomock.Any(), int64(1), consts.PermEffectAllow).Return(nil, errDB)
- svcCtx := mocks.NewMockServiceContext(mocks.MockModels{
- ProductMember: mockPM,
- UserRole: mockUR,
- RolePerm: mockRP,
- UserPerm: mockUP,
- })
- perms, memberType, err := GetUserPerms(context.Background(), svcCtx, 1, 0, "pc", false)
- assert.ErrorIs(t, err, errDB)
- assert.Nil(t, perms)
- assert.Equal(t, consts.MemberTypeMember, memberType)
- }
- // TC-0256: deptId=0, 返回err
- func TestGetUserPerms_Mock_Member_FindDenyPermIdsFail(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- mockPM := mocks.NewMockSysProductMemberModel(ctrl)
- mockPM.EXPECT().FindOneByProductCodeUserId(gomock.Any(), "pc", int64(1)).
- Return(&productmember.SysProductMember{MemberType: consts.MemberTypeMember}, nil)
- mockUR := mocks.NewMockSysUserRoleModel(ctrl)
- mockUR.EXPECT().FindRoleIdsByUserId(gomock.Any(), int64(1)).Return([]int64{}, nil)
- mockRP := mocks.NewMockSysRolePermModel(ctrl)
- mockRP.EXPECT().FindPermIdsByRoleIds(gomock.Any(), gomock.Any()).Return([]int64{}, nil)
- mockUP := mocks.NewMockSysUserPermModel(ctrl)
- mockUP.EXPECT().FindPermIdsByUserIdAndEffect(gomock.Any(), int64(1), consts.PermEffectAllow).Return([]int64{}, nil)
- mockUP.EXPECT().FindPermIdsByUserIdAndEffect(gomock.Any(), int64(1), consts.PermEffectDeny).Return(nil, errDB)
- svcCtx := mocks.NewMockServiceContext(mocks.MockModels{
- ProductMember: mockPM,
- UserRole: mockUR,
- RolePerm: mockRP,
- UserPerm: mockUP,
- })
- perms, memberType, err := GetUserPerms(context.Background(), svcCtx, 1, 0, "pc", false)
- assert.ErrorIs(t, err, errDB)
- assert.Nil(t, perms)
- assert.Equal(t, consts.MemberTypeMember, memberType)
- }
- // TC-0257: deptId=0, 返回err
- func TestGetUserPerms_Mock_Member_FindPermByIdsFail(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- mockPM := mocks.NewMockSysProductMemberModel(ctrl)
- mockPM.EXPECT().FindOneByProductCodeUserId(gomock.Any(), "pc", int64(1)).
- Return(&productmember.SysProductMember{MemberType: consts.MemberTypeMember}, nil)
- mockUR := mocks.NewMockSysUserRoleModel(ctrl)
- mockUR.EXPECT().FindRoleIdsByUserId(gomock.Any(), int64(1)).Return([]int64{}, nil)
- mockRP := mocks.NewMockSysRolePermModel(ctrl)
- mockRP.EXPECT().FindPermIdsByRoleIds(gomock.Any(), gomock.Any()).Return([]int64{}, nil)
- mockUP := mocks.NewMockSysUserPermModel(ctrl)
- mockUP.EXPECT().FindPermIdsByUserIdAndEffect(gomock.Any(), int64(1), consts.PermEffectAllow).Return([]int64{100}, nil)
- mockUP.EXPECT().FindPermIdsByUserIdAndEffect(gomock.Any(), int64(1), consts.PermEffectDeny).Return([]int64{}, nil)
- mockPerm := mocks.NewMockSysPermModel(ctrl)
- mockPerm.EXPECT().FindByIds(gomock.Any(), gomock.Any()).Return(nil, errDB)
- svcCtx := mocks.NewMockServiceContext(mocks.MockModels{
- ProductMember: mockPM,
- UserRole: mockUR,
- RolePerm: mockRP,
- UserPerm: mockUP,
- Perm: mockPerm,
- })
- perms, memberType, err := GetUserPerms(context.Background(), svcCtx, 1, 0, "pc", false)
- assert.ErrorIs(t, err, errDB)
- assert.Nil(t, perms)
- assert.Equal(t, consts.MemberTypeMember, memberType)
- }
- // TC-0238: deptId>0, MemberType="MEMBER", SysDeptModel.FindOne返回DeptType="DEV", FindAllCodesByProductCode返回["a","b","c"]
- func TestGetUserPerms_Mock_Member_DevDeptGetAllPerms(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- mockPM := mocks.NewMockSysProductMemberModel(ctrl)
- mockPM.EXPECT().FindOneByProductCodeUserId(gomock.Any(), "pc", int64(1)).
- Return(&productmember.SysProductMember{MemberType: consts.MemberTypeMember}, nil)
- mockDept := mocks.NewMockSysDeptModel(ctrl)
- mockDept.EXPECT().FindOne(gomock.Any(), int64(100)).
- Return(&dept.SysDept{Id: 100, DeptType: consts.DeptTypeDev}, nil)
- mockPerm := mocks.NewMockSysPermModel(ctrl)
- mockPerm.EXPECT().FindAllCodesByProductCode(gomock.Any(), "pc").Return([]string{"p1", "p2", "p3"}, nil)
- svcCtx := mocks.NewMockServiceContext(mocks.MockModels{
- ProductMember: mockPM,
- Dept: mockDept,
- Perm: mockPerm,
- })
- perms, memberType, err := GetUserPerms(context.Background(), svcCtx, 1, 100, "pc", false)
- assert.NoError(t, err)
- assert.Equal(t, consts.MemberTypeMember, memberType)
- assert.ElementsMatch(t, []string{"p1", "p2", "p3"}, perms)
- }
- // TC-0239: deptId>0, DeptType="DEV", FindAllCodesByProductCode返回err
- func TestGetUserPerms_Mock_Member_DevDeptFindAllCodesFail(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- mockPM := mocks.NewMockSysProductMemberModel(ctrl)
- mockPM.EXPECT().FindOneByProductCodeUserId(gomock.Any(), "pc", int64(1)).
- Return(&productmember.SysProductMember{MemberType: consts.MemberTypeMember}, nil)
- mockDept := mocks.NewMockSysDeptModel(ctrl)
- mockDept.EXPECT().FindOne(gomock.Any(), int64(100)).
- Return(&dept.SysDept{Id: 100, DeptType: consts.DeptTypeDev}, nil)
- mockPerm := mocks.NewMockSysPermModel(ctrl)
- mockPerm.EXPECT().FindAllCodesByProductCode(gomock.Any(), "pc").Return(nil, errDB)
- svcCtx := mocks.NewMockServiceContext(mocks.MockModels{
- ProductMember: mockPM,
- Dept: mockDept,
- Perm: mockPerm,
- })
- perms, memberType, err := GetUserPerms(context.Background(), svcCtx, 1, 100, "pc", false)
- assert.ErrorIs(t, err, errDB)
- assert.Nil(t, perms)
- assert.Equal(t, consts.MemberTypeMember, memberType)
- }
- // TC-0241: deptId>0, FindOne返回ErrNotFound
- func TestGetUserPerms_Mock_Member_DeptFindOneFail_FallsThrough(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- mockPM := mocks.NewMockSysProductMemberModel(ctrl)
- mockPM.EXPECT().FindOneByProductCodeUserId(gomock.Any(), "pc", int64(1)).
- Return(&productmember.SysProductMember{MemberType: consts.MemberTypeMember}, nil)
- mockDept := mocks.NewMockSysDeptModel(ctrl)
- mockDept.EXPECT().FindOne(gomock.Any(), int64(100)).
- Return(nil, errors.New("dept not found"))
- mockUR := mocks.NewMockSysUserRoleModel(ctrl)
- mockUR.EXPECT().FindRoleIdsByUserId(gomock.Any(), int64(1)).Return([]int64{}, nil)
- mockRP := mocks.NewMockSysRolePermModel(ctrl)
- mockRP.EXPECT().FindPermIdsByRoleIds(gomock.Any(), gomock.Any()).Return([]int64{}, nil)
- mockUP := mocks.NewMockSysUserPermModel(ctrl)
- mockUP.EXPECT().FindPermIdsByUserIdAndEffect(gomock.Any(), int64(1), consts.PermEffectAllow).Return([]int64{}, nil)
- mockUP.EXPECT().FindPermIdsByUserIdAndEffect(gomock.Any(), int64(1), consts.PermEffectDeny).Return([]int64{}, nil)
- mockPerm := mocks.NewMockSysPermModel(ctrl)
- mockPerm.EXPECT().FindByIds(gomock.Any(), gomock.Any()).Return(nil, nil)
- svcCtx := mocks.NewMockServiceContext(mocks.MockModels{
- ProductMember: mockPM,
- Dept: mockDept,
- UserRole: mockUR,
- RolePerm: mockRP,
- UserPerm: mockUP,
- Perm: mockPerm,
- })
- perms, memberType, err := GetUserPerms(context.Background(), svcCtx, 1, 100, "pc", false)
- assert.NoError(t, err)
- assert.Equal(t, consts.MemberTypeMember, memberType)
- assert.Empty(t, perms)
- }
- // TC-0240: deptId>0, DeptType="NORMAL"
- func TestGetUserPerms_Mock_Member_NormalDeptFallsThrough(t *testing.T) {
- ctrl := gomock.NewController(t)
- defer ctrl.Finish()
- mockPM := mocks.NewMockSysProductMemberModel(ctrl)
- mockPM.EXPECT().FindOneByProductCodeUserId(gomock.Any(), "pc", int64(1)).
- Return(&productmember.SysProductMember{MemberType: consts.MemberTypeMember}, nil)
- mockDept := mocks.NewMockSysDeptModel(ctrl)
- mockDept.EXPECT().FindOne(gomock.Any(), int64(100)).
- Return(&dept.SysDept{Id: 100, DeptType: consts.DeptTypeNormal}, nil)
- mockUR := mocks.NewMockSysUserRoleModel(ctrl)
- mockUR.EXPECT().FindRoleIdsByUserId(gomock.Any(), int64(1)).Return([]int64{}, nil)
- mockRP := mocks.NewMockSysRolePermModel(ctrl)
- mockRP.EXPECT().FindPermIdsByRoleIds(gomock.Any(), gomock.Any()).Return([]int64{}, nil)
- mockUP := mocks.NewMockSysUserPermModel(ctrl)
- mockUP.EXPECT().FindPermIdsByUserIdAndEffect(gomock.Any(), int64(1), consts.PermEffectAllow).Return([]int64{}, nil)
- mockUP.EXPECT().FindPermIdsByUserIdAndEffect(gomock.Any(), int64(1), consts.PermEffectDeny).Return([]int64{}, nil)
- mockPerm := mocks.NewMockSysPermModel(ctrl)
- mockPerm.EXPECT().FindByIds(gomock.Any(), gomock.Any()).Return(nil, nil)
- svcCtx := mocks.NewMockServiceContext(mocks.MockModels{
- ProductMember: mockPM,
- Dept: mockDept,
- UserRole: mockUR,
- RolePerm: mockRP,
- UserPerm: mockUP,
- Perm: mockPerm,
- })
- perms, memberType, err := GetUserPerms(context.Background(), svcCtx, 1, 100, "pc", false)
- assert.NoError(t, err)
- assert.Equal(t, consts.MemberTypeMember, memberType)
- assert.Empty(t, perms)
- }
|