From 9c4512b8c9576a6b7f025d98408c4ba10516c010 Mon Sep 17 00:00:00 2001
From: Alena Petraki <alena.petraki@gmail.com>
Date: Wed, 11 Oct 2023 13:54:55 +0300
Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D1=82?=
 =?UTF-8?q?=D0=B5=D1=81=D1=82=D0=BE=D0=B2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 perxis-proto                 |   2 +-
 pkg/extension/client_test.go |  76 --------------------
 pkg/extension/schema.go      |  48 ++++++-------
 pkg/extension/server.go      |   2 +-
 pkg/extension/server_test.go | 135 ++++++++---------------------------
 5 files changed, 55 insertions(+), 208 deletions(-)
 delete mode 100644 pkg/extension/client_test.go

diff --git a/perxis-proto b/perxis-proto
index 5b9dd0ce..81c96784 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 d4951340..00000000
--- 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 2b78ba1b..96406ad5 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 7e994f6d..b69b10a3 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 d5dcf76e..491a6071 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)
-- 
GitLab