package user import ( stderrors "errors" "testing" modelUser "github.com/perfect-panel/server/internal/model/user" "github.com/perfect-panel/server/pkg/xerr" pkgerrors "github.com/pkg/errors" "github.com/stretchr/testify/require" ) func extractFamilyJoinCode(err error) uint32 { if err == nil { return 0 } var codeErr *xerr.CodeError if stderrors.As(pkgerrors.Cause(err), &codeErr) { return codeErr.GetErrCode() } return 0 } func TestValidateMemberJoinConflict(t *testing.T) { ownerFamilyID := int64(11) testCases := []struct { name string ownerFamily int64 memberRecord *modelUser.UserFamilyMember wantCode uint32 }{ { name: "no member record", ownerFamily: ownerFamilyID, wantCode: 0, }, { name: "same family active member", ownerFamily: ownerFamilyID, memberRecord: &modelUser.UserFamilyMember{ FamilyId: ownerFamilyID, Status: modelUser.FamilyMemberActive, }, wantCode: xerr.FamilyAlreadyBound, }, { name: "same family left member", ownerFamily: ownerFamilyID, memberRecord: &modelUser.UserFamilyMember{ FamilyId: ownerFamilyID, Status: modelUser.FamilyMemberLeft, }, wantCode: 0, }, { name: "same family removed member", ownerFamily: ownerFamilyID, memberRecord: &modelUser.UserFamilyMember{ FamilyId: ownerFamilyID, Status: modelUser.FamilyMemberRemoved, }, wantCode: 0, }, { name: "cross family active member", ownerFamily: ownerFamilyID, memberRecord: &modelUser.UserFamilyMember{ FamilyId: ownerFamilyID + 1, Status: modelUser.FamilyMemberActive, }, wantCode: xerr.FamilyCrossBindForbidden, }, { name: "cross family left member", ownerFamily: ownerFamilyID, memberRecord: &modelUser.UserFamilyMember{ FamilyId: ownerFamilyID + 1, Status: modelUser.FamilyMemberLeft, }, wantCode: 0, }, { name: "cross family removed member", ownerFamily: ownerFamilyID, memberRecord: &modelUser.UserFamilyMember{ FamilyId: ownerFamilyID + 1, Status: modelUser.FamilyMemberRemoved, }, wantCode: 0, }, } for _, testCase := range testCases { t.Run(testCase.name, func(t *testing.T) { err := validateMemberJoinConflict(testCase.ownerFamily, testCase.memberRecord) if testCase.wantCode == 0 { require.NoError(t, err) return } require.Error(t, err) require.Equal(t, testCase.wantCode, extractFamilyJoinCode(err)) }) } }