| File: | t/app-restful-request.t |
| Coverage: | 100.0% |
| line | stmt | bran | cond | sub | pod | time | code |
|---|---|---|---|---|---|---|---|
| 1 | #!/usr/bin/env perl -w | ||||||
| 2 | 1 1 1 | 100 9 11 | use strict; | ||||
| 3 | 1 1 1 | 10 2 11 | use warnings; | ||||
| 4 | 1 1 1 | 108 5 20 | use Test::More; | ||||
| 5 | 1 1 1 | 96 5 5 | use Moose (); | ||||
| 6 | |||||||
| 7 | package PostsController; | ||||||
| 8 | 1 1 1 | 108 4 15 | use Railsish::Controller; | ||||
| 9 | 1 1 1 | 11 3 19 | use Test::More; | ||||
| 10 | |||||||
| 11 | sub index { | ||||||
| 12 | 1 | 9 | response->body("index is rendered"); | ||||
| 13 | } | ||||||
| 14 | |||||||
| 15 | sub show { | ||||||
| 16 | 1 | 9 | my $id = params("id"); | ||||
| 17 | 1 | 7 | response->body("post($id) is rendered"); | ||||
| 18 | } | ||||||
| 19 | |||||||
| 20 | sub new { | ||||||
| 21 | 1 | 8 | response->body("new_post is rendered") | ||||
| 22 | } | ||||||
| 23 | |||||||
| 24 | sub edit { | ||||||
| 25 | 1 1 | 8 7 | response->body("edit_post(@{[ params('id') ]}) is rendered") | ||||
| 26 | } | ||||||
| 27 | |||||||
| 28 | sub create { | ||||||
| 29 | 1 | 8 | response->body("create_post is rendered"); | ||||
| 30 | } | ||||||
| 31 | |||||||
| 32 | sub update { | ||||||
| 33 | 1 1 | 9 8 | response->body("update_post(@{[ params('id') ]}) is rendered"); | ||||
| 34 | } | ||||||
| 35 | |||||||
| 36 | sub destroy { | ||||||
| 37 | 1 1 | 9 7 | response->body("destroy_post(@{[ params('id') ]}) is rendered"); | ||||
| 38 | } | ||||||
| 39 | |||||||
| 40 | package main; | ||||||
| 41 | 1 1 1 | 77 6 16 | use Railsish::Router; | ||||
| 42 | |||||||
| 43 | Railsish::Router->draw( | ||||||
| 44 | sub { | ||||||
| 45 | 1 | 5 | my ($map) = @_; | ||||
| 46 | 1 | 9 | $map->resources("posts") | ||||
| 47 | } | ||||||
| 48 | 1 | 30 | ); | ||||
| 49 | |||||||
| 50 | 1 1 1 | 88 5 20 | use Railsish::Dispatcher; | ||||
| 51 | 1 1 1 | 77 5 16 | use HTTP::Engine; | ||||
| 52 | |||||||
| 53 | 1 1 1 | 85 4 19 | use HTTP::Request; | ||||
| 54 | |||||||
| 55 | my $engine = HTTP::Engine->new( | ||||||
| 56 | interface => { | ||||||
| 57 | module => "Test", | ||||||
| 58 | request_handler => sub { | ||||||
| 59 | 11 | 333 | Railsish::Dispatcher->dispatch(@_); | ||||
| 60 | } | ||||||
| 61 | } | ||||||
| 62 | 1 | 30 | ); | ||||
| 63 | |||||||
| 64 | 1 | 116 | my @reqs = ( | ||||
| 65 | # Good requests | ||||||
| 66 | [GET => "/posts", "index is rendered"], | ||||||
| 67 | [GET => "/posts/3", "post(3) is rendered"], | ||||||
| 68 | [GET => "/posts/new", "new_post is rendered"], | ||||||
| 69 | [GET => "/posts/3/edit", "edit_post(3) is rendered"], | ||||||
| 70 | [POST => "/posts", undef, "xxx", "create_post is rendered"], | ||||||
| 71 | [PUT => "/posts/3", undef, 'yyy', "update_post(3) is rendered"], | ||||||
| 72 | [DELETE => "/posts/3", "destroy_post(3) is rendered"], | ||||||
| 73 | |||||||
| 74 | # Bad requests | ||||||
| 75 | [GET => "/posts/destroy/3", "internal server error"], | ||||||
| 76 | [GET => "/posts/edit/3", "internal server error"], | ||||||
| 77 | [POST => "/posts/show", "internal server error"], | ||||||
| 78 | [PUT => "/posts", "internal server error"], | ||||||
| 79 | ); | ||||||
| 80 | |||||||
| 81 | 1 | 17 | plan tests => 0+@reqs; | ||||
| 82 | |||||||
| 83 | 1 | 393 | for (@reqs) { | ||||
| 84 | 11 | 217 | my $response_content = pop(@$_); | ||||
| 85 | 11 | 154 | my $response = $engine->run(HTTP::Request->new(@$_)); | ||||
| 86 | 11 | 33 | is( | ||||
| 87 | $response->content, | ||||||
| 88 | $response_content, | ||||||
| 89 | "$_->[0] $_->[1] => $response_content" | ||||||
| 90 | ); | ||||||
| 91 | } | ||||||
| 92 | |||||||