diff --git a/perxis-proto b/perxis-proto index 5b9dd0ce22e8adbc759e76d9b4b5ba3423502c04..81c967842f55811b459e455572703631712d7d86 160000 --- a/perxis-proto +++ b/perxis-proto @@ -1 +1 @@ -Subproject commit 5b9dd0ce22e8adbc759e76d9b4b5ba3423502c04 +Subproject commit 81c967842f55811b459e455572703631712d7d86 diff --git a/pkg/extension/client_test.go b/pkg/extension/client_test.go deleted file mode 100644 index d4951340152c4af9816bbf6f9c38a1e595eba7e2..0000000000000000000000000000000000000000 --- a/pkg/extension/client_test.go +++ /dev/null @@ -1,76 +0,0 @@ -package extension - -// РЅРµ актуальные тесты - плохие РЅРµ понятно что тестировали -//func TestGetErrors(t *testing.T) { -// -// getOut := func(results ...*RequestResult) results { return &InstallResponse{Results: results} } -// -// tests := []struct { -// name string -// out results -// err error -// wrapErr error -// checkErr func(t *testing.T, err error) -// }{ -// { -// name: "no errors", -// out: getOut(&RequestResult{State: RequestOK, Extension: "a"}), -// }, -// { -// name: "no error", -// out: getOut(&RequestResult{State: RequestOK, Extension: "a"}), -// wrapErr: ErrInstall, -// }, -// { -// name: "one errored result", -// out: getOut(&RequestResult{State: RequestError, Extension: "a", Error: "some err", Msg: "Ошибка"}), -// wrapErr: ErrInstall, -// checkErr: func(t *testing.T, err error) { -// assert.ErrorIs(t, err, ErrInstall) -// errs := errors.GetErrors(err) -// require.Len(t, errs, 1) -// -// extErr := errs[0] -// assert.Equal(t, "a", ExtensionFromError(extErr)) -// assert.Equal(t, "some err", extErr.Error()) -// assert.Equal(t, "Ошибка", errors.GetDetail(extErr)) -// }, -// }, -// { -// name: "multiple results, some of them errored", -// out: getOut( -// &RequestResult{State: RequestError, Extension: "a", Error: "some err a", Msg: "Ошибка Рђ"}, -// &RequestResult{State: RequestOK, Extension: "b"}, -// &RequestResult{State: RequestError, Extension: "c", Error: "some err c", Msg: "Ошибка РЎ"}, -// &RequestResult{State: RequestOK, Extension: "d"}, -// ), -// wrapErr: ErrInstall, -// checkErr: func(t *testing.T, err error) { -// assert.ErrorIs(t, err, ErrInstall) -// errs := errors.GetErrors(err) -// require.Len(t, errs, 2) -// -// extErr1 := errs[0] -// assert.Equal(t, "a", ExtensionFromError(extErr1)) -// assert.Equal(t, "some err a", extErr1.Error()) -// assert.Equal(t, "Ошибка Рђ", errors.GetDetail(extErr1)) -// -// extErr2 := errs[1] -// assert.Equal(t, "c", ExtensionFromError(extErr2)) -// assert.Equal(t, "some err c", extErr2.Error()) -// assert.Equal(t, "Ошибка РЎ", errors.GetDetail(extErr2)) -// }, -// }, -// } -// for _, tt := range tests { -// t.Run(tt.name, func(t *testing.T) { -// err := getErrors(tt.out, tt.err, tt.wrapErr) -// if tt.checkErr != nil { -// require.Error(t, err) -// tt.checkErr(t, err) -// } else { -// require.NoError(t, err) -// } -// }) -// } -//} diff --git a/pkg/extension/schema.go b/pkg/extension/schema.go index 2b78ba1b958fefe7adbcf189aa0a60950713a9b8..96406ad512c29b8e71dd52575cc5db3e41d8e0df 100644 --- a/pkg/extension/schema.go +++ b/pkg/extension/schema.go @@ -21,31 +21,6 @@ const ( // NewActionsCollection - создает коллекцию для хранения действий расширений РІ пространстве func NewActionsCollection(spaceID, envID string) *collections.Collection { - return &collections.Collection{ - ID: ActionsCollectionID, - SpaceID: spaceID, - EnvID: envID, - Name: ActionsCollectionName, - Schema: getActionsSchema(), - Hidden: true, - } -} - -func getEnumOpt(opts map[int32]string) []validate.EnumOpt { - keys := make([]string, 0, len(opts)) - for _, k := range opts { - keys = append(keys, k) - } - sort.Strings(keys) - - enum := make([]validate.EnumOpt, len(opts)) - for i, n := range keys { - enum[i] = validate.EnumOpt{Name: n, Value: float64(i)} - } - return enum -} - -func getActionsSchema() *schema.Schema { sch := schema.New( "extension", field.String(validate.Required()).SetTitle("Расширение").SetTextSearch(true), "action", field.String(validate.Required()).SetTitle("Действия").SetTextSearch(true), @@ -102,7 +77,28 @@ func getActionsSchema() *schema.Schema { sch.Field.UI.Options["subtitle"] = "action" sch.Field.UI.Options["collection_icon"] = "SettingOutlined/RocketOutlined" - return sch + return &collections.Collection{ + ID: ActionsCollectionID, + SpaceID: spaceID, + EnvID: envID, + Name: ActionsCollectionName, + Schema: sch, + Hidden: true, + } +} + +func getEnumOpt(opts map[int32]string) []validate.EnumOpt { + keys := make([]string, 0, len(opts)) + for _, k := range opts { + keys = append(keys, k) + } + sort.Strings(keys) + + enum := make([]validate.EnumOpt, len(opts)) + for i, n := range keys { + enum[i] = validate.EnumOpt{Name: n, Value: float64(i)} + } + return enum } // NewStatusCollection - создает коллекцию для хранения статусов расширений РІ пространстве diff --git a/pkg/extension/server.go b/pkg/extension/server.go index 7e994f6d4a1f977eacdf458bba99320336c00003..b69b10a308e61c776065ffc2d78c4c1d4641dd53 100644 --- a/pkg/extension/server.go +++ b/pkg/extension/server.go @@ -20,7 +20,7 @@ type Server struct { func NewServer(operation operation.Service, extensions ...Extension) *Server { srv := &Server{ extensions: make(map[string]Extension, len(extensions)), - // todo: РЅСѓР¶РЅРѕ как-то неявно создавать Рё регистрировать сервер операций + // todo: РЅСѓР¶РЅРѕ как-то неявно создавать Рё регистрировать сервер операций - ? operations: operation, } for _, s := range extensions { diff --git a/pkg/extension/server_test.go b/pkg/extension/server_test.go index d5dcf76ef8dd5be439257c0698a717081fa5d5cd..491a6071cb548e099edc43fb74a5f58dbbea8c0f 100644 --- a/pkg/extension/server_test.go +++ b/pkg/extension/server_test.go @@ -12,79 +12,7 @@ import ( "github.com/stretchr/testify/require" ) -// РЅРµ актуальные тесты -// func TestGetResults(t *testing.T) { -// -// getDummyExtension := func(name string, wantErr ...bool) Extension { -// ext := &testServerExtension{name: name} -// -// if len(wantErr) > 0 { -// ext.err = errors.WithDetail(errors.New("some err"), "Ошибка") -// } -// -// return ext -// } -// -// tests := []struct { -// name string -// services []Extension -// extensions []string -// fn func(svc Extension) error -// want []*RequestResult -// }{ -// { -// name: "one extension without errors", -// services: []Extension{getDummyExtension("a"), getDummyExtension("b")}, -// extensions: []string{"a"}, -// fn: func(svc Extension) error { return nil }, -// want: []*RequestResult{ -// {Extension: "a", State: RequestOK}, -// }, -// }, -// { -// name: "multiple extensions without errors", -// services: []Extension{getDummyExtension("a"), getDummyExtension("b"), getDummyExtension("c")}, -// extensions: []string{"a", "c"}, -// fn: func(svc Extension) error { return nil }, -// want: []*RequestResult{ -// {Extension: "a", State: RequestOK}, -// {Extension: "c", State: RequestOK}, -// }, -// }, -// { -// name: "multiple extensions, one returns error", -// services: []Extension{getDummyExtension("a"), getDummyExtension("b"), getDummyExtension("c", true)}, -// extensions: []string{"a", "c"}, -// fn: func(svc Extension) error { return svc.Install(nil, nil) }, -// want: []*RequestResult{ -// {Extension: "a", State: RequestOK}, -// {Extension: "c", State: RequestError, Error: "some err", Msg: "Ошибка\n"}, -// }, -// }, -// { -// name: "multiple extensions, all return error", -// services: []Extension{getDummyExtension("a", true), getDummyExtension("b", true), getDummyExtension("c", true)}, -// extensions: []string{"a", "b", "c"}, -// fn: func(svc Extension) error { return svc.Install(nil, nil) }, -// want: []*RequestResult{ -// {Extension: "a", State: RequestError, Error: "some err", Msg: "Ошибка\n"}, -// {Extension: "b", State: RequestError, Error: "some err", Msg: "Ошибка\n"}, -// {Extension: "c", State: RequestError, Error: "some err", Msg: "Ошибка\n"}, -// }, -// }, -// } -// -// for _, tt := range tests { -// t.Run(tt.name, func(t *testing.T) { -// srv := NewServer(tt.services...) -// if got := srv.getResults(tt.extensions, tt.fn); !reflect.DeepEqual(got, tt.want) { -// t.Errorf("getResults() = %v, want %v", got, tt.want) -// } -// }) -// } -// } -// -// РЅРµ РїРѕРґС…РѕРґРёС‚ использование mock.Extension РёР·-Р·Р° возникающих циклических импортов +// Рспользование mock.Extension РЅРµ РїРѕРґС…РѕРґРёС‚ РёР·-Р·Р° возникающих циклических импортов type testServerExtension struct { err error name string @@ -99,34 +27,33 @@ func (t testServerExtension) GetDescriptor() *ExtensionDescriptor { } } -func (t testServerExtension) Install(ctx context.Context, in *InstallRequest) error { return t.err } -func (t testServerExtension) Check(ctx context.Context, in *CheckRequest) error { return t.err } -func (t testServerExtension) Uninstall(ctx context.Context, in *UninstallRequest) error { return t.err } -func (t testServerExtension) Action(ctx context.Context, in *ActionRequest) (*ActionResponse, error) { +func (t testServerExtension) Install(_ context.Context, _ *InstallRequest) error { return t.err } +func (t testServerExtension) Check(_ context.Context, _ *CheckRequest) error { return t.err } +func (t testServerExtension) Uninstall(_ context.Context, _ *UninstallRequest) error { return t.err } +func (t testServerExtension) Action(_ context.Context, _ *ActionRequest) (*ActionResponse, error) { return &ActionResponse{}, t.err } -func TestServer_Action(t *testing.T) { - getDummyExtension := func(name string, wantErr ...bool) Extension { - ext := &testServerExtension{name: name} - - if len(wantErr) > 0 { - ext.err = errors.WithDetail(errors.New("some err"), "Ошибка") - } - - return ext +func getDummyExtension(name string, wantErr ...string) Extension { + ext := &testServerExtension{name: name} + if len(wantErr) > 0 { + ext.err = errors.WithDetail(errors.New(wantErr[0]), "Ошибка") } + return ext +} + +func TestServer_Action(t *testing.T) { var tests = []struct { - name string - services Extension - in *ActionRequest - want *ActionResponse - wantErr string + name string + extension Extension + in *ActionRequest + want *ActionResponse + wantErr string }{ { - name: "GRPC", - services: getDummyExtension("test-extension"), + name: "GRPC", + extension: getDummyExtension("test-extension"), in: &ActionRequest{ Action: "grpc:///test-extension/test-action", SpaceId: "sp", @@ -135,8 +62,8 @@ func TestServer_Action(t *testing.T) { want: &ActionResponse{State: ResponseDone}, }, { - name: "invalid schema", - services: getDummyExtension("test-extension"), + name: "invalid schema", + extension: getDummyExtension("test-extension"), in: &ActionRequest{ Action: "some:///space/env/coll", SpaceId: "sp", @@ -146,8 +73,8 @@ func TestServer_Action(t *testing.T) { wantErr: "extension ID required", }, { - name: "Deprecated call", - services: getDummyExtension("test-extension"), + name: "Deprecated call", + extension: getDummyExtension("test-extension"), in: &ActionRequest{ Action: "test-action", SpaceId: "sp", @@ -157,8 +84,8 @@ func TestServer_Action(t *testing.T) { want: &ActionResponse{State: ResponseDone}, }, { - name: "unknown extension", - services: getDummyExtension("test-extension"), + name: "unknown extension", + extension: getDummyExtension("test-extension"), in: &ActionRequest{ Action: "grpc:///test-extension-2/test-action", SpaceId: "sp", @@ -168,8 +95,8 @@ func TestServer_Action(t *testing.T) { wantErr: ErrUnknownExtension.Error(), }, { - name: "Deprecated call, without extension", - services: getDummyExtension("test-extension"), + name: "Deprecated call, without extension", + extension: getDummyExtension("test-extension"), in: &ActionRequest{ Action: "test-action", SpaceId: "sp", @@ -179,8 +106,8 @@ func TestServer_Action(t *testing.T) { wantErr: "extension ID required", }, { - name: "Deprecated call, without action and extension)", - services: getDummyExtension("test-extension"), + name: "Deprecated call, without action and extension)", + extension: getDummyExtension("test-extension"), in: &ActionRequest{ SpaceId: "sp", EnvId: "env", @@ -192,7 +119,7 @@ func TestServer_Action(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - srv := NewServer(operation.NewDefaultService(), tt.services) + srv := NewServer(operation.NewDefaultService(), tt.extension) got, err := srv.Action(context.Background(), tt.in) if tt.wantErr != "" { require.Error(t, err)