From: Alexander Hartmaier Date: Mon, 2 Aug 2010 15:31:56 +0000 (+0200) Subject: Fixed search for related columns overwriting existing params in generate_column_param... X-Git-Tag: 2.002002~6 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Controller-DBIC-API.git;a=commitdiff_plain;h=02b625cd434826ea7cc013dcd7a2a2eda1eb8476 Fixed search for related columns overwriting existing params in generate_column_parameters --- diff --git a/Changes b/Changes index e791498..17a46d8 100644 --- a/Changes +++ b/Changes @@ -2,6 +2,8 @@ Revision history for Catalyst-Controller-DBIC-API: {{ $dist->version }} {{ $NEXT }} +- Fixed search for related columns overwriting existing params in generate_column_parameters + 2.002001 2010-04-01 01:41:11 Europe/Berlin - Remove debugging code and other noise from tests diff --git a/lib/Catalyst/Controller/DBIC/API/RequestArguments.pm b/lib/Catalyst/Controller/DBIC/API/RequestArguments.pm index adba96d..a9b5c33 100644 --- a/lib/Catalyst/Controller/DBIC/API/RequestArguments.pm +++ b/lib/Catalyst/Controller/DBIC/API/RequestArguments.pm @@ -512,7 +512,7 @@ generate_column_parameters recursively generates properly aliased parameters for { my ($self, $source, $param, $join, $base) = @_; $base ||= 'me'; - my $search_params; + my $search_params = {}; # build up condition foreach my $column (keys %$param) @@ -525,8 +525,7 @@ generate_column_parameters recursively generates properly aliased parameters for next; } - %$search_params = - %{ + $search_params = { %$search_params, %{ $self->generate_column_parameters ( $source->related_source($column), @@ -534,7 +533,7 @@ generate_column_parameters recursively generates properly aliased parameters for Catalyst::Controller::DBIC::API::JoinBuilder->new(parent => $join, name => $column), $column ) - }; + }}; } else { diff --git a/t/rest/list.t b/t/rest/list.t index 205c330..6d73b59 100644 --- a/t/rest/list.t +++ b/t/rest/list.t @@ -21,6 +21,7 @@ ok(my $schema = DBICTest->init_schema(), 'got schema'); my $artist_list_url = "$base/api/rest/artist"; my $filtered_artist_list_url = "$base/api/rest/bound_artist"; my $producer_list_url = "$base/api/rest/producer"; +my $cd_list_url = "$base/api/rest/cd"; # test open request { @@ -104,4 +105,20 @@ my $producer_list_url = "$base/api/rest/producer"; is_deeply( $response, { list => \@expected_response, success => 'true' }, 'correct data returned for class with setup_list_method specified' ); } +{ + my $uri = URI->new( $cd_list_url ); + $uri->query_form({ 'search.tracks.position' => '1', 'search.artist.name' => 'Caterwauler McCrae' }); + my $req = GET( $uri, 'Accept' => 'text/x-json' ); + $mech->request($req); + cmp_ok( $mech->status, '==', 200, 'search multiple params request okay' ); + my $response = JSON::Any->Load( $mech->content); + my @expected_response = map { { $_->get_columns } } $schema->resultset('CD')->search({ + 'artist.name' => 'Caterwauler McCrae', + 'tracks.position' => 1, + }, { + join => [qw/ artist tracks /], + })->all; + is_deeply( $response, { list => \@expected_response, success => 'true' }, 'correct data returned for multiple search params' ); +} + done_testing();