From 5156d21e5a76915a7a81f84a7296fc7f5badc27e Mon Sep 17 00:00:00 2001 From: Kazuyoshi Kato Date: Mon, 25 Oct 2021 12:25:15 -0700 Subject: [PATCH 1/3] Test GetOK This change also removes GetOK in request_test.go. It is somehow duplicated. Signed-off-by: Kazuyoshi Kato --- request_test.go | 22 ++++------------------ values_test.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 18 deletions(-) create mode 100644 values_test.go diff --git a/request_test.go b/request_test.go index 27373008..450823c4 100644 --- a/request_test.go +++ b/request_test.go @@ -167,27 +167,13 @@ func TestJSONRequest(t *testing.T) { func TestReadSingle(t *testing.T) { values := url.Values(make(map[string][]string)) values.Add("something", "the thing") - assert.Equal(t, "the thing", ReadSingleValue(tv(values), "something")) - assert.Empty(t, ReadSingleValue(tv(values), "notthere")) + assert.Equal(t, "the thing", ReadSingleValue(Values(values), "something")) + assert.Empty(t, ReadSingleValue(Values(values), "notthere")) } func TestReadCollection(t *testing.T) { values := url.Values(make(map[string][]string)) values.Add("something", "value1,value2") - assert.Equal(t, []string{"value1", "value2"}, ReadCollectionValue(tv(values), "something", "csv")) - assert.Empty(t, ReadCollectionValue(tv(values), "notthere", "")) -} - -type tv map[string][]string - -func (v tv) GetOK(key string) (value []string, hasKey bool, hasValue bool) { - value, hasKey = v[key] - if !hasKey { - return - } - if len(value) == 0 { - return - } - hasValue = true - return + assert.Equal(t, []string{"value1", "value2"}, ReadCollectionValue(Values(values), "something", "csv")) + assert.Empty(t, ReadCollectionValue(Values(values), "notthere", "")) } diff --git a/values_test.go b/values_test.go new file mode 100644 index 00000000..7f341cb8 --- /dev/null +++ b/values_test.go @@ -0,0 +1,29 @@ +package runtime + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestGetOK(t *testing.T) { + m := make(map[string][]string) + m["key1"] = []string{"value1"} + m["key2"] = []string{} + values := Values(m) + + v, hasKey, hasValue := values.GetOK("key1") + require.Equal(t, []string{"value1"}, v) + require.True(t, hasKey) + require.True(t, hasValue) + + v, hasKey, hasValue = values.GetOK("key2") + require.Equal(t, []string{}, v) + require.True(t, hasKey) + require.False(t, hasValue) + + v, hasKey, hasValue = values.GetOK("key3") + require.Nil(t, v) + require.False(t, hasKey) + require.False(t, hasValue) +} From 77298824e4ba78bec14bc027acfb3aff0fffbda7 Mon Sep 17 00:00:00 2001 From: Kazuyoshi Kato Date: Mon, 25 Oct 2021 12:26:55 -0700 Subject: [PATCH 2/3] Test CanHaveBody, AllowsBody and IsSafe Signed-off-by: Kazuyoshi Kato --- request_test.go | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/request_test.go b/request_test.go index 450823c4..33848456 100644 --- a/request_test.go +++ b/request_test.go @@ -19,6 +19,7 @@ import ( "bytes" "io" "io/ioutil" + "net/http" "net/url" "strings" "testing" @@ -152,17 +153,34 @@ func TestJSONRequest(t *testing.T) { assert.Nil(t, req) } -//func TestCanHaveBody(t *testing.T) { -//assert.True(t, CanHaveBody("put")) -//assert.True(t, CanHaveBody("post")) -//assert.True(t, CanHaveBody("patch")) -//assert.True(t, CanHaveBody("delete")) -//assert.False(t, CanHaveBody("")) -//assert.False(t, CanHaveBody("get")) -//assert.False(t, CanHaveBody("options")) -//assert.False(t, CanHaveBody("head")) -//assert.False(t, CanHaveBody("invalid")) -//} +func TestMethod(t *testing.T) { + testcase := []struct { + method string + canHaveBody bool + allowsBody bool + isSafe bool + }{ + {"put", true, true, false}, + {"post", true, true, false}, + {"patch", true, true, false}, + {"delete", true, true, false}, + {"get", false, true, true}, + {"options", false, true, false}, + {"head", false, false, true}, + {"invalid", false, true, false}, + {"", false, true, false}, + } + + for _, tc := range testcase { + t.Run(tc.method, func(t *testing.T) { + assert.Equal(t, tc.canHaveBody, CanHaveBody(tc.method), "CanHaveBody") + + req := http.Request{Method: tc.method} + assert.Equal(t, tc.allowsBody, AllowsBody(&req), "AllowsBody") + assert.Equal(t, tc.isSafe, IsSafe(&req), "IsSafe") + }) + } +} func TestReadSingle(t *testing.T) { values := url.Values(make(map[string][]string)) From 69c0f1495cf11ee037dbbac457aef0e7af275f0c Mon Sep 17 00:00:00 2001 From: Kazuyoshi Kato Date: Mon, 25 Oct 2021 13:19:18 -0700 Subject: [PATCH 3/3] Test HasBody Signed-off-by: Kazuyoshi Kato --- request_test.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/request_test.go b/request_test.go index 33848456..38500719 100644 --- a/request_test.go +++ b/request_test.go @@ -153,6 +153,14 @@ func TestJSONRequest(t *testing.T) { assert.Nil(t, req) } +func TestHasBody(t *testing.T) { + req, _ := http.NewRequest("GET", "", nil) + assert.False(t, HasBody(req)) + + req.ContentLength = 123 + assert.True(t, HasBody(req)) +} + func TestMethod(t *testing.T) { testcase := []struct { method string