Plugins: Improve grafana-cli UX + API response messaging for plugin install incompatibility scenario (#36556)
* improve UX for plugin install incompatability * refactor test
This commit is contained in:
@@ -3,6 +3,7 @@ package plugins
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
@@ -36,23 +37,24 @@ func TestPluginInstallAccess(t *testing.T) {
|
||||
createUser(t, store, usernameAdmin, defaultPassword, true)
|
||||
|
||||
t.Run("Request is forbidden if not from an admin", func(t *testing.T) {
|
||||
statusCode, body := makePostRequest(t, grafanaAPIURL(usernameNonAdmin, grafanaListedAddr, "plugins/grafana-plugin/install"))
|
||||
assert.Equal(t, 403, statusCode)
|
||||
assert.JSONEq(t, "{\"message\": \"Permission denied\"}", body)
|
||||
status, body := makePostRequest(t, grafanaAPIURL(usernameNonAdmin, grafanaListedAddr, "plugins/grafana-plugin/install"))
|
||||
assert.Equal(t, 403, status)
|
||||
assert.Equal(t, "Permission denied", body["message"])
|
||||
|
||||
statusCode, body = makePostRequest(t, grafanaAPIURL(usernameNonAdmin, grafanaListedAddr, "plugins/grafana-plugin/uninstall"))
|
||||
assert.Equal(t, 403, statusCode)
|
||||
assert.JSONEq(t, "{\"message\": \"Permission denied\"}", body)
|
||||
status, body = makePostRequest(t, grafanaAPIURL(usernameNonAdmin, grafanaListedAddr, "plugins/grafana-plugin/uninstall"))
|
||||
assert.Equal(t, 403, status)
|
||||
assert.Equal(t, "Permission denied", body["message"])
|
||||
})
|
||||
|
||||
t.Run("Request is not forbidden if from an admin", func(t *testing.T) {
|
||||
statusCode, body := makePostRequest(t, grafanaAPIURL(usernameAdmin, grafanaListedAddr, "plugins/test/install"))
|
||||
|
||||
assert.Equal(t, 404, statusCode)
|
||||
assert.JSONEq(t, "{\"error\":\"plugin not found\", \"message\":\"Plugin not found\"}", body)
|
||||
assert.Equal(t, "Plugin not found", body["message"])
|
||||
|
||||
statusCode, body = makePostRequest(t, grafanaAPIURL(usernameAdmin, grafanaListedAddr, "plugins/test/uninstall"))
|
||||
assert.Equal(t, 404, statusCode)
|
||||
assert.JSONEq(t, "{\"error\":\"plugin is not installed\", \"message\":\"Plugin not installed\"}", body)
|
||||
assert.Equal(t, "Plugin not installed", body["message"])
|
||||
})
|
||||
}
|
||||
|
||||
@@ -68,7 +70,7 @@ func createUser(t *testing.T, store *sqlstore.SQLStore, username, password strin
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func makePostRequest(t *testing.T, URL string) (int, string) {
|
||||
func makePostRequest(t *testing.T, URL string) (int, map[string]interface{}) {
|
||||
t.Helper()
|
||||
|
||||
// nolint:gosec
|
||||
@@ -81,7 +83,11 @@ func makePostRequest(t *testing.T, URL string) (int, string) {
|
||||
b, err := ioutil.ReadAll(resp.Body)
|
||||
require.NoError(t, err)
|
||||
|
||||
return resp.StatusCode, string(b)
|
||||
var body = make(map[string]interface{})
|
||||
err = json.Unmarshal(b, &body)
|
||||
require.NoError(t, err)
|
||||
|
||||
return resp.StatusCode, body
|
||||
}
|
||||
|
||||
func grafanaAPIURL(username string, grafanaListedAddr string, path string) string {
|
||||
|
||||
Reference in New Issue
Block a user