aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/send-reports12
-rw-r--r--perllib/Open311.pm20
-rw-r--r--t/open311.t20
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();