8 my $base = 'http://localhost';
14 use Test::WWW::Mechanize::Catalyst 'RestTest';
15 use HTTP::Request::Common;
18 my $json = JSON->new->utf8;
20 my $mech = Test::WWW::Mechanize::Catalyst->new;
21 ok( my $schema = DBICTest->init_schema(), 'got schema' );
23 my $track_list_url = "$base/api/rpc/track_exposed/list";
25 $schema->resultset('Track')
27 { select => [qw/me.title me.position/], order_by => 'position' } );
36 'Accept' => 'text/x-json'
39 cmp_ok( $mech->status, '==', 200, 'open attempt okay' );
41 my @expected_response = map {
44 my $response = $json->decode( $mech->content );
47 { list => \@expected_response, success => 'true' },
48 'correct message returned'
53 my $uri = URI->new($track_list_url);
54 $uri->query_form( { 'search.position' => 1 } );
60 'Accept' => 'text/x-json'
63 cmp_ok( $mech->status, '==', 200, 'search on position okay' );
64 my @expected_response = map {
66 } $base_rs->search( { position => 1 } )->all;
67 my $response = $json->decode( $mech->content );
70 { list => \@expected_response, success => 'true' },
71 'correct message returned'
76 my $uri = URI->new($track_list_url);
77 $uri->query_form( { 'search.title' => 'Stripy' } );
83 'Accept' => 'text/x-json'
86 cmp_ok( $mech->status, '==', 400, 'search on title not okay' );
88 my @expected_response = map {
90 } $base_rs->search( { position => 1 } )->all;
91 my $response = $json->decode( $mech->content );
92 is( $response->{success}, 'false', 'correct message returned' );
94 $response->{messages}->[0],
95 qr/is not an allowed search term/,
96 'correct message returned'
101 my $uri = URI->new($track_list_url);
102 $uri->query_form( { 'search.title' => 'Stripy' } );
108 'Accept' => 'text/x-json'
110 $mech->request($req);
111 cmp_ok( $mech->status, '==', 400, 'search on title not okay' );
113 my $expected_response = map {
115 } $base_rs->search( { position => 1 } )->all;
116 my $response = $json->decode( $mech->content );
117 is( $response->{success}, 'false', 'correct message returned' );
119 $response->{messages}->[0],
120 qr/is not an allowed search term/,
121 'correct message returned'
126 my $uri = URI->new($track_list_url);
127 $uri->query_form( { 'search.cd.artist' => '1' } );
133 'Accept' => 'text/x-json'
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' );
141 $response->{messages}->[0],
142 qr/is not an allowed search term/,
143 'correct message returned'
148 my $uri = URI->new($track_list_url);
150 { 'search.cd.title' => 'Spoonful of bees',
151 'search.cd.year' => '1999'
159 'Accept' => 'text/x-json'
161 $mech->request($req);
162 cmp_ok( $mech->status, '==', 200, 'search on various cd fields okay' );
163 my @expected_response = map {
166 { 'cd.year' => '1999', 'cd.title' => 'Spoonful of bees' },
167 { join => 'cd' } )->all;
168 my $response = $json->decode( $mech->content );
171 { list => \@expected_response, success => 'true' },
172 'correct message returned'
177 my $uri = URI->new($track_list_url);
179 { 'search.cd.title' => 'Spoonful of bees',
180 'search.cd.pretend' => '1999'
188 'Accept' => 'text/x-json'
190 $mech->request($req);
191 cmp_ok( $mech->status, '==', 200, 'search with custom col okay' );
192 my @expected_response = map {
195 { 'cd.year' => '1999', 'cd.title' => 'Spoonful of bees' },
196 { join => 'cd' } )->all;
197 my $response = $json->decode( $mech->content );
200 { list => \@expected_response, success => 'true' },
201 'correct message returned'
206 my $uri = URI->new($track_list_url);
207 $uri->query_form( { 'search.cd.artist.name' => 'Random Boy Band' } );
213 'Accept' => 'text/x-json'
215 $mech->request($req);
216 cmp_ok( $mech->status, '==', 200,
217 'search on artist field okay due to wildcard' );
218 my @expected_response = map {
221 { 'artist.name' => 'Random Boy Band' },
222 { join => { cd => 'artist' } }
224 my $response = $json->decode( $mech->content );
227 { list => \@expected_response, success => 'true' },
228 'correct message returned'