Preferences: Support Create+Update+Delete over apiserver (#111715)

This commit is contained in:
Ryan McKinley
2025-10-02 21:58:08 +03:00
committed by GitHub
parent 5a5aac1d6b
commit 0af6efb096
20 changed files with 969 additions and 177 deletions
+33 -8
View File
@@ -85,6 +85,8 @@ func TestIntegrationPreferences(t *testing.T) {
}, &raw)
require.Equal(t, http.StatusOK, legacyResponse.Response.StatusCode, "create preference for user")
adminPrefsName := "user-" + clientAdmin.Args.User.Identity.GetIdentifier()
// Admin has access to all three (namespace, team, and user)
rsp, err = clientAdmin.Resource.List(ctx, metav1.ListOptions{})
require.NoError(t, err)
@@ -95,9 +97,31 @@ func TestIntegrationPreferences(t *testing.T) {
require.Equal(t, []string{
"namespace",
fmt.Sprintf("team-%s", helper.Org1.Staff.UID),
fmt.Sprintf("user-%s", clientAdmin.Args.User.Identity.GetIdentifier()),
adminPrefsName,
}, names)
obj, err := clientAdmin.Resource.Get(ctx, adminPrefsName, metav1.GetOptions{})
require.NoError(t, err)
jj, err := json.MarshalIndent(obj.Object["spec"], "", " ")
require.NoError(t, err)
require.JSONEq(t, `{
"weekStart":"saturday"
}`, string(jj))
obj.Object["spec"] = map[string]any{
"weekStart": "saturday",
"regionalFormat": "dd/mm/yyyy",
}
// Set the regional format via k8s API
obj, err = clientAdmin.Resource.Update(ctx, obj, metav1.UpdateOptions{})
require.NoError(t, err)
jj, err = json.MarshalIndent(obj.Object["spec"], "", " ")
require.NoError(t, err)
require.JSONEq(t, `{
"weekStart": "saturday",
"regionalFormat": "dd/mm/yyyy"
}`, string(jj))
// The viewer should only have namespace (eg org level) permissions
rsp, err = clientViewer.Resource.List(ctx, metav1.ListOptions{})
require.NoError(t, err)
@@ -118,14 +142,14 @@ func TestIntegrationPreferences(t *testing.T) {
}, &shim{})
require.Equal(t, http.StatusOK, bootdata.Response.StatusCode, "get bootdata preferences")
jj, _ := json.Marshal(bootdata.Result.User)
jj, _ = json.Marshal(bootdata.Result.User)
require.JSONEq(t, `{
"timezone":"africa",
"weekStart":"saturday",
"theme":"dark",
"language":"en-US", `+ // FROM global default!
`"regionalFormat":""
}`, string(jj))
`"regionalFormat": ""}`, // why empty?
string(jj))
merged := apis.DoRequest(helper, apis.RequestParams{
User: clientAdmin.Args.User,
@@ -133,9 +157,10 @@ func TestIntegrationPreferences(t *testing.T) {
Path: "/apis/preferences.grafana.app/v1alpha1/namespaces/default/preferences/merged",
}, &preferences.Preferences{})
require.Equal(t, http.StatusOK, merged.Response.StatusCode, "get merged preferences")
require.Equal(t, "saturday", *merged.Result.Spec.WeekStart) // from user
require.Equal(t, "africa", *merged.Result.Spec.Timezone) // from team
require.Equal(t, "dark", *merged.Result.Spec.Theme) // from org
require.Equal(t, "en-US", *merged.Result.Spec.Language) // settings.ini
require.Equal(t, "saturday", *merged.Result.Spec.WeekStart) // from user
require.Equal(t, "africa", *merged.Result.Spec.Timezone) // from team
require.Equal(t, "dark", *merged.Result.Spec.Theme) // from org
require.Equal(t, "en-US", *merged.Result.Spec.Language) // settings.ini
require.Equal(t, "dd/mm/yyyy", *merged.Result.Spec.RegionalFormat) // from user update
})
}