Feature Management: Define HideFromAdminPage and AllowSelfServe configs (#77580)

* Feature Management: Define HideFromAdminPage and AllowSelfServe configs

* update tests

* add constraint for self-serve

* Update pkg/services/featuremgmt/models.go

Co-authored-by: Michael Mandrus <41969079+mmandrus@users.noreply.github.com>

---------

Co-authored-by: Michael Mandrus <41969079+mmandrus@users.noreply.github.com>
This commit is contained in:
João Calisto
2023-11-03 15:59:07 +00:00
committed by GitHub
parent 3dac37380d
commit ade140c161
5 changed files with 259 additions and 193 deletions

View File

@@ -20,6 +20,15 @@ import (
"github.com/stretchr/testify/require"
)
func boolPtr(b bool) *bool {
return &b
}
var (
truePtr = boolPtr(true)
falsePtr = boolPtr(false)
)
func TestGetFeatureToggles(t *testing.T) {
readPermissions := []accesscontrol.Permission{{Action: accesscontrol.ActionFeatureManagementRead}}
@@ -107,20 +116,27 @@ func TestGetFeatureToggles(t *testing.T) {
Name: "toggle3",
Stage: featuremgmt.FeatureStagePrivatePreview,
}, {
Name: "toggle4",
Stage: featuremgmt.FeatureStagePublicPreview,
Name: "toggle4",
Stage: featuremgmt.FeatureStagePublicPreview,
AllowSelfServe: truePtr,
}, {
Name: "toggle5",
Stage: featuremgmt.FeatureStageGeneralAvailability,
Name: "toggle5",
Stage: featuremgmt.FeatureStageGeneralAvailability,
AllowSelfServe: truePtr,
}, {
Name: "toggle6",
Stage: featuremgmt.FeatureStageDeprecated,
Name: "toggle6",
Stage: featuremgmt.FeatureStageDeprecated,
AllowSelfServe: truePtr,
}, {
Name: "toggle7",
Stage: featuremgmt.FeatureStageGeneralAvailability,
AllowSelfServe: falsePtr,
},
}
t.Run("unknown, experimental, and private preview toggles are hidden by default", func(t *testing.T) {
result := runGetScenario(t, features, setting.FeatureMgmtSettings{}, readPermissions, http.StatusOK)
assert.Len(t, result, 3)
assert.Len(t, result, 4)
_, ok := findResult(t, result, "toggle1")
assert.False(t, ok)
@@ -130,13 +146,13 @@ func TestGetFeatureToggles(t *testing.T) {
assert.False(t, ok)
})
t.Run("only public preview and GA are writeable by default", func(t *testing.T) {
t.Run("only public preview and GA with AllowSelfServe are writeable", func(t *testing.T) {
settings := setting.FeatureMgmtSettings{
AllowEditing: true,
UpdateWebhook: "bogus",
}
result := runGetScenario(t, features, settings, readPermissions, http.StatusOK)
assert.Len(t, result, 3)
assert.Len(t, result, 4)
t4, ok := findResult(t, result, "toggle4")
assert.True(t, ok)
@@ -155,7 +171,7 @@ func TestGetFeatureToggles(t *testing.T) {
UpdateWebhook: "",
}
result := runGetScenario(t, features, settings, readPermissions, http.StatusOK)
assert.Len(t, result, 3)
assert.Len(t, result, 4)
t4, ok := findResult(t, result, "toggle4")
assert.True(t, ok)
@@ -305,13 +321,15 @@ func TestSetFeatureToggles(t *testing.T) {
Enabled: false,
Stage: featuremgmt.FeatureStageGeneralAvailability,
}, {
Name: "toggle4",
Enabled: false,
Stage: featuremgmt.FeatureStageGeneralAvailability,
Name: "toggle4",
Enabled: false,
Stage: featuremgmt.FeatureStageGeneralAvailability,
AllowSelfServe: truePtr,
}, {
Name: "toggle5",
Enabled: false,
Stage: featuremgmt.FeatureStageDeprecated,
Name: "toggle5",
Enabled: false,
Stage: featuremgmt.FeatureStageDeprecated,
AllowSelfServe: truePtr,
},
}