github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/internal/build/headers_test.go (about)

     1  package build
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/opentelekomcloud/gophertelekomcloud/openstack/common/pointerto"
     7  	"github.com/stretchr/testify/require"
     8  )
     9  
    10  type HeadersStruct struct {
    11  	Bar    string `h:"x_bar" required:"true"`
    12  	Baz    int    `h:"lorem_ipsum"`
    13  	Boop   *bool  `h:"boop"`
    14  	Foo    []int  `h:"foo"`
    15  	SkipMe string
    16  }
    17  
    18  func TestHeaders_ok(t *testing.T) {
    19  	t.Parallel()
    20  
    21  	cases := map[string]struct {
    22  		opts     *HeadersStruct
    23  		expected map[string]string
    24  	}{
    25  		"simple": {
    26  			&HeadersStruct{
    27  				Bar:    "bar",
    28  				Baz:    67,
    29  				Boop:   pointerto.Bool(false),
    30  				SkipMe: "skipping",
    31  			},
    32  			map[string]string{
    33  				"x_bar":       "bar",
    34  				"lorem_ipsum": "67",
    35  				"boop":        "false",
    36  			},
    37  		},
    38  	}
    39  
    40  	for name, data := range cases {
    41  		t.Run(name, func(t *testing.T) {
    42  			data := data
    43  
    44  			t.Parallel()
    45  
    46  			headers, err := Headers(data.opts)
    47  			require.NoError(t, err)
    48  			require.EqualValues(t, data.expected, headers)
    49  		})
    50  	}
    51  }
    52  
    53  func TestHeaders_notOk(t *testing.T) {
    54  	t.Parallel()
    55  
    56  	cases := map[string]struct {
    57  		opts   interface{}
    58  		errMsg string
    59  	}{
    60  		"nil": {
    61  			nil,
    62  			"error building headers: nil options provided",
    63  		},
    64  		"not_struct": {
    65  			map[string]interface{}{},
    66  			"error building headers: options type is not a struct",
    67  		},
    68  		"no_required": {
    69  			&HeadersStruct{},
    70  			"error building headers: required header [Bar] not set",
    71  		},
    72  		"unsupported_type": {
    73  			&HeadersStruct{Bar: "1", Foo: []int{1, 2}},
    74  			"error building headers: value of unsupported type []int",
    75  		},
    76  	}
    77  
    78  	for name, data := range cases {
    79  		t.Run(name, func(t *testing.T) {
    80  			data := data
    81  
    82  			t.Parallel()
    83  
    84  			_, err := Headers(data.opts)
    85  			require.Error(t, err)
    86  			require.EqualError(t, err, data.errMsg)
    87  		})
    88  	}
    89  }