use Kelp::Base -strict; use Kelp; use Kelp::Test; use HTTP::Request::Common; use Test::More; my $app = Kelp->new(mode => 'test'); my $t = Kelp::Test->new(app => $app); # Bare render $app->add_route("/1", sub { $_[0]->res->render }); $t->request(GET "/1") ->code_is(200) ->content_is('') ->content_type_is('text/html'); # Set code $app->add_route("/2", sub { $_[0]->res->set_code(401)->render }); $t->request(GET "/2")->code_is(401); # Set content type $app->add_route("/3", sub { $_[0]->res->html->render }); $t->request(GET "/3")->content_type_is('text/html'); $app->add_route("/4", sub { $_[0]->res->text->render }); $t->request(GET "/4")->content_type_is('text/plain'); $app->add_route("/5", sub { $_[0]->res->json->render({}) }); $t->request(GET "/5")->content_type_is('application/json'); $app->add_route("/51", sub { $_[0]->res->json->render("aaa") }); $t->request(GET "/51")->code_is(200)->content_type_is('application/json'); $app->add_route("/52", sub { $_[0]->res->json->render(\"aaa") }); $t->request(GET "/52")->code_is(500); $app->add_route("/53", sub { $_[0]->res->json->render([]) }); $t->request(GET "/53")->code_is(200)->content_type_is('application/json'); $app->add_route("/6", sub { $_[0]->res->xml->render }); $t->request(GET "/6")->content_type_is('application/xml'); $app->add_route("/7", sub { $_[0]->res->set_content_type('image/png')->render }); $t->request(GET "/7")->content_type_is('image/png'); # Set header $app->add_route("/8", sub { $_[0]->res->set_header('x-something', 'foo')->render }); $t->request(GET "/8")->header_is('x-something', 'foo'); # 404 $app->add_route("/404", sub { $_[0]->res->render_404 }); $t->request(GET "/404")->code_is(404); # 500 $app->add_route("/500", sub { $_[0]->res->render_500 }); $t->request(GET "/500")->code_is(500); # Redirect $app->add_route("/redi1", sub { $_[0]->res->redirect_to('/') }); $t->request(GET "/redi1")->code_is(302); $app->add_route("/redi2", sub { $_[0]->res->redirect_to('/', {}, 301) }); $t->request(GET "/redi2")->code_is(301); # Die $app->add_route("/die", sub { die "You all suck." }); $t->request(GET "/die")->code_is(500); # Render $app->add_route("/r1", sub { return "Ahoi" }); $t->request(GET "/r1") ->code_is(200) ->content_type_is('text/html') ->content_is("Ahoi"); $app->add_route("/r2", sub { return {a => 'foo'} }); $t->request(GET "/r2") ->code_is(200) ->content_type_is('application/json') ->json_cmp({a => 'foo'}); # json_content will return a hash is ref($t->request(GET "/r2")->json_content), 'HASH'; # Template $app->add_route("/t1", sub { $_[0]->res->text->template(\"[% word %]", {word => 'duck'}) }); $t->request(GET "/t1") ->code_is(200) ->content_type_is('text/plain') ->content_is("duck"); $app->add_route("/t2", sub { $_[0]->res->html->template(\"[% word %]", {word => 'swan'}) }); $t->request(GET "/t2") ->code_is(200) ->content_type_is('text/html') ->content_is("swan"); $app->add_route("/bin1", sub { $_[0]->res->render_binary("123") }); $t->request(GET "/bin1")->code_is(500); $app->add_route("/bin2", sub { $_[0]->res->set_content_type("image/png")->render_binary("123") }); $t->request(GET "/bin2")->code_is(200); done_testing;