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 }