diff options
author | Struan Donald <struan@exo.org.uk> | 2018-04-17 10:53:53 +0100 |
---|---|---|
committer | Struan Donald <struan@exo.org.uk> | 2018-04-17 16:53:16 +0100 |
commit | ee28ece4c42d87dc45f5bda2aafb860c2eb317e7 (patch) | |
tree | 3ba6d05a60634ba821031650ec530539d1cfba14 | |
parent | 193811edee2c42dcdb8d2d5cb18ed6dfaa92f5e9 (diff) |
[Open311] avoid spurious warning when params are undef
If there was an undefined parameter passed to `_post` then generating
the debug string would generate a warning about an undefined value in a
concatenation. So, check for undefined params and substitute empty
string to avoid.
-rw-r--r-- | perllib/Open311.pm | 19 | ||||
-rw-r--r-- | t/open311.t | 55 |
2 files changed, 66 insertions, 8 deletions
diff --git a/perllib/Open311.pm b/perllib/Open311.pm index 4ec0679af..dc40076db 100644 --- a/perllib/Open311.pm +++ b/perllib/Open311.pm @@ -418,6 +418,21 @@ sub split_name { return ( $first, $last ); } +sub _params_to_string { + my( $self, $params, $request_string ) = @_; + + my $undefined; + + my $string = join("\n", map { + $undefined .= "$_ undefined\n" unless defined $params->{$_}; + "$_: " . ( $params->{$_} // '' ); + } keys %$params); + + warn "$request_string $undefined $string" if $undefined; + + return $string; +} + sub _get { my $self = shift; my $path = shift; @@ -432,7 +447,7 @@ sub _get { $uri->query_form( $params ); my $debug_request = "GET " . $base_uri->as_string . "\n\n"; - $debug_request .= join("\n", map { "$_: $params->{$_}" } keys %$params); + $debug_request .= $self->_params_to_string($params, $debug_request); $self->debug_details( $self->debug_details . $debug_request ); my $content; @@ -480,7 +495,7 @@ sub _post { my $req = POST $uri->as_string, $params; my $debug_request = $req->method . ' ' . $uri->as_string . "\n\n"; - $debug_request .= join("\n", map { "$_: $params->{$_}" } keys %$params); + $debug_request .= $self->_params_to_string($params, $debug_request); $self->debug_details( $self->debug_details . $debug_request ); my $ua = LWP::UserAgent->new(); diff --git a/t/open311.t b/t/open311.t index ce18a6d0c..4dc1b2959 100644 --- a/t/open311.t +++ b/t/open311.t @@ -133,8 +133,38 @@ for my $test ( } ], params => [ - [ 'attribute[title]', 'A title', 'extra paramater used correctly' ] - ] + [ 'attribute[title]', 'A title', 'extra parameter used correctly' ] + ], + debug_contains => 'attribute\[title\]: A title', + }, + { + desc => 'undef extra values handled', + extra => [ + { + name => 'title', + value => undef, + } + ], + params => [ + [ 'attribute[title]', '', 'undef extra parameter used correctly' ] + ], + # multi line warnings are not handled well so just match the + # first line + warning => qr/POST requests.xml/, + debug_contains => 'attribute\[title\]: $', + }, + { + desc => '0 extra values handled', + extra => [ + { + name => 'title', + value => 0, + } + ], + params => [ + [ 'attribute[title]', '0', '0 extra parameter used correctly' ] + ], + debug_contains => 'attribute\[title\]: 0', }, { desc => 'first and last names in extra used correctly', @@ -178,11 +208,24 @@ for my $test ( my $extra = { url => 'http://example.com/report/1', }; - my $results = make_service_req( $problem, $extra, $problem->category, -'<?xml version="1.0" encoding="utf-8"?><service_requests><request><service_request_id>248</service_request_id></request></service_requests>' - ); + my $results; + if ( $test->{warning} ) { + warnings_exist { + $results = make_service_req( $problem, $extra, $problem->category, + '<?xml version="1.0" encoding="utf-8"?><service_requests><request><service_request_id>248</service_request_id></request></service_requests>' + ); + } [ $test->{warning} ], 'warning generated by service request call'; + } else { + $results = make_service_req( $problem, $extra, $problem->category, + '<?xml version="1.0" encoding="utf-8"?><service_requests><request><service_request_id>248</service_request_id></request></service_requests>' + ); + } my $c = CGI::Simple->new( $results->{req}->content ); + if ( $test->{debug_contains} ) { + like $results->{o}->debug_details, qr/$test->{debug_contains}/m, 'extra handled correctly in debug'; + } + for my $param ( @{ $test->{params} } ) { is $c->param( $param->[0] ), $param->[1], $param->[2]; } @@ -762,5 +805,5 @@ sub _make_req { my $req = $o->test_req_used; - return { res => $res, req => $req }; + return { res => $res, req => $req, o => $o }; } |