From 73891f8ebc63002f6be78d70075c2934867083f9 Mon Sep 17 00:00:00 2001 From: ko_oler <kooler89@gmail.com> Date: Wed, 11 Oct 2023 17:02:39 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=82=D0=B5=D1=81=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/extension/action_handler_test.go | 99 +++++++++++++++++++++++++ pkg/extension/service/extension_test.go | 25 +++---- 2 files changed, 110 insertions(+), 14 deletions(-) create mode 100644 pkg/extension/action_handler_test.go diff --git a/pkg/extension/action_handler_test.go b/pkg/extension/action_handler_test.go new file mode 100644 index 00000000..4f707c39 --- /dev/null +++ b/pkg/extension/action_handler_test.go @@ -0,0 +1,99 @@ +package extension + +import ( + "context" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestChain(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) + }) + } +} diff --git a/pkg/extension/service/extension_test.go b/pkg/extension/service/extension_test.go index 929f85f3..e0582966 100644 --- a/pkg/extension/service/extension_test.go +++ b/pkg/extension/service/extension_test.go @@ -2,10 +2,10 @@ package service import ( "context" - "reflect" "testing" "git.perx.ru/perxis/perxis-go/pkg/extension" + "github.com/stretchr/testify/require" ) func TestExtension_Action(t *testing.T) { @@ -14,28 +14,28 @@ func TestExtension_Action(t *testing.T) { desc *extension.ExtensionDescriptor in *extension.ActionRequest router extension.ActionRouter - want *extension.ActionResponse + want string wantErr bool }{ { - name: "OK", + name: "Router with 1 named action", desc: &extension.ExtensionDescriptor{Extension: "test", Title: "Test Extension", Description: "desc", Version: "v.0.0.1"}, in: &extension.ActionRequest{Action: "grpc:///test/action", SpaceId: "sp", EnvId: "env", CollectionId: "coll"}, - want: &extension.ActionResponse{State: extension.ResponseDone}, + want: "Called action", router: extension.Named("action", func(ctx context.Context, url *extension.ActionURL, req *extension.ActionRequest) (*extension.ActionResponse, error) { - return &extension.ActionResponse{State: extension.ResponseDone}, nil + return &extension.ActionResponse{State: extension.ResponseDone, Msg: "Called action"}, nil }), wantErr: false, }, { - name: "OK (chain)", + name: "Router with 2 named actions", desc: &extension.ExtensionDescriptor{Extension: "test", Title: "Test Extension", Description: "desc", Version: "v.0.0.1"}, in: &extension.ActionRequest{Action: "grpc:///test/action2", SpaceId: "sp", EnvId: "env", CollectionId: "coll"}, - want: &extension.ActionResponse{State: extension.ResponseParametersRequired}, + want: "Called action2", router: extension.Chain(extension.Named("action", func(ctx context.Context, url *extension.ActionURL, req *extension.ActionRequest) (*extension.ActionResponse, error) { return &extension.ActionResponse{State: extension.ResponseDone}, nil }), extension.Named("action2", func(ctx context.Context, url *extension.ActionURL, req *extension.ActionRequest) (*extension.ActionResponse, error) { - return &extension.ActionResponse{State: extension.ResponseParametersRequired}, nil + return &extension.ActionResponse{State: extension.ResponseDone, Msg: "Called action2"}, nil })), wantErr: false, }, @@ -43,7 +43,6 @@ func TestExtension_Action(t *testing.T) { name: "Error (no extension)", desc: &extension.ExtensionDescriptor{Extension: "test", Title: "Test Extension", Description: "desc", Version: "v.0.0.1"}, in: &extension.ActionRequest{Action: "grpc:///test2/action2", SpaceId: "sp", EnvId: "env", CollectionId: "coll"}, - want: nil, router: extension.Chain(extension.Named("action", func(ctx context.Context, url *extension.ActionURL, req *extension.ActionRequest) (*extension.ActionResponse, error) { return &extension.ActionResponse{State: extension.ResponseDone}, nil }), extension.Named("action2", func(ctx context.Context, url *extension.ActionURL, req *extension.ActionRequest) (*extension.ActionResponse, error) { @@ -59,13 +58,11 @@ func TestExtension_Action(t *testing.T) { router: tt.router, } got, err := s.Action(context.Background(), tt.in) - if (err != nil) != tt.wantErr { - t.Errorf("Action() error = %v, wantErr %v", err, tt.wantErr) + if tt.wantErr { + require.Error(t, err) return } - if !reflect.DeepEqual(got, tt.want) { - t.Errorf("Action() got = %v, want %v", got, tt.want) - } + require.Equal(t, tt.want, got.Msg) }) } } -- GitLab