oncall-engine/grafana-plugin/pkg/plugin/resources_test.go

74 lines
1.9 KiB
Go

package plugin
import (
"bytes"
"context"
"testing"
"github.com/grafana/grafana-plugin-sdk-go/backend"
)
// mockCallResourceResponseSender implements backend.CallResourceResponseSender
// for use in tests.
type mockCallResourceResponseSender struct {
response *backend.CallResourceResponse
}
// Send sets the received *backend.CallResourceResponse to s.response
func (s *mockCallResourceResponseSender) Send(response *backend.CallResourceResponse) error {
s.response = response
return nil
}
// TestCallResource tests CallResource calls, using backend.CallResourceRequest and backend.CallResourceResponse.
// This ensures the httpadapter for CallResource works correctly.
func TestCallResource(t *testing.T) {
// Initialize app
inst, err := NewInstance(context.Background(), backend.AppInstanceSettings{})
if err != nil {
t.Fatalf("new app: %s", err)
}
if inst == nil {
t.Fatal("inst must not be nil")
}
app, ok := inst.(*App)
if !ok {
t.Fatal("inst must be of type *App")
}
// Set up and run test cases
for _, tc := range []struct {
name string
method string
path string
body []byte
expStatus int
expBody []byte
}{} {
t.Run(tc.name, func(t *testing.T) {
// Request by calling CallResource. This tests the httpadapter.
var r mockCallResourceResponseSender
err = app.CallResource(context.Background(), &backend.CallResourceRequest{
Method: tc.method,
Path: tc.path,
Body: tc.body,
}, &r)
if err != nil {
t.Fatalf("CallResource error: %s", err)
}
if r.response == nil {
t.Fatal("no response received from CallResource")
}
if tc.expStatus > 0 && tc.expStatus != r.response.Status {
t.Errorf("response status should be %d, got %d", tc.expStatus, r.response.Status)
}
if len(tc.expBody) > 0 {
if tb := bytes.TrimSpace(r.response.Body); !bytes.Equal(tb, tc.expBody) {
t.Errorf("response body should be %s, got %s", tc.expBody, tb)
}
}
})
}
}