diff --git a/pkg/action-url/action_url.go b/pkg/action-url/action_url.go index 494f0556d6594a924dc2f2bbb20361df9e3b1d80..ccd67430156130377a49f5ef1c7cd28afc298644 100644 --- a/pkg/action-url/action_url.go +++ b/pkg/action-url/action_url.go @@ -17,7 +17,29 @@ type ActionURL struct { // New возвращает структуру ActionURL func New(action string) (*ActionURL, error) { - return parse(action) + actionURL := &ActionURL{} + + if action == "" { + return actionURL, nil + } + + err := actionURL.SetURL(action) + if err != nil { + return nil, err + } + if actionURL.URL.Scheme == "grpc" { + path := actionURL.Path + if strings.HasPrefix(actionURL.Path, "/") { + path = actionURL.Path[1:] + } + splitPath := strings.Split(path, "/") + if len(splitPath) < 2 { + return nil, errors.Errorf("incorrect action URL, no action id: '%s'", action) + } + actionURL.extension = splitPath[0] + actionURL.id = splitPath[1] + } + return actionURL, nil } // ID возвращает сохраненный в ActionURL id действия @@ -55,28 +77,3 @@ func (p *ActionURL) Make() string { } return p.URL.String() } - -// parse функция для заполнения структуры ActionURL из переданного действия -func parse(action string) (*ActionURL, error) { - if action == "" { - return &ActionURL{}, nil - } - actionURL := &ActionURL{} - err := actionURL.SetURL(action) - if err != nil { - return nil, err - } - if actionURL.URL.Scheme == "grpc" { - path := actionURL.Path - if strings.HasPrefix(actionURL.Path, "/") { - path = actionURL.Path[1:] - } - splitPath := strings.Split(path, "/") - if len(splitPath) < 2 { - return nil, errors.Errorf("incorrect action URL, no action id: '%s'", action) - } - actionURL.extension = splitPath[0] - actionURL.id = splitPath[1] - } - return actionURL, nil -} diff --git a/pkg/action-url/action_url_test.go b/pkg/action-url/action_url_test.go index 30b4b32be112ee13250c8be929181d49a1301768..6ac8a3bd32fee851eeeda9d640d113bac80268c5 100644 --- a/pkg/action-url/action_url_test.go +++ b/pkg/action-url/action_url_test.go @@ -61,6 +61,12 @@ func TestActionURL_New(t *testing.T) { want: nil, wantErr: assert.Error, }, + { + name: "With no action id", + action: "grpc:///perxisweb", + want: nil, + wantErr: assert.Error, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {