| 201 | } |
| 202 | |
| 203 | func TestEncodeJSONRequest(t *testing.T) { |
| 204 | var header http.Header |
| 205 | var body string |
| 206 | |
| 207 | server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| 208 | b, err := ioutil.ReadAll(r.Body) |
| 209 | if err != nil && err != io.EOF { |
| 210 | t.Fatal(err) |
| 211 | } |
| 212 | header = r.Header |
| 213 | body = string(b) |
| 214 | })) |
| 215 | |
| 216 | defer server.Close() |
| 217 | |
| 218 | serverURL, err := url.Parse(server.URL) |
| 219 | |
| 220 | if err != nil { |
| 221 | t.Fatal(err) |
| 222 | } |
| 223 | |
| 224 | client := httptransport.NewClient( |
| 225 | "POST", |
| 226 | serverURL, |
| 227 | httptransport.EncodeJSONRequest, |
| 228 | func(context.Context, *http.Response) (interface{}, error) { return nil, nil }, |
| 229 | ).Endpoint() |
| 230 | |
| 231 | for _, test := range []struct { |
| 232 | value interface{} |
| 233 | body string |
| 234 | }{ |
| 235 | {nil, "null\n"}, |
| 236 | {12, "12\n"}, |
| 237 | {1.2, "1.2\n"}, |
| 238 | {true, "true\n"}, |
| 239 | {"test", "\"test\"\n"}, |
| 240 | {enhancedRequest{Foo: "foo"}, "{\"foo\":\"foo\"}\n"}, |
| 241 | } { |
| 242 | if _, err := client(context.Background(), test.value); err != nil { |
| 243 | t.Error(err) |
| 244 | continue |
| 245 | } |
| 246 | |
| 247 | if body != test.body { |
| 248 | t.Errorf("%v: actual %#v, expected %#v", test.value, body, test.body) |
| 249 | } |
| 250 | } |
| 251 | |
| 252 | if _, err := client(context.Background(), enhancedRequest{Foo: "foo"}); err != nil { |
| 253 | t.Fatal(err) |
| 254 | } |
| 255 | |
| 256 | if _, ok := header["X-Edward"]; !ok { |
| 257 | t.Fatalf("X-Edward value: actual %v, expected %v", nil, []string{"Snowden"}) |
| 258 | } |
| 259 | |
| 260 | if v := header.Get("X-Edward"); v != "Snowden" { |