Files
ent/privacy/privacy_test.go
2022-01-29 10:30:31 +02:00

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)
}