Version 2.008001
[catagits/Catalyst-Controller-DBIC-API.git] / t / rpc / list_search_allows.t
CommitLineData
d2739840 1use strict;
2use warnings;
3
4use lib 't/lib';
5
6my $base = 'http://localhost';
7
8use RestTest;
9use DBICTest;
10use URI;
11use Test::More;
12use Test::WWW::Mechanize::Catalyst 'RestTest';
13use HTTP::Request::Common;
a5949bfd 14use JSON::MaybeXS;
0b0bf911 15
a5949bfd 16my $json = JSON::MaybeXS->new(utf8 => 1);
d2739840 17
18my $mech = Test::WWW::Mechanize::Catalyst->new;
0b0bf911 19ok( my $schema = DBICTest->init_schema(), 'got schema' );
d2739840 20
21my $track_list_url = "$base/api/rpc/track_exposed/list";
0b0bf911 22my $base_rs =
23 $schema->resultset('Track')
24 ->search( {},
25 { select => [qw/me.title me.position/], order_by => 'position' } );
d2739840 26
27# test open request
28{
0b0bf911 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 );
d2739840 48}
49
50{
0b0bf911 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 );
d2739840 71}
72
73{
0b0bf911 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 );
d2739840 96}
97
98{
0b0bf911 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 );
d2739840 121}
122
123{
0b0bf911 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 );
d2739840 143}
144
145{
0b0bf911 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 );
d2739840 172}
173
174{
0b0bf911 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 );
d2739840 201}
202
203{
0b0bf911 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 );
d2739840 228}
229
230done_testing();