package api import ( "net/http" "net/http/httptest" "testing" "github.com/grafana/grafana/pkg/plugins" contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginsettings" "github.com/grafana/grafana/pkg/services/pluginsintegration/pluginstore" "github.com/grafana/grafana/pkg/services/user" "github.com/grafana/grafana/pkg/web" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestHTTPServer_CheckEnabled(t *testing.T) { tests := []struct { name string pluginID string expectedCode int }{ { name: "should return a 404 if the plugin doesn't exist", pluginID: "missing", expectedCode: 404, }, { name: "should not set an error code if the plugin is not an app", pluginID: "mysql", expectedCode: 0, // unset }, { name: "should not set an error code if the plugin is enabled", pluginID: "grafana-test-app", expectedCode: 0, // unset }, { name: "should return a 404 if the plugin is disabled", pluginID: "grafana-test-app_disabled", expectedCode: 404, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { hs := &HTTPServer{} hs.pluginStore = &pluginstore.FakePluginStore{ PluginList: []pluginstore.Plugin{ {JSONData: plugins.JSONData{ID: "mysql"}}, {JSONData: plugins.JSONData{Type: plugins.TypeApp, ID: "grafana-test-app"}}, {JSONData: plugins.JSONData{Type: plugins.TypeApp, ID: "grafana-test-app_disabled"}}, }, } hs.PluginSettings = &pluginsettings.FakePluginSettings{Plugins: map[string]*pluginsettings.DTO{ "grafana-test-app": {ID: 0, OrgID: 1, PluginID: "grafana-test-app", PluginVersion: "1.0.0", Enabled: true}, "grafana-test-app_disabled": {ID: 0, OrgID: 1, PluginID: "grafana-test-app_disabled", PluginVersion: "1.0.0", Enabled: false}, }} httpReq, err := http.NewRequest(http.MethodGet, "", nil) httpReq = web.SetURLParams(httpReq, map[string]string{":pluginId": tt.pluginID}) require.NoError(t, err) responseWriter := web.NewResponseWriter("GET", httptest.NewRecorder()) c := &contextmodel.ReqContext{ Context: &web.Context{Req: httpReq, Resp: responseWriter}, SignedInUser: &user.SignedInUser{OrgID: 1}, } checkAppEnabled(hs.pluginStore, hs.PluginSettings)(c) assert.Equal(t, tt.expectedCode, c.Resp.Status()) }) } }