Use JSON::MaybeXS for improved performance
[catagits/Catalyst-Controller-DBIC-API.git] / t / rest / stashedclass.t
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::MaybeXS;
15
16 my $json = JSON::MaybeXS->new(utf8 => 1);
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
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
83 done_testing();