application/json GETs can have no request body.

This commit is contained in:
Micah Geisel 2015-11-09 16:35:28 -08:00
parent d8ab11f73f
commit dea9b2f663
2 changed files with 26 additions and 11 deletions

View File

@ -30,18 +30,33 @@ describe "ParamParser" do
params.should eq({"hasan" => "cemal", "name" => "serdar", "age" => "99"})
end
it "parses request body" do
route = Route.new "POST", "/" { }
context "when content type is application/json" do
it "parses request body" do
route = Route.new "POST", "/" { }
request = HTTP::Request.new(
"POST",
"/",
body: "{\"name\": \"Serdar\"}",
headers: HTTP::Headers{"Content-Type": "application/json"},
)
request = HTTP::Request.new(
"POST",
"/",
body: "{\"name\": \"Serdar\"}",
headers: HTTP::Headers{"Content-Type": "application/json"},
)
params = Kemal::ParamParser.new(route, request).parse
params.should eq({"name": "Serdar"})
params = Kemal::ParamParser.new(route, request).parse
params.should eq({"name": "Serdar"})
end
it "handles no request body" do
route = Route.new "GET", "/" { }
request = HTTP::Request.new(
"GET",
"/",
headers: HTTP::Headers{"Content-Type": "application/json"},
)
params = Kemal::ParamParser.new(route, request).parse
params.should eq({} of String => AllParamTypes)
end
end
context "when content type is incorrect" do

View File

@ -38,7 +38,7 @@ class Kemal::ParamParser
end
def parse_json
return unless @request.headers["Content-Type"]? == APPLICATION_JSON
return unless @request.body && @request.headers["Content-Type"]? == APPLICATION_JSON
body = @request.body as String
json = JSON.parse(body) as Hash
json.each do |k, v|