From 10071111dbfbc5059db48f3de7939aff7b6da2d5 Mon Sep 17 00:00:00 2001 From: Sergiu Ghitea <28300158+sergiught@users.noreply.github.com> Date: Mon, 30 Jan 2023 15:51:21 +0100 Subject: [PATCH] Refactor IsURLWithHTTPSorEmptyString --- internal/validation/validation.go | 39 ++++++++++++++++++++------ internal/validation/validation_test.go | 6 ++++ 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/internal/validation/validation.go b/internal/validation/validation.go index b94150566..03737fa06 100644 --- a/internal/validation/validation.go +++ b/internal/validation/validation.go @@ -1,17 +1,40 @@ package validation import ( - "strings" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" + "fmt" + "net/url" ) -func IsURLWithHTTPSorEmptyString(i interface{}, s string) ([]string, []error) { - _, errors := validation.IsURLWithHTTPS(i, s) - for _, err := range errors { - if !strings.Contains(err.Error(), "url to not be empty") { - return nil, errors +func IsURLWithHTTPSorEmptyString(rawURL interface{}, key string) ([]string, []error) { + urlString, ok := rawURL.(string) + if !ok { + return nil, []error{ + fmt.Errorf("expected type of %q to be string", key), } } + + if urlString == "" { + return nil, nil + } + + parsedURL, err := url.Parse(urlString) + if err != nil { + return nil, []error{ + fmt.Errorf("expected %q to be a valid url, got %v: %+v", key, urlString, err), + } + } + + if parsedURL.Host == "" { + return nil, []error{ + fmt.Errorf("expected %q to have a host, got %v", key, urlString), + } + } + + if parsedURL.Scheme != "https" { + return nil, []error{ + fmt.Errorf("expected %q to have a url with schema of: %q, got %v", key, "https", urlString), + } + } + return nil, nil } diff --git a/internal/validation/validation_test.go b/internal/validation/validation_test.go index ec5e3050e..61212a2e1 100644 --- a/internal/validation/validation_test.go +++ b/internal/validation/validation_test.go @@ -42,6 +42,12 @@ func TestIsURLWithHTTPSorEmptyString(t *testing.T) { inputURL: "", expectedErrors: nil, }, + { + inputURL: "broken/url", + expectedErrors: []string{ + "expected \"theTestURL\" to have a host, got broken/url", + }, + }, } for i, testCase := range testCases {