All checks were successful
Build docker and publish / build (20.15.1) (push) Successful in 8m16s
79 lines
2.5 KiB
Go
79 lines
2.5 KiB
Go
package common
|
|
|
|
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 extractFamilyEntitlementCode(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 TestBuildEntitlementContext(t *testing.T) {
|
|
t.Run("default self entitlement", func(t *testing.T) {
|
|
entitlement := buildEntitlementContext(1001, nil)
|
|
require.Equal(t, int64(1001), entitlement.EffectiveUserID)
|
|
require.Equal(t, EntitlementSourceSelf, entitlement.Source)
|
|
require.Equal(t, int64(0), entitlement.OwnerUserID)
|
|
require.False(t, entitlement.ReadOnly)
|
|
})
|
|
|
|
t.Run("active family member uses owner entitlement", func(t *testing.T) {
|
|
entitlement := buildEntitlementContext(1001, &familyEntitlementRelation{
|
|
Role: modelUser.FamilyRoleMember,
|
|
FamilyStatus: modelUser.FamilyStatusActive,
|
|
OwnerUserID: 2001,
|
|
})
|
|
require.Equal(t, int64(2001), entitlement.EffectiveUserID)
|
|
require.Equal(t, EntitlementSourceFamilyOwner, entitlement.Source)
|
|
require.Equal(t, int64(2001), entitlement.OwnerUserID)
|
|
require.True(t, entitlement.ReadOnly)
|
|
})
|
|
|
|
t.Run("owner relation keeps self entitlement", func(t *testing.T) {
|
|
entitlement := buildEntitlementContext(2001, &familyEntitlementRelation{
|
|
Role: modelUser.FamilyRoleOwner,
|
|
FamilyStatus: modelUser.FamilyStatusActive,
|
|
OwnerUserID: 2001,
|
|
})
|
|
require.Equal(t, int64(2001), entitlement.EffectiveUserID)
|
|
require.Equal(t, EntitlementSourceSelf, entitlement.Source)
|
|
require.False(t, entitlement.ReadOnly)
|
|
})
|
|
|
|
t.Run("disabled family keeps self entitlement", func(t *testing.T) {
|
|
entitlement := buildEntitlementContext(1001, &familyEntitlementRelation{
|
|
Role: modelUser.FamilyRoleMember,
|
|
FamilyStatus: 0,
|
|
OwnerUserID: 2001,
|
|
})
|
|
require.Equal(t, int64(1001), entitlement.EffectiveUserID)
|
|
require.Equal(t, EntitlementSourceSelf, entitlement.Source)
|
|
require.False(t, entitlement.ReadOnly)
|
|
})
|
|
}
|
|
|
|
func TestDenyReadonlyEntitlement(t *testing.T) {
|
|
require.NoError(t, denyReadonlyEntitlement(&EntitlementContext{ReadOnly: false}))
|
|
|
|
err := denyReadonlyEntitlement(&EntitlementContext{
|
|
Source: EntitlementSourceFamilyOwner,
|
|
ReadOnly: true,
|
|
})
|
|
require.Error(t, err)
|
|
require.Equal(t, xerr.FamilyOwnerOperationForbidden, extractFamilyEntitlementCode(err))
|
|
}
|