- Removed useless RPC index action
- Fixed static configured page attribute not being used (RT#56226)
- Test use_json_boolean true
+- Fixed search attribute generation for nonexistent relationships
2.002002 2010-08-03 14:40:50 Europe/Vienna
# build up condition
foreach my $column (keys %$param)
{
- if($source->has_relationship($column))
+ if ($source->has_relationship($column))
{
+ # check if the value isn't a hashref
unless (ref($param->{$column}) && reftype($param->{$column}) eq 'HASH')
{
$search_params->{join('.', $base, $column)} = $param->{$column};
)
}};
}
- else
+ elsif ($source->has_column($column))
{
$search_params->{join('.', $base, $column)} = $param->{$column};
}
+ # might be a sql function instead of a column name
+ # e.g. {colname => {like => '%foo%'}}
+ else
+ {
+ # but only if it's not a hashref
+ unless (ref($param->{$column}) && reftype($param->{$column}) eq 'HASH') {
+ $search_params->{join('.', $base, $column)} = $param->{$column};
+ }
+ else {
+ die "$column is neither a relationship nor a column\n";
+ }
+ }
}
return $search_params;
{
my $uri = URI->new( $artist_list_url );
- $uri->query_form({ 'search.cds.title' => 'Forkful of bees' });
+ $uri->query_form({ 'search.cds.title' => 'Forkful of bees' });
my $req = GET( $uri, 'Accept' => 'text/x-json' );
$mech->request($req);
cmp_ok( $mech->status, '==', 200, 'search related request okay' );
is_deeply( $response, { list => \@expected_response, success => 'true', totalcount => 15 }, 'correct data returned for static configured paging' );
}
+{
+ my $uri = URI->new( $artist_list_url );
+ $uri->query_form({ 'search.cds.track.title' => 'Suicidal' });
+ my $req = GET( $uri, 'Accept' => 'text/x-json' );
+ $mech->request($req);
+ cmp_ok( $mech->status, '==', 400, 'attempt with nonexisting relationship fails' );
+ my $response = JSON::Any->Load( $mech->content);
+ is_deeply( $response->{messages}, ["track is neither a relationship nor a column\n"], 'correct error message returned' );
+}
+
+{
+ my $uri = URI->new( $artist_list_url );
+ $uri->query_form({ 'search.cds.tracks.foo' => 'Bar' });
+ my $req = GET( $uri, 'Accept' => 'text/x-json' );
+ $mech->request($req);
+ cmp_ok( $mech->status, '==', 400, 'attempt with nonexisting column fails' );
+ my $response = JSON::Any->Load( $mech->content);
+ is_deeply( $response->{messages}, ['a database error has occured.'], 'correct error message returned' );
+}
+
done_testing();