package encoding import ( "net/http" "net/http/httptest" "testing" "github.com/stretchr/testify/assert" ) func TestParseHeaders(t *testing.T) { var val struct { Foo string `header:"foo"` Baz int `header:"baz"` Qux bool `header:"qux,default=true"` } r := httptest.NewRequest(http.MethodGet, "/any", nil) r.Header.Set("foo", "bar") r.Header.Set("baz", "1") assert.Nil(t, ParseHeaders(r.Header, &val)) assert.Equal(t, "bar", val.Foo) assert.Equal(t, 1, val.Baz) assert.True(t, val.Qux) } func TestParseHeadersMulti(t *testing.T) { var val struct { Foo []string `header:"foo"` Baz int `header:"baz"` Qux bool `header:"qux,default=true"` } r := httptest.NewRequest(http.MethodGet, "/any", nil) r.Header.Set("foo", "bar") r.Header.Add("foo", "bar1") r.Header.Set("baz", "1") assert.Nil(t, ParseHeaders(r.Header, &val)) assert.Equal(t, []string{"bar", "bar1"}, val.Foo) assert.Equal(t, 1, val.Baz) assert.True(t, val.Qux) } func TestParseHeadersArrayInt(t *testing.T) { var val struct { Foo []int `header:"foo"` } r := httptest.NewRequest(http.MethodGet, "/any", nil) r.Header.Set("foo", "1") r.Header.Add("foo", "2") assert.Nil(t, ParseHeaders(r.Header, &val)) assert.Equal(t, []int{1, 2}, val.Foo) }