diff options
-rwxr-xr-x | bin/send-reports | 12 | ||||
-rw-r--r-- | perllib/Open311.pm | 20 | ||||
-rw-r--r-- | t/open311.t | 20 |
3 files changed, 47 insertions, 5 deletions
diff --git a/bin/send-reports b/bin/send-reports index 648e83192..4da44f9f7 100755 --- a/bin/send-reports +++ b/bin/send-reports @@ -273,7 +273,17 @@ while (my $row = $unsent->next) { $open311->endpoints( { services => 'Services', requests => 'Requests' } ); } - my $resp = $open311->send_service_request( $row, \%h, $contact->email ); + # required to get round issues with CRM constraints + if ( $row->council =~ /2218/ ) { + $row->user->name( $row->user->id . ' ' . $row->user->name ); + } + + my $resp = $open311->send_service_request( $row, \%h, $contact->ema + + # make sure we don't save user changes from above + if ( $row->council =~ /2218/ ) { + $row->discard_changes(); + } if ( $resp ) { $row->external_id( $resp ); diff --git a/perllib/Open311.pm b/perllib/Open311.pm index f3f642895..e26e3e4c6 100644 --- a/perllib/Open311.pm +++ b/perllib/Open311.pm @@ -14,6 +14,8 @@ has test_mode => ( is => 'ro', isa => 'Bool' ); has test_uri_used => ( is => 'rw', 'isa' => 'Str' ); has test_get_returns => ( is => 'rw' ); has endpoints => ( is => 'rw', default => sub { { services => 'services.xml', requests => 'requests.xml' } } ); +has debug => ( is => 'ro', isa => 'Bool', default => 0 ); +has debug_details => ( is => 'rw', 'isa' => 'Str', default => '' ); sub get_service_list { my $self = shift; @@ -48,12 +50,16 @@ Submitted via FixMyStreet EOT ; + my ( $firstname, $lastname ) = ( $problem->user->name =~ /(\w+)\s+(.+)/ ); + my $params = { lat => $problem->latitude, long => $problem->longitude, email => $problem->user->email, description => $description, service_code => $service_code, + first_name => $firstname, + last_name => $lastname || '', }; if ( $problem->user->phone ) { @@ -89,7 +95,7 @@ EOT } } - warn sprintf( "Failed to submit problem %s over Open311, response\n: %s", $problem->id, $response ); + warn sprintf( "Failed to submit problem %s over Open311, response\n: %s\n%s", $problem->id, $response, $self->debug_details ); return 0; } } @@ -134,6 +140,8 @@ sub _get { $uri->path( $uri->path . $path ); $uri->query_form( $params ); + $self->debug_details( $self->debug_details . "\nrequest:" . $uri->as_string ); + my $content; if ( $self->test_mode ) { $content = $self->test_get_returns->{ $path }; @@ -160,14 +168,20 @@ sub _post { %{ $params } ]; + $self->debug_details( $self->debug_details . "\nrequest:" . $req->as_string ); + my $ua = LWP::UserAgent->new(); my $res = $ua->request( $req ); if ( $res->is_success ) { return $res->decoded_content; } else { - warn "request failed: " . $res->status_line; - warn $self->_process_error( $res->decoded_content ); + warn sprintf( + "request failed: %s\nerror: %s\n%s", + $res->status_line, + $self->_process_error( $res->decoded_content ), + $self->debug_details + ); return 0; } } diff --git a/t/open311.t b/t/open311.t index f7a8cd815..ce4330b9c 100644 --- a/t/open311.t +++ b/t/open311.t @@ -2,7 +2,9 @@ use strict; use warnings; -use Test::More tests => 4; +use Test::More; +use Test::Warn; +use FixMyStreet::App; use FindBin; use lib "$FindBin::Bin/../perllib"; @@ -21,4 +23,20 @@ EOT is $o->_process_error( $err_text ), "400: Service Code cannot be null -- can't proceed with the request.\n", 'error text parsing'; is $o->_process_error( '503 - service unavailable' ), 'unknown error', 'error text parsing of bad error'; +my $o2 = Open311->new( endpoint => 'http://192.168.50.1/open311/', jurisdiction => 'example.org' ); +my $u = FixMyStreet::App->model('DB::User')->new( { email => 'test@example.org', name => 'A User' } ); + +my $p = FixMyStreet::App->model('DB::Problem')->new( { + latitude => 1, + longitude => 1, + title => 'title', + detail => 'detail', + user => $u, +} ); + +my $expected_error = qr{.*request failed: 500 Can.t connect to 192.168.50.1:80 \(Operation timed out\).*}; + +warning_like {$o2->send_service_request( $p, { url => 'http://example.com/' }, 1 )} $expected_error, 'warning generated on failed call'; + +done_testing(); |