github.com/xmidt-org/webpa-common@v1.11.9/xhttp/url_test.go (about) 1 package xhttp 2 3 import ( 4 "net/url" 5 "strconv" 6 "testing" 7 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func testApplyURLParserEmpty(t *testing.T) { 12 var ( 13 assert = assert.New(t) 14 urls, err = ApplyURLParser(url.Parse) 15 ) 16 17 assert.Empty(urls) 18 assert.NoError(err) 19 } 20 21 func testApplyURLParserError(t *testing.T, parser func(string) (*url.URL, error), values []string) { 22 var ( 23 assert = assert.New(t) 24 urls, err = ApplyURLParser(parser, values...) 25 ) 26 27 assert.Empty(urls) 28 assert.Error(err) 29 } 30 31 func testApplyURLParserSuccess(t *testing.T, parser func(string) (*url.URL, error), values []string, expected []*url.URL) { 32 var ( 33 assert = assert.New(t) 34 actual, err = ApplyURLParser(parser, values...) 35 ) 36 37 assert.Equal(expected, actual) 38 assert.NoError(err) 39 } 40 41 func TestApplyURLParser(t *testing.T) { 42 t.Run("Empty", testApplyURLParserEmpty) 43 44 t.Run("Error", func(t *testing.T) { 45 testData := []struct { 46 parser func(string) (*url.URL, error) 47 values []string 48 }{ 49 {url.Parse, []string{"%%"}}, 50 {url.Parse, []string{"http://localhost:1234", "%%"}}, 51 {url.Parse, []string{"%%", "https://foobar.net:8080"}}, 52 {url.Parse, []string{"http://something.net", "%%", "https://foobar.net:8080"}}, 53 {url.ParseRequestURI, []string{""}}, 54 {url.ParseRequestURI, []string{"http://localhost:1234", ""}}, 55 {url.ParseRequestURI, []string{"", "https://foobar.net:8080"}}, 56 {url.ParseRequestURI, []string{"http://something.net", "", "https://foobar.net:8080"}}, 57 } 58 59 for i, record := range testData { 60 t.Run(strconv.Itoa(i), func(t *testing.T) { 61 testApplyURLParserError(t, record.parser, record.values) 62 }) 63 } 64 }) 65 66 t.Run("Success", func(t *testing.T) { 67 testData := []struct { 68 parser func(string) (*url.URL, error) 69 values []string 70 expected []*url.URL 71 }{ 72 {url.Parse, []string{"http://localhost"}, []*url.URL{&url.URL{Scheme: "http", Host: "localhost"}}}, 73 {url.Parse, []string{"https://foobar.net:8080", "http://localhost"}, []*url.URL{&url.URL{Scheme: "https", Host: "foobar.net:8080"}, &url.URL{Scheme: "http", Host: "localhost"}}}, 74 {url.ParseRequestURI, []string{"http://localhost"}, []*url.URL{&url.URL{Scheme: "http", Host: "localhost"}}}, 75 {url.ParseRequestURI, []string{"https://foobar.net:8080", "http://localhost"}, []*url.URL{&url.URL{Scheme: "https", Host: "foobar.net:8080"}, &url.URL{Scheme: "http", Host: "localhost"}}}, 76 } 77 78 for i, record := range testData { 79 t.Run(strconv.Itoa(i), func(t *testing.T) { 80 testApplyURLParserSuccess(t, record.parser, record.values, record.expected) 81 }) 82 } 83 }) 84 }