mirror of
https://github.com/ent/ent.git
synced 2026-03-05 19:35:23 +03:00
72 lines
1.8 KiB
Go
72 lines
1.8 KiB
Go
// Copyright 2019-present Facebook Inc. All rights reserved.
|
|
// This source code is licensed under the Apache 2.0 license found
|
|
// in the LICENSE file in the root directory of this source tree.
|
|
|
|
package privacy_test
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"testing"
|
|
|
|
"entgo.io/ent"
|
|
"entgo.io/ent/privacy"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestDecisionContext(t *testing.T) {
|
|
deny := privacy.DecisionContext(context.Background(), privacy.Deny)
|
|
err := privacy.Policies{}.EvalMutation(deny, nil)
|
|
assert.True(t, errors.Is(err, privacy.Deny))
|
|
|
|
allow := privacy.DecisionContext(context.Background(), privacy.Allow)
|
|
err = privacy.Policies{}.EvalQuery(allow, nil)
|
|
assert.NoError(t, err)
|
|
|
|
decision, ok := privacy.DecisionFromContext(deny)
|
|
assert.True(t, ok)
|
|
assert.True(t, errors.Is(decision, privacy.Deny))
|
|
|
|
pc := policyFunc(func(context.Context) error { panic("invalid") })
|
|
policy := privacy.NewPolicies(pc)
|
|
err = policy.EvalQuery(allow, nil)
|
|
assert.NoError(t, err)
|
|
err = policy.EvalMutation(deny, nil)
|
|
assert.True(t, errors.Is(err, privacy.Deny))
|
|
}
|
|
|
|
func TestNewPolicies(t *testing.T) {
|
|
type ctxKey string
|
|
var (
|
|
key = ctxKey("i")
|
|
pc = policyFunc(func(ctx context.Context) error {
|
|
*(ctx.Value(key).(*int))++
|
|
return nil
|
|
})
|
|
policy = privacy.NewPolicies(pc, pc, pc, pc)
|
|
)
|
|
|
|
ctx := context.WithValue(context.Background(), key, new(int))
|
|
err := policy.EvalMutation(ctx, nil)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, 4, *(ctx.Value(key).(*int)))
|
|
err = policy.EvalQuery(ctx, nil)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, 8, *(ctx.Value(key).(*int)))
|
|
}
|
|
|
|
type policyFunc func(context.Context) error
|
|
|
|
func (f policyFunc) Policy() ent.Policy {
|
|
return f
|
|
}
|
|
|
|
func (f policyFunc) EvalQuery(ctx context.Context, _ ent.Query) error {
|
|
return f(ctx)
|
|
}
|
|
|
|
func (f policyFunc) EvalMutation(ctx context.Context, _ ent.Mutation) error {
|
|
return f(ctx)
|
|
}
|