mirror of
https://gitea.invidious.io/iv-org/shard-kemal.git
synced 2024-08-15 00:53:36 +00:00
added verb for filters and minor improvements
This commit is contained in:
parent
62e9170baf
commit
c5201f01ad
13 changed files with 259 additions and 92 deletions
|
@ -2,7 +2,7 @@ require "./spec_helper"
|
|||
|
||||
describe "Context" do
|
||||
it "has a default content type" do
|
||||
kemal = Kemal::RouteHandler.new
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "GET", "/" do |env|
|
||||
"Hello"
|
||||
end
|
||||
|
@ -13,7 +13,7 @@ describe "Context" do
|
|||
end
|
||||
|
||||
it "sets content type" do
|
||||
kemal = Kemal::RouteHandler.new
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "GET", "/" do |env|
|
||||
env.response.content_type = "application/json"
|
||||
"Hello"
|
||||
|
@ -25,7 +25,7 @@ describe "Context" do
|
|||
end
|
||||
|
||||
it "parses headers" do
|
||||
kemal = Kemal::RouteHandler.new
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "GET", "/" do |env|
|
||||
name = env.request.headers["name"]
|
||||
"Hello #{name}"
|
||||
|
@ -39,7 +39,7 @@ describe "Context" do
|
|||
end
|
||||
|
||||
it "sets response headers" do
|
||||
kemal = Kemal::RouteHandler.new
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "GET", "/" do |env|
|
||||
env.response.headers.add "Accept-Language", "tr"
|
||||
end
|
||||
|
|
|
@ -5,19 +5,145 @@ describe "Kemal::Middleware::Filters" do
|
|||
test_filter = FilterTest.new
|
||||
test_filter.modified = "false"
|
||||
|
||||
filter = Kemal::Middleware::Filter.new
|
||||
filter.add :before, "/greetings", {} of Symbol => String { test_filter.modified = "true" }
|
||||
filter_middleware = Kemal::Middleware::Filter.new
|
||||
filter_middleware._add_route_filter("GET", "/greetings", :before) { test_filter.modified = "true" }
|
||||
|
||||
kemal = Kemal::RouteHandler.new
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "GET", "/greetings" { test_filter.modified }
|
||||
|
||||
test_filter.modified.should eq("false")
|
||||
request = HTTP::Request.new("GET", "/greetings")
|
||||
create_request_and_return_io(filter, request)
|
||||
create_request_and_return_io(filter_middleware, request)
|
||||
io_with_context = create_request_and_return_io(kemal, request)
|
||||
client_response = HTTP::Client::Response.from_io(io_with_context, decompress: false)
|
||||
client_response.body.should eq("true")
|
||||
end
|
||||
|
||||
it "executes code before GET home request but not POST home request" do
|
||||
test_filter = FilterTest.new
|
||||
test_filter.modified = "false"
|
||||
|
||||
filter_middleware = Kemal::Middleware::Filter.new
|
||||
filter_middleware._add_route_filter("GET", "/greetings", :before) { test_filter.modified = test_filter.modified == "true" ? "false" : "true" }
|
||||
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "GET", "/greetings" { test_filter.modified }
|
||||
kemal.add_route "POST", "/greetings" { test_filter.modified }
|
||||
|
||||
test_filter.modified.should eq("false")
|
||||
|
||||
request = HTTP::Request.new("GET", "/greetings")
|
||||
create_request_and_return_io(filter_middleware, request)
|
||||
io_with_context = create_request_and_return_io(kemal, request)
|
||||
client_response = HTTP::Client::Response.from_io(io_with_context, decompress: false)
|
||||
client_response.body.should eq("true")
|
||||
|
||||
request = HTTP::Request.new("POST", "/greetings")
|
||||
create_request_and_return_io(filter_middleware, request)
|
||||
io_with_context = create_request_and_return_io(kemal, request)
|
||||
client_response = HTTP::Client::Response.from_io(io_with_context, decompress: false)
|
||||
client_response.body.should eq("true")
|
||||
end
|
||||
|
||||
it "executes code before all GET/POST home request" do
|
||||
test_filter = FilterTest.new
|
||||
test_filter.modified = "false"
|
||||
|
||||
filter_middleware = Kemal::Middleware::Filter.new
|
||||
filter_middleware._add_route_filter("ALL", "/greetings", :before) { test_filter.modified = test_filter.modified == "true" ? "false" : "true" }
|
||||
filter_middleware._add_route_filter("GET", "/greetings", :before) { test_filter.modified = test_filter.modified == "true" ? "false" : "true" }
|
||||
filter_middleware._add_route_filter("POST", "/greetings", :before) { test_filter.modified = test_filter.modified == "true" ? "false" : "true" }
|
||||
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "GET", "/greetings" { test_filter.modified }
|
||||
kemal.add_route "POST", "/greetings" { test_filter.modified }
|
||||
|
||||
test_filter.modified.should eq("false")
|
||||
|
||||
request = HTTP::Request.new("GET", "/greetings")
|
||||
create_request_and_return_io(filter_middleware, request)
|
||||
io_with_context = create_request_and_return_io(kemal, request)
|
||||
client_response = HTTP::Client::Response.from_io(io_with_context, decompress: false)
|
||||
client_response.body.should eq("false")
|
||||
|
||||
request = HTTP::Request.new("POST", "/greetings")
|
||||
create_request_and_return_io(filter_middleware, request)
|
||||
io_with_context = create_request_and_return_io(kemal, request)
|
||||
client_response = HTTP::Client::Response.from_io(io_with_context, decompress: false)
|
||||
client_response.body.should eq("false")
|
||||
end
|
||||
|
||||
it "executes code after home request" do
|
||||
test_filter = FilterTest.new
|
||||
test_filter.modified = "false"
|
||||
|
||||
filter_middleware = Kemal::Middleware::Filter.new
|
||||
filter_middleware._add_route_filter("GET", "/greetings", :after) { test_filter.modified = "true" }
|
||||
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "GET", "/greetings" { test_filter.modified }
|
||||
|
||||
test_filter.modified.should eq("false")
|
||||
request = HTTP::Request.new("GET", "/greetings")
|
||||
create_request_and_return_io(filter_middleware, request)
|
||||
io_with_context = create_request_and_return_io(kemal, request)
|
||||
client_response = HTTP::Client::Response.from_io(io_with_context, decompress: false)
|
||||
client_response.body.should eq("true")
|
||||
end
|
||||
|
||||
it "executes code after GET home request but not POST home request" do
|
||||
test_filter = FilterTest.new
|
||||
test_filter.modified = "false"
|
||||
|
||||
filter_middleware = Kemal::Middleware::Filter.new
|
||||
filter_middleware._add_route_filter("GET", "/greetings", :after) { test_filter.modified = test_filter.modified == "true" ? "false" : "true" }
|
||||
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "GET", "/greetings" { test_filter.modified }
|
||||
kemal.add_route "POST", "/greetings" { test_filter.modified }
|
||||
|
||||
test_filter.modified.should eq("false")
|
||||
|
||||
request = HTTP::Request.new("GET", "/greetings")
|
||||
create_request_and_return_io(filter_middleware, request)
|
||||
io_with_context = create_request_and_return_io(kemal, request)
|
||||
client_response = HTTP::Client::Response.from_io(io_with_context, decompress: false)
|
||||
client_response.body.should eq("true")
|
||||
|
||||
request = HTTP::Request.new("POST", "/greetings")
|
||||
create_request_and_return_io(filter_middleware, request)
|
||||
io_with_context = create_request_and_return_io(kemal, request)
|
||||
client_response = HTTP::Client::Response.from_io(io_with_context, decompress: false)
|
||||
client_response.body.should eq("true")
|
||||
end
|
||||
|
||||
it "executes code after all GET/POST home request" do
|
||||
test_filter = FilterTest.new
|
||||
test_filter.modified = "false"
|
||||
|
||||
filter_middleware = Kemal::Middleware::Filter.new
|
||||
filter_middleware._add_route_filter("ALL", "/greetings", :after) { test_filter.modified = test_filter.modified == "true" ? "false" : "true" }
|
||||
filter_middleware._add_route_filter("GET", "/greetings", :after) { test_filter.modified = test_filter.modified == "true" ? "false" : "true" }
|
||||
filter_middleware._add_route_filter("POST", "/greetings", :after) { test_filter.modified = test_filter.modified == "true" ? "false" : "true" }
|
||||
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "GET", "/greetings" { test_filter.modified }
|
||||
kemal.add_route "POST", "/greetings" { test_filter.modified }
|
||||
|
||||
test_filter.modified.should eq("false")
|
||||
request = HTTP::Request.new("GET", "/greetings")
|
||||
create_request_and_return_io(filter_middleware, request)
|
||||
io_with_context = create_request_and_return_io(kemal, request)
|
||||
client_response = HTTP::Client::Response.from_io(io_with_context, decompress: false)
|
||||
client_response.body.should eq("false")
|
||||
|
||||
request = HTTP::Request.new("POST", "/greetings")
|
||||
create_request_and_return_io(filter_middleware, request)
|
||||
io_with_context = create_request_and_return_io(kemal, request)
|
||||
client_response = HTTP::Client::Response.from_io(io_with_context, decompress: false)
|
||||
client_response.body.should eq("false")
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class FilterTest
|
||||
|
|
|
@ -7,7 +7,7 @@ describe "ParamParser" do
|
|||
"Hello #{hasan}"
|
||||
end
|
||||
request = HTTP::Request.new("POST", "/?hasan=cemal")
|
||||
params = Kemal::ParamParser.new(route, request).parse
|
||||
params = Kemal::ParamParser.new(request).parse
|
||||
params["hasan"].should eq "cemal"
|
||||
end
|
||||
|
||||
|
@ -26,7 +26,7 @@ describe "ParamParser" do
|
|||
headers: HTTP::Headers{"Content-Type": "application/x-www-form-urlencoded"},
|
||||
)
|
||||
|
||||
params = Kemal::ParamParser.new(route, request).parse
|
||||
params = Kemal::ParamParser.new(request).parse
|
||||
params.should eq({"hasan" => "cemal", "name" => "serdar", "age" => "99"})
|
||||
end
|
||||
|
||||
|
@ -41,7 +41,7 @@ describe "ParamParser" do
|
|||
headers: HTTP::Headers{"Content-Type": "application/json"},
|
||||
)
|
||||
|
||||
params = Kemal::ParamParser.new(route, request).parse
|
||||
params = Kemal::ParamParser.new(request).parse
|
||||
params.should eq({"name": "Serdar"})
|
||||
end
|
||||
|
||||
|
@ -55,7 +55,7 @@ describe "ParamParser" do
|
|||
headers: HTTP::Headers{"Content-Type": "application/json"},
|
||||
)
|
||||
|
||||
params = Kemal::ParamParser.new(route, request).parse
|
||||
params = Kemal::ParamParser.new(request).parse
|
||||
params.should eq({"_json": [1]})
|
||||
end
|
||||
|
||||
|
@ -69,7 +69,7 @@ describe "ParamParser" do
|
|||
headers: HTTP::Headers{"Content-Type": "application/json"},
|
||||
)
|
||||
|
||||
params = Kemal::ParamParser.new(route, request).parse
|
||||
params = Kemal::ParamParser.new(request).parse
|
||||
params.should eq({"foo": "bar", "_json": [1]})
|
||||
end
|
||||
|
||||
|
@ -82,7 +82,7 @@ describe "ParamParser" do
|
|||
headers: HTTP::Headers{"Content-Type": "application/json"},
|
||||
)
|
||||
|
||||
params = Kemal::ParamParser.new(route, request).parse
|
||||
params = Kemal::ParamParser.new(request).parse
|
||||
params.should eq({} of String => AllParamTypes)
|
||||
end
|
||||
end
|
||||
|
@ -103,7 +103,7 @@ describe "ParamParser" do
|
|||
headers: HTTP::Headers{"Content-Type": "text/plain"},
|
||||
)
|
||||
|
||||
params = Kemal::ParamParser.new(route, request).parse
|
||||
params = Kemal::ParamParser.new(request).parse
|
||||
params.should eq({"hasan" => "cemal"})
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,7 +2,7 @@ require "./spec_helper"
|
|||
|
||||
describe "Kemal::RouteHandler" do
|
||||
it "routes" do
|
||||
kemal = Kemal::RouteHandler.new
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "GET", "/" do
|
||||
"hello"
|
||||
end
|
||||
|
@ -13,7 +13,7 @@ describe "Kemal::RouteHandler" do
|
|||
end
|
||||
|
||||
it "routes request with query string" do
|
||||
kemal = Kemal::RouteHandler.new
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "GET", "/" do |env|
|
||||
"hello #{env.params["message"]}"
|
||||
end
|
||||
|
@ -24,7 +24,7 @@ describe "Kemal::RouteHandler" do
|
|||
end
|
||||
|
||||
it "routes request with multiple query strings" do
|
||||
kemal = Kemal::RouteHandler.new
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "GET", "/" do |env|
|
||||
"hello #{env.params["message"]} time #{env.params["time"]}"
|
||||
end
|
||||
|
@ -35,7 +35,7 @@ describe "Kemal::RouteHandler" do
|
|||
end
|
||||
|
||||
it "route parameter has more precedence than query string arguments" do
|
||||
kemal = Kemal::RouteHandler.new
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "GET", "/:message" do |env|
|
||||
"hello #{env.params["message"]}"
|
||||
end
|
||||
|
@ -46,7 +46,7 @@ describe "Kemal::RouteHandler" do
|
|||
end
|
||||
|
||||
it "parses simple JSON body" do
|
||||
kemal = Kemal::RouteHandler.new
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "POST", "/" do |env|
|
||||
name = env.params["name"]
|
||||
age = env.params["age"]
|
||||
|
@ -66,7 +66,7 @@ describe "Kemal::RouteHandler" do
|
|||
end
|
||||
|
||||
it "parses JSON with string array" do
|
||||
kemal = Kemal::RouteHandler.new
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "POST", "/" do |env|
|
||||
skills = env.params["skills"] as Array
|
||||
"Skills #{skills.each.join(',')}"
|
||||
|
@ -85,7 +85,7 @@ describe "Kemal::RouteHandler" do
|
|||
end
|
||||
|
||||
it "parses JSON with json object array" do
|
||||
kemal = Kemal::RouteHandler.new
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "POST", "/" do |env|
|
||||
skills = env.params["skills"] as Array
|
||||
skills_from_languages = skills.map do |skill|
|
||||
|
@ -110,7 +110,7 @@ describe "Kemal::RouteHandler" do
|
|||
|
||||
# Removed until there is a way to test multiple middlewares
|
||||
# it "renders 404 on not found" do
|
||||
# kemal = Kemal::RouteHandler.new
|
||||
# kemal = Kemal::RouteHandler::INSTANCE
|
||||
# request = HTTP::Request.new("GET", "/?message=world")
|
||||
# io_with_context = create_request_and_return_io(kemal, request)
|
||||
# client_response = HTTP::Client::Response.from_io(io_with_context, decompress: false)
|
||||
|
@ -118,7 +118,7 @@ describe "Kemal::RouteHandler" do
|
|||
# end
|
||||
|
||||
# it "renders 500 on exception" do
|
||||
# kemal = Kemal::RouteHandler.new
|
||||
# kemal = Kemal::RouteHandler::INSTANCE
|
||||
# kemal.add_route "GET", "/" do
|
||||
# raise "Exception"
|
||||
# end
|
||||
|
@ -130,7 +130,7 @@ describe "Kemal::RouteHandler" do
|
|||
# end
|
||||
#
|
||||
it "checks for _method param in POST request to simulate PUT" do
|
||||
kemal = Kemal::RouteHandler.new
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "PUT", "/" do |env|
|
||||
"Hello World from PUT"
|
||||
end
|
||||
|
@ -146,7 +146,7 @@ describe "Kemal::RouteHandler" do
|
|||
end
|
||||
|
||||
it "checks for _method param in POST request to simulate PATCH" do
|
||||
kemal = Kemal::RouteHandler.new
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "PATCH", "/" do |env|
|
||||
"Hello World from PATCH"
|
||||
end
|
||||
|
@ -162,7 +162,7 @@ describe "Kemal::RouteHandler" do
|
|||
end
|
||||
|
||||
it "checks for _method param in POST request to simulate DELETE" do
|
||||
kemal = Kemal::RouteHandler.new
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "DELETE", "/" do |env|
|
||||
"Hello World from DELETE"
|
||||
end
|
||||
|
@ -179,7 +179,7 @@ describe "Kemal::RouteHandler" do
|
|||
end
|
||||
|
||||
it "can process HTTP HEAD requests for defined GET routes" do
|
||||
kemal = Kemal::RouteHandler.new
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "GET", "/" do |env|
|
||||
"Hello World from GET"
|
||||
end
|
||||
|
@ -191,7 +191,7 @@ describe "Kemal::RouteHandler" do
|
|||
|
||||
# Removed until there is a way to test multiple middlewares
|
||||
# it "can't process HTTP HEAD requests for undefined GET routes" do
|
||||
# kemal = Kemal::RouteHandler.new
|
||||
# kemal = Kemal::RouteHandler::INSTANCE
|
||||
# request = HTTP::Request.new("HEAD", "/")
|
||||
# io_with_context = create_request_and_return_io(kemal, request)
|
||||
# client_response = HTTP::Client::Response.from_io(io_with_context, decompress: false)
|
||||
|
@ -199,7 +199,7 @@ describe "Kemal::RouteHandler" do
|
|||
# end
|
||||
|
||||
it "redirects user to provided url" do
|
||||
kemal = Kemal::RouteHandler.new
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "GET", "/" do |env|
|
||||
env.redirect "/login"
|
||||
end
|
||||
|
|
|
@ -3,7 +3,7 @@ require "./spec_helper"
|
|||
describe "Route" do
|
||||
describe "match?" do
|
||||
it "matches the correct route" do
|
||||
kemal = Kemal::RouteHandler.new
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "GET", "/route1" do |env|
|
||||
"Route 1"
|
||||
end
|
||||
|
|
|
@ -40,4 +40,5 @@ Spec.before_each do
|
|||
config.env = "development"
|
||||
config.setup_logging
|
||||
config.handlers.clear
|
||||
Kemal::RouteHandler::INSTANCE.tree = Radix::Tree.new
|
||||
end
|
||||
|
|
|
@ -6,7 +6,7 @@ end
|
|||
|
||||
describe "Views" do
|
||||
it "renders file" do
|
||||
kemal = Kemal::RouteHandler.new
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "GET", "/view/:name" do |env|
|
||||
name = env.params["name"]
|
||||
render "spec/asset/hello.ecr"
|
||||
|
@ -18,7 +18,7 @@ describe "Views" do
|
|||
end
|
||||
|
||||
it "renders file with dynamic variables" do
|
||||
kemal = Kemal::RouteHandler.new
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "GET", "/view/:name" do |env|
|
||||
name = env.params["name"]
|
||||
render_with_base_and_layout "hello.ecr"
|
||||
|
@ -30,7 +30,7 @@ describe "Views" do
|
|||
end
|
||||
|
||||
it "renders layout" do
|
||||
kemal = Kemal::RouteHandler.new
|
||||
kemal = Kemal::RouteHandler::INSTANCE
|
||||
kemal.add_route "GET", "/view/:name" do |env|
|
||||
name = env.params["name"]
|
||||
render "spec/asset/hello.ecr", "spec/asset/layout.ecr"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue