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