aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/Open311.pm19
-rw-r--r--t/open311.t55
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 };
}