File: 03_resource.t

package info (click to toggle)
libdancer-plugin-rest-perl 0.11-5
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 172 kB
  • sloc: perl: 151; makefile: 2
file content (107 lines) | stat: -rw-r--r-- 2,777 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
use strict;
use warnings;
use Dancer::ModuleLoader;
use Test::More import => ['!pass'];

# Dancer::Test had a bug in version previous 1.3059_01 that prevent this test
# from running correctly.
my $dancer_version = eval "\$Dancer::VERSION";
$dancer_version =~ s/_//g;
plan skip_all => "Dancer 1.3059_01 is needed for this test (you have $dancer_version)"
  if $dancer_version < 1.305901;

plan tests => 8;

{
    package Webservice;
    use Dancer;
    use Dancer::Plugin::REST;
    use Test::More import => ['!pass'];

    resource user => 
        'get' => \&on_get_user,
        'create' => \&on_create_user,
        'delete' => \&on_delete_user,
        'update' => \&on_update_user;

    my $users = {};
    my $last_id = 0;

    sub on_get_user {
        my $id = params->{'id'};
        { user => $users->{$id} };
    }

    sub on_create_user {
        my $id = ++$last_id;
        my $user = params('body');
        $user->{id} = $id;
        $users->{$id} = $user;

        { user => $users->{$id} };
    }

    sub on_delete_user {
        my $id = params->{'id'};
        my $deleted = $users->{$id};
        delete $users->{$id};
        { user => $deleted };
    }

    sub on_update_user {
        my $id = params->{'id'};
        my $user = $users->{$id};
        return { user => undef } unless defined $user;

        $users->{$id} = { %$user, %{params('body')} };
        { user => $users->{$id} };
    }

    eval { 
        resource failure => 
            get => sub { 'GET' },
            woobly => sub { },
    };
    like $@, qr{action 'woobly' not recognized}, 
        "resource must have 4 hooks";
}

use Dancer::Test;

my $r = dancer_response(GET => '/user/1');
is_deeply $r->{content}, {user => undef},
    "user 1 is not defined";

$r = dancer_response(POST => '/user', { body => {name => 'Alexis' }});
is_deeply $r->{content}, { user => { id => 1, name => "Alexis" } },
    "create user works";

$r = dancer_response(GET => '/user/1');
is_deeply $r->{content}, {user => { id => 1, name => 'Alexis'}},
    "user 1 is defined";

$r = dancer_response(PUT => '/user/1', { 
    body => {
        nick => 'sukria', 
        name => 'Alexis Sukrieh' 
    }
});
is_deeply $r->{content}, {user => { id => 1, name => 'Alexis Sukrieh', nick => 'sukria'}},
    "user 1 is updated";

$r = dancer_response(DELETE => '/user/1');
is_deeply $r->{content}, {user => { id => 1, name => 'Alexis Sukrieh', nick => 'sukria'}},
    "user 1 is deleted";

$r = dancer_response(GET => '/user/1');
is_deeply $r->{content}, {user => undef},
    "user 1 is not defined";

$r = dancer_response(POST => '/user', { 
    body => {
        name => 'Franck Cuny' 
    }
});
is_deeply $r->{content}, { user => { id => 2, name => "Franck Cuny" } },
    "id is correctly increased";