File size: 1,635 Bytes
1f10f31 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | package common_test
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/openmeterio/openmeter/app/common"
"github.com/openmeterio/openmeter/app/config"
"github.com/openmeterio/openmeter/pkg/featuregate"
)
// alwaysFalseGate is a Gate that always returns false for any flag evaluation.
type alwaysFalseGate struct{}
func (alwaysFalseGate) EvaluateBool(_, _ string, _ bool) (bool, error) {
return false, nil
}
func TestNewFeatureGateChecker_DisabledUsesNoop(t *testing.T) {
checker := common.NewFeatureGateChecker(alwaysFalseGate{}, config.FeatureGateConfiguration{
Enabled: false,
Flags: featuregate.Flags{featuregate.FeatureFlag("om_ff_credits_enabled"): "credits-flag"},
}, config.CreditsConfiguration{Enabled: true})
require.NotNil(t, checker)
// With Enabled=false the checker wraps a Noop gate, so any flag evaluates to true
got, err := checker.Enabled("ns", "credits-flag")
require.NoError(t, err)
assert.True(t, got, "disabled feature gate should use noop and return true")
}
func TestNewFeatureGateChecker_EnabledUsesRealGate(t *testing.T) {
checker := common.NewFeatureGateChecker(alwaysFalseGate{}, config.FeatureGateConfiguration{
Enabled: true,
Flags: featuregate.Flags{featuregate.FeatureFlag("om_ff_credits_enabled"): "credits-flag"},
}, config.CreditsConfiguration{Enabled: true})
require.NotNil(t, checker)
// With Enabled=true the real gate is used, which always returns false
got, err := checker.Enabled("ns", "credits-flag")
require.NoError(t, err)
assert.False(t, got, "enabled feature gate should use the real gate")
}
|