Skip to content
Snippets Groups Projects
Select Git revision
  • 1d616f1fd4cd26832b9015ce907cf9bb08acc9c6
  • master default protected
  • refactor/PRXS-3053-Files
  • feature/PRXS-3143-3235-ReferenceOptions
  • feature/PRXS-3421-ImplementNewRefAPI
  • feature/PRXS-3143-LimitReferenceFields
  • feature/PRXS-3234-FeaturePruneIdents
  • feature/3149-LocaleCodeAsID-Feature
  • feature/PRXS-3383-CollectionsRankSortAPI
  • PRXS-3421-RecursiveReferences
  • feature/PRXS-3383-CollectionsSort
  • feature/3109-SerializeFeature
  • release/0.33
  • feature/3109-RecoverySchema
  • feature/3109-feature
  • fix/PRXS-3369-ValidateFields
  • refactor/PRXS-3306-MovePkgGroup1
  • refactor/6-pkg-refactor-expr
  • fix/PRXS-3360-TemplateBuilderPatch
  • feature/3293-MongoV2
  • feature/3272-GoVersionUp
  • v0.33.1
  • v0.32.0
  • v0.31.1
  • v0.31.0
  • v0.30.0
  • v0.29.0
  • v0.28.0
  • v0.27.0-alpha.1+16
  • v0.27.0-alpha.1+15
  • v0.27.0-alpha.1+14
  • v0.27.0-alpha.1+13
  • v0.27.0-alpha.1+12
  • v0.27.0-alpha.1+11
  • v0.27.0-alpha.1+10
  • v0.27.0-alpha.1+9
  • v0.27.0-alpha.1+8
  • v0.27.0-alpha.1+7
  • v0.27.0-alpha.1+6
  • v0.27.0-alpha.1+5
  • v0.27.0-alpha.1+4
41 results

middleware.go

Blame
  • server_test.go 3.40 KiB
    package extension
    
    import (
    	"context"
    	"reflect"
    	"strings"
    	"testing"
    
    	"git.perx.ru/perxis/perxis-go/pkg/errors"
    )
    
    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 из-за возникающих циклических импортов
    type testServerExtension struct {
    	err  error
    	name string
    }
    
    func (t testServerExtension) GetDescriptor() *ExtensionDescriptor {
    	return &ExtensionDescriptor{
    		Extension:   t.name,
    		Title:       strings.ToTitle(t.name),
    		Description: "test extension",
    		Version:     "0.0.0",
    	}
    }
    
    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) Update(ctx context.Context, in *UpdateRequest) 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) {
    	return &ActionResponse{}, t.err
    }