fixed test failure in generic.t with Moose > 2.02
[catagits/Catalyst-Controller-DBIC-API.git] / t / rpc / list_search_allows.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;
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 $track_list_url = "$base/api/rpc/track_exposed/list";
22 my $base_rs =
23     $schema->resultset('Track')
24     ->search( {},
25     { select => [qw/me.title me.position/], order_by => 'position' } );
26
27 # test open request
28 {
29     my $req = GET(
30         $track_list_url,
31         {
32
33         },
34         'Accept' => 'text/x-json'
35     );
36     $mech->request($req);
37     cmp_ok( $mech->status, '==', 200, 'open attempt okay' );
38
39     my @expected_response = map {
40         { $_->get_columns }
41     } $base_rs->all;
42     my $response = $json->decode( $mech->content );
43     is_deeply(
44         $response,
45         { list => \@expected_response, success => 'true' },
46         'correct message returned'
47     );
48 }
49
50 {
51     my $uri = URI->new($track_list_url);
52     $uri->query_form( { 'search.position' => 1 } );
53     my $req = GET(
54         $uri,
55         {
56
57         },
58         'Accept' => 'text/x-json'
59     );
60     $mech->request($req);
61     cmp_ok( $mech->status, '==', 200, 'search on position okay' );
62     my @expected_response = map {
63         { $_->get_columns }
64     } $base_rs->search( { position => 1 } )->all;
65     my $response = $json->decode( $mech->content );
66     is_deeply(
67         $response,
68         { list => \@expected_response, success => 'true' },
69         'correct message returned'
70     );
71 }
72
73 {
74     my $uri = URI->new($track_list_url);
75     $uri->query_form( { 'search.title' => 'Stripy' } );
76     my $req = GET(
77         $uri,
78         {
79
80         },
81         'Accept' => 'text/x-json'
82     );
83     $mech->request($req);
84     cmp_ok( $mech->status, '==', 400, 'search on title not okay' );
85
86     my @expected_response = map {
87         { $_->get_columns }
88     } $base_rs->search( { position => 1 } )->all;
89     my $response = $json->decode( $mech->content );
90     is( $response->{success}, 'false', 'correct message returned' );
91     like(
92         $response->{messages}->[0],
93         qr/is not an allowed search term/,
94         'correct message returned'
95     );
96 }
97
98 {
99     my $uri = URI->new($track_list_url);
100     $uri->query_form( { 'search.title' => 'Stripy' } );
101     my $req = GET(
102         $uri,
103         {
104
105         },
106         'Accept' => 'text/x-json'
107     );
108     $mech->request($req);
109     cmp_ok( $mech->status, '==', 400, 'search on title not okay' );
110
111     my $expected_response = map {
112         { $_->get_columns }
113     } $base_rs->search( { position => 1 } )->all;
114     my $response = $json->decode( $mech->content );
115     is( $response->{success}, 'false', 'correct message returned' );
116     like(
117         $response->{messages}->[0],
118         qr/is not an allowed search term/,
119         'correct message returned'
120     );
121 }
122
123 {
124     my $uri = URI->new($track_list_url);
125     $uri->query_form( { 'search.cd.artist' => '1' } );
126     my $req = GET(
127         $uri,
128         {
129
130         },
131         'Accept' => 'text/x-json'
132     );
133     $mech->request($req);
134     cmp_ok( $mech->status, '==', 400,
135         'search on various cd fields not okay' );
136     my $response = $json->decode( $mech->content );
137     is( $response->{success}, 'false', 'correct message returned' );
138     like(
139         $response->{messages}->[0],
140         qr/is not an allowed search term/,
141         'correct message returned'
142     );
143 }
144
145 {
146     my $uri = URI->new($track_list_url);
147     $uri->query_form(
148         {   'search.cd.title' => 'Spoonful of bees',
149             'search.cd.year'  => '1999'
150         }
151     );
152     my $req = GET(
153         $uri,
154         {
155
156         },
157         'Accept' => 'text/x-json'
158     );
159     $mech->request($req);
160     cmp_ok( $mech->status, '==', 200, 'search on various cd fields okay' );
161     my @expected_response = map {
162         { $_->get_columns }
163         } $base_rs->search(
164         { 'cd.year' => '1999', 'cd.title' => 'Spoonful of bees' },
165         { join      => 'cd' } )->all;
166     my $response = $json->decode( $mech->content );
167     is_deeply(
168         $response,
169         { list => \@expected_response, success => 'true' },
170         'correct message returned'
171     );
172 }
173
174 {
175     my $uri = URI->new($track_list_url);
176     $uri->query_form(
177         {   'search.cd.title'   => 'Spoonful of bees',
178             'search.cd.pretend' => '1999'
179         }
180     );
181     my $req = GET(
182         $uri,
183         {
184
185         },
186         'Accept' => 'text/x-json'
187     );
188     $mech->request($req);
189     cmp_ok( $mech->status, '==', 200, 'search with custom col okay' );
190     my @expected_response = map {
191         { $_->get_columns }
192         } $base_rs->search(
193         { 'cd.year' => '1999', 'cd.title' => 'Spoonful of bees' },
194         { join      => 'cd' } )->all;
195     my $response = $json->decode( $mech->content );
196     is_deeply(
197         $response,
198         { list => \@expected_response, success => 'true' },
199         'correct message returned'
200     );
201 }
202
203 {
204     my $uri = URI->new($track_list_url);
205     $uri->query_form( { 'search.cd.artist.name' => 'Random Boy Band' } );
206     my $req = GET(
207         $uri,
208         {
209
210         },
211         'Accept' => 'text/x-json'
212     );
213     $mech->request($req);
214     cmp_ok( $mech->status, '==', 200,
215         'search on artist field okay due to wildcard' );
216     my @expected_response = map {
217         { $_->get_columns }
218         } $base_rs->search(
219         { 'artist.name' => 'Random Boy Band' },
220         { join          => { cd => 'artist' } }
221         )->all;
222     my $response = $json->decode( $mech->content );
223     is_deeply(
224         $response,
225         { list => \@expected_response, success => 'true' },
226         'correct message returned'
227     );
228 }
229
230 done_testing();