X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Controller-DBIC-API.git;a=blobdiff_plain;f=t%2Frest%2Flist.t;h=b63cc9894f0375c4d672bd79437de8284de39e2a;hp=a7a6eb6838c7b83c579fb76edc8ea67880642c7f;hb=4cb8623abade7b9f100b3892df93ddcfb1168e01;hpb=d93988fd263249693b54659faf5fde139d2358aa diff --git a/t/rest/list.t b/t/rest/list.t index a7a6eb6..b63cc98 100644 --- a/t/rest/list.t +++ b/t/rest/list.t @@ -12,6 +12,7 @@ use Test::More; use Test::WWW::Mechanize::Catalyst 'RestTest'; use HTTP::Request::Common; use JSON; +use Data::Printer; my $json = JSON->new->utf8; @@ -210,6 +211,128 @@ my $track_list_url = "$base/api/rest/track"; ); } +# -and|-or condition +{ + my @variants = ( + # -or + { + search => { + title => [qw(Yowlin Howlin)], + }, + }, + { + search => { + -or => [ + title => [qw(Yowlin Howlin)], + ], + }, + }, + { + search => { + -or => [ + title => [qw(Yowlin)], + title => [qw(Howlin)], + ], + }, + }, + { + search => { + -or => [ + { title => [qw(Yowlin)] }, + { title => [qw(Howlin)] }, + ], + }, + }, + # -and + { + search => { + cd => 2, + position => [1, 2], + }, + }, + { + search => { + -and => [ + cd => 2, + position => [1, 2], + ], + }, + }, + # -and & -or + { + search => { + -or => [ + -and => [ + cd => 2, + position => [0, 1], + ], + -and => [ + cd => 2, + position => [0, 2], + ], + ], + }, + }, + { + search => { + -or => [ + { + -and => [ + cd => 2, + position => [0, 1], + ], + }, + { + -and => [ + cd => 2, + position => [0, 2], + ], + }, + ], + }, + }, + { + search => { + -or => [ + { + -and => [ + cd => 2, + position => [0, 1], + ], + }, + { + -and => [ + cd => 2, + position => [0, 2], + ], + }, + ], + }, + }, + ); + + for my $case ( @variants ) { + is $schema->resultset('Track')->search($case->{search})->count, 2, 'check -and|-or search param correctness'; + + my $uri = URI->new($track_list_url); + $uri->query_form( map { $_ => encode_json($case->{$_}) } keys %$case ); + my $req = GET( $uri, 'Accept' => 'text/x-json' ); + $mech->request($req); + cmp_ok( $mech->status, '==', 200, 'attempt with -or search okay' ); + my $response = $json->decode( $mech->content ); + my @expected_response = map { + { $_->get_columns } + } $schema->resultset('Track')->search($case->{search})->all; + is_deeply( + $response, + # track does set use_json_boolean + { list => \@expected_response, success => JSON::true, totalcount => 2 }, + 'correct data returned for -and|-or search param' + ) + or diag p($case) . p($response); + } +} + { my $uri = URI->new($artist_list_url); $uri->query_form( { 'search.cds.track.title' => 'Suicidal' } ); @@ -218,9 +341,9 @@ my $track_list_url = "$base/api/rest/track"; cmp_ok( $mech->status, '==', 400, 'attempt with nonexisting relationship fails' ); my $response = $json->decode( $mech->content ); - is_deeply( - $response->{messages}, - ['track is neither a relationship nor a column'], + like( + $response->{messages}->[0], + qr/unsupported value 'HASH\([^\)]+\)' for column 'track'/, 'correct error message returned' ); }