1use strict; 2use warnings; 3use Dancer::ModuleLoader; 4use Test::More import => ['!pass']; 5 6plan tests => 16; 7 8{ 9 10 package Webservice; 11 use Dancer; 12 use Dancer::Plugin::REST; 13 14 resource user => 'get' => \&on_get_user, 15 'create' => \&on_create_user, 16 'delete' => \&on_delete_user, 17 'update' => \&on_update_user; 18 19 my $users = {}; 20 my $last_id = 0; 21 22 sub on_get_user { 23 my $id = params->{'id'}; 24 return status_bad_request('id is missing') if !defined $users->{$id}; 25 status_ok( { user => $users->{$id} } ); 26 } 27 28 sub on_create_user { 29 my $id = ++$last_id; 30 my $user = params('body'); 31 $user->{id} = $id; 32 $users->{$id} = $user; 33 34 status_created( { user => $users->{$id} } ); 35 } 36 37 sub on_delete_user { 38 my $id = params->{'id'}; 39 my $deleted = $users->{$id}; 40 delete $users->{$id}; 41 status_accepted( { user => $deleted } ); 42 } 43 44 sub on_update_user { 45 my $id = params->{'id'}; 46 my $user = $users->{$id}; 47 return status_not_found("user undef") unless defined $user; 48 49 $users->{$id} = { %$user, %{ params('body') } }; 50 status_accepted { user => $users->{$id} }; 51 } 52 53} 54 55use Dancer::Test; 56 57my $r = dancer_response( GET => '/user/1' ); 58is $r->{status}, 400, 'HTTP code is 400'; 59is $r->{content}->{error}, 'id is missing', 'Valid content'; 60 61$r = dancer_response( POST => '/user', { body => { name => 'Alexis' } } ); 62is $r->{status}, 201, 'HTTP code is 201'; 63is_deeply $r->{content}, { user => { id => 1, name => "Alexis" } }, 64 "create user works"; 65 66$r = dancer_response( GET => '/user/1' ); 67is $r->{status}, 200, 'HTTP code is 200'; 68is_deeply $r->{content}, { user => { id => 1, name => 'Alexis' } }, 69 "user 1 is defined"; 70 71$r = dancer_response( 72 PUT => '/user/1', 73 { body => { 74 nick => 'sukria', 75 name => 'Alexis Sukrieh' 76 } 77 } 78); 79is $r->{status}, 202, 'HTTP code is 202'; 80is_deeply $r->{content}, 81 { user => { id => 1, name => 'Alexis Sukrieh', nick => 'sukria' } }, 82 "user 1 is updated"; 83 84$r = dancer_response( 85 PUT => '/user/23', 86 { body => { 87 nick => 'john doe', 88 name => 'John Doe' 89 } 90 } 91); 92is $r->{status}, 404, 'HTTP code is 404'; 93is_deeply $r->{content}->{error}, 'user undef', 'valid content'; 94 95$r = dancer_response( DELETE => '/user/1' ); 96is_deeply $r->{content}, 97 { user => { id => 1, name => 'Alexis Sukrieh', nick => 'sukria' } }, 98 "user 1 is deleted"; 99is $r->{status}, 202, 'HTTP code is 202'; 100 101 102$r = dancer_response( GET => '/user/1' ); 103is $r->{status}, 400, 'HTTP code is 400'; 104is_deeply $r->{content}->{error}, 'id is missing', 'valid response'; 105 106$r = dancer_response( POST => '/user', { body => { name => 'Franck Cuny' } } ); 107is_deeply $r->{content}, { user => { id => 2, name => "Franck Cuny" } }, 108 "id is correctly increased"; 109is $r->{status}, 201, 'HTTP code is 201'; 110 111