Commit | Line | Data |
07b00970 |
1 | use strict; |
2 | use warnings; |
3 | |
4 | use lib 't/lib'; |
5 | |
6 | my $base = 'http://localhost'; |
7 | |
8 | use RestTest; |
9 | use DBICTest; |
10 | use URI; |
11 | use Test::More; |
12 | use Test::WWW::Mechanize::Catalyst 'RestTest'; |
13 | use HTTP::Request::Common; |
14 | use JSON; |
07b00970 |
15 | |
16 | my $json = JSON->new->utf8; |
17 | |
18 | my $mech = Test::WWW::Mechanize::Catalyst->new; |
19 | ok( my $schema = DBICTest->init_schema(), 'got schema' ); |
20 | |
21 | my $base_url = "$base/api/rest/stashedclass"; |
22 | |
23 | # test cd |
24 | { |
25 | my $class = 'RestTestDB::CD'; |
26 | my $req = GET( "$base_url/$class", {}, 'Accept' => 'text/x-json'); |
27 | $mech->request($req); |
28 | cmp_ok( $mech->status, '==', '200', "status OK" ); |
29 | my $response = $json->decode( $mech->content ); |
30 | is($response->{success}, 'true', 'success'); |
31 | is(scalar( @{$response->{list}} ), 6, 'six results'); |
32 | } |
33 | |
34 | # test author |
35 | { |
36 | my $class = 'RestTestDB::Artist'; |
37 | my $req = GET( "$base_url/$class", {}, 'Accept' => 'text/x-json'); |
38 | $mech->request($req); |
39 | cmp_ok( $mech->status, '==', '200', "status OK" ); |
40 | my $response = $json->decode( $mech->content ); |
41 | is($response->{success}, 'true', 'success'); |
42 | is(scalar( @{$response->{list}} ), 3, 'three results'); |
43 | } |
44 | |
45 | # test non-existent class |
46 | { |
47 | my $class = 'Foo::Bar::Baz'; |
48 | my $req = GET( "$base_url/$class", {}, 'Accept' => 'text/x-json'); |
49 | $mech->request($req); |
50 | cmp_ok( $mech->status, '==', '400', "status 400" ); |
51 | my $response = $json->decode( $mech->content ); |
52 | like($response->{messages}[0], qr/current_result_set.*does not pass the type constraint/, 'invalid class'); |
53 | } |
54 | |
3649b790 |
55 | |
56 | { |
57 | no warnings; |
58 | # stash->{class} should always win over $self->class |
59 | *Catalyst::Controller::DBIC::API::class = sub { 'RestTestDB::CD' }; |
60 | |
61 | my $class = 'RestTestDB::Artist'; |
62 | my $req = GET( "$base_url/$class", {}, 'Accept' => 'text/x-json'); |
63 | $mech->request($req); |
64 | cmp_ok( $mech->status, '==', '200', "status OK" ); |
65 | my $response = $json->decode( $mech->content ); |
66 | is($response->{success}, 'true', 'success'); |
67 | is(scalar( @{$response->{list}} ), 3, 'three results - artist'); |
68 | } |
69 | |
70 | { |
71 | no warnings; |
72 | # stash->{class} not present, ->class should be returned |
73 | *Catalyst::Controller::DBIC::API::class = sub { 'RestTestDB::CD' }; |
74 | |
75 | my $req = GET( "$base_url/noclass", {}, 'Accept' => 'text/x-json'); |
76 | $mech->request($req); |
77 | cmp_ok( $mech->status, '==', '200', "status OK" ); |
78 | my $response = $json->decode( $mech->content ); |
79 | is($response->{success}, 'true', 'success'); |
80 | is(scalar( @{$response->{list}} ), 6, 'six results - cd'); |
81 | } |
82 | |
07b00970 |
83 | done_testing(); |