Select Git revision
caching_middleware_test.go
action_handler_test.go 3.00 KiB
package extension
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestActionHandler(t *testing.T) {
tests := []struct {
name string
request *ActionRequest
router ActionRouter
want string
wantErr bool
}{
{
name: "No named action call",
request: &ActionRequest{Action: "grpc:///ext/action/"},
router: func(ctx context.Context, url *ActionURL, req *ActionRequest) (ActionHandler, error) {
return func(ctx context.Context, url *ActionURL, req *ActionRequest) (*ActionResponse, error) {
return &ActionResponse{State: 0, Msg: "Called - action"}, nil
}, nil
},
want: "Called - action",
wantErr: false,
},
{
name: "Named action call",
request: &ActionRequest{Action: "grpc:///ext/action/"},
router: Named("action", func(ctx context.Context, url *ActionURL, req *ActionRequest) (*ActionResponse, error) {
return &ActionResponse{State: 0, Msg: "Called named action"}, nil
}),
want: "Called named action",
wantErr: false,
},
{
name: "Named action chain call",
request: &ActionRequest{Action: "grpc:///ext/action1/"},
router: Chain(
Named("action1", func(ctx context.Context, url *ActionURL, req *ActionRequest) (*ActionResponse, error) {
return &ActionResponse{State: 0, Msg: "Called named action1"}, nil
}),
Named("action2", func(ctx context.Context, url *ActionURL, req *ActionRequest) (*ActionResponse, error) {
return &ActionResponse{State: 0, Msg: "Called named action2"}, nil
}),
),
want: "Called named action1",
wantErr: false,
},
{
name: "Error (no action in router)",
request: &ActionRequest{Action: "grpc:///ext/action3/"},
router: Chain(
Named("action1", func(ctx context.Context, url *ActionURL, req *ActionRequest) (*ActionResponse, error) {
return &ActionResponse{State: 0, Msg: "Called named action1"}, nil
}),
Named("action2", func(ctx context.Context, url *ActionURL, req *ActionRequest) (*ActionResponse, error) {
return &ActionResponse{State: 0, Msg: "Called named action2"}, nil
}),
),
wantErr: true,
},
{
name: "Named action call with deprecated request",
request: &ActionRequest{Action: "action"},
router: Named("action", func(ctx context.Context, url *ActionURL, req *ActionRequest) (*ActionResponse, error) {
return &ActionResponse{State: 0, Msg: "Called named deprecated action"}, nil
}),
want: "Called named deprecated action",
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
url, err := NewActionURL(tt.request.Action)
require.NoError(t, err)
handler, err := tt.router(context.Background(), url, tt.request)
if tt.wantErr {
require.Error(t, err)
return
} else {
require.NoError(t, err)
}
resp, err := handler(context.Background(), url, tt.request)
if tt.wantErr {
require.Error(t, err)
} else {
require.NoError(t, err)
}
assert.Equal(t, tt.want, resp.Msg)
})
}
}