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  }