6 my $base = 'http://localhost';
12 use Test::WWW::Mechanize::Catalyst 'RestTest';
13 use HTTP::Request::Common;
16 my $json = JSON::MaybeXS->new(utf8 => 1);
18 my $mech = Test::WWW::Mechanize::Catalyst->new;
19 ok( my $schema = DBICTest->init_schema(), 'got schema' );
21 my $track_list_url = "$base/api/rpc/track_exposed/list";
23 $schema->resultset('Track')
25 { select => [qw/me.title me.position/], order_by => 'position' } );
34 'Accept' => 'text/x-json'
37 cmp_ok( $mech->status, '==', 200, 'open attempt okay' );
39 my @expected_response = map {
42 my $response = $json->decode( $mech->content );
45 { list => \@expected_response, success => 'true' },
46 'correct message returned'
51 my $uri = URI->new($track_list_url);
52 $uri->query_form( { 'search.position' => 1 } );
58 'Accept' => 'text/x-json'
61 cmp_ok( $mech->status, '==', 200, 'search on position okay' );
62 my @expected_response = map {
64 } $base_rs->search( { position => 1 } )->all;
65 my $response = $json->decode( $mech->content );
68 { list => \@expected_response, success => 'true' },
69 'correct message returned'
74 my $uri = URI->new($track_list_url);
75 $uri->query_form( { 'search.title' => 'Stripy' } );
81 'Accept' => 'text/x-json'
84 cmp_ok( $mech->status, '==', 400, 'search on title not okay' );
86 my @expected_response = map {
88 } $base_rs->search( { position => 1 } )->all;
89 my $response = $json->decode( $mech->content );
90 is( $response->{success}, 'false', 'correct message returned' );
92 $response->{messages}->[0],
93 qr/is not an allowed search term/,
94 'correct message returned'
99 my $uri = URI->new($track_list_url);
100 $uri->query_form( { 'search.title' => 'Stripy' } );
106 'Accept' => 'text/x-json'
108 $mech->request($req);
109 cmp_ok( $mech->status, '==', 400, 'search on title not okay' );
111 my $expected_response = map {
113 } $base_rs->search( { position => 1 } )->all;
114 my $response = $json->decode( $mech->content );
115 is( $response->{success}, 'false', 'correct message returned' );
117 $response->{messages}->[0],
118 qr/is not an allowed search term/,
119 'correct message returned'
124 my $uri = URI->new($track_list_url);
125 $uri->query_form( { 'search.cd.artist' => '1' } );
131 'Accept' => 'text/x-json'
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' );
139 $response->{messages}->[0],
140 qr/is not an allowed search term/,
141 'correct message returned'
146 my $uri = URI->new($track_list_url);
148 { 'search.cd.title' => 'Spoonful of bees',
149 'search.cd.year' => '1999'
157 'Accept' => 'text/x-json'
159 $mech->request($req);
160 cmp_ok( $mech->status, '==', 200, 'search on various cd fields okay' );
161 my @expected_response = map {
164 { 'cd.year' => '1999', 'cd.title' => 'Spoonful of bees' },
165 { join => 'cd' } )->all;
166 my $response = $json->decode( $mech->content );
169 { list => \@expected_response, success => 'true' },
170 'correct message returned'
175 my $uri = URI->new($track_list_url);
177 { 'search.cd.title' => 'Spoonful of bees',
178 'search.cd.pretend' => '1999'
186 'Accept' => 'text/x-json'
188 $mech->request($req);
189 cmp_ok( $mech->status, '==', 200, 'search with custom col okay' );
190 my @expected_response = map {
193 { 'cd.year' => '1999', 'cd.title' => 'Spoonful of bees' },
194 { join => 'cd' } )->all;
195 my $response = $json->decode( $mech->content );
198 { list => \@expected_response, success => 'true' },
199 'correct message returned'
204 my $uri = URI->new($track_list_url);
205 $uri->query_form( { 'search.cd.artist.name' => 'Random Boy Band' } );
211 'Accept' => 'text/x-json'
213 $mech->request($req);
214 cmp_ok( $mech->status, '==', 200,
215 'search on artist field okay due to wildcard' );
216 my @expected_response = map {
219 { 'artist.name' => 'Random Boy Band' },
220 { join => { cd => 'artist' } }
222 my $response = $json->decode( $mech->content );
225 { list => \@expected_response, success => 'true' },
226 'correct message returned'