diff options
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | perllib/FixMyStreet/Cobrand/Rutland.pm | 2 | ||||
-rw-r--r-- | perllib/FixMyStreet/Script/Reports.pm | 2 | ||||
-rw-r--r-- | perllib/FixMyStreet/SendReport/Open311.pm | 1 | ||||
-rw-r--r-- | perllib/Open311.pm | 7 | ||||
-rw-r--r-- | t/sendreport/open311.t | 81 |
6 files changed, 93 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 22989fe31..9fabf394e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ * Unreleased - New features - Fetch problems over Open311 #1986 + - Option to send multiple photos over Open311 #1986 - Front end improvements: - Improve questionnaire process. #1939 #1998 - Increase size of "sub map links" (hide pins, permalink, etc) #2003 diff --git a/perllib/FixMyStreet/Cobrand/Rutland.pm b/perllib/FixMyStreet/Cobrand/Rutland.pm index 087744cd7..c0f9dd197 100644 --- a/perllib/FixMyStreet/Cobrand/Rutland.pm +++ b/perllib/FixMyStreet/Cobrand/Rutland.pm @@ -21,6 +21,8 @@ sub open311_config { push @$extra, { name => 'closest_address', value => $h->{closest_address} } } $row->set_extra_fields( @$extra ); + + $params->{multi_photos} = 1; } sub example_places { diff --git a/perllib/FixMyStreet/Script/Reports.pm b/perllib/FixMyStreet/Script/Reports.pm index aa6b64752..b8c3d6d0d 100644 --- a/perllib/FixMyStreet/Script/Reports.pm +++ b/perllib/FixMyStreet/Script/Reports.pm @@ -88,6 +88,8 @@ sub send(;$) { if ($row->photo) { $h{has_photo} = _("This web page also contains a photo of the problem, provided by the user.") . "\n\n"; $h{image_url} = $email_base_url . $row->photos->[0]->{url_full}; + my @all_images = map { $email_base_url . $_->{url_full} } @{ $row->photos }; + $h{all_image_urls} = \@all_images; } else { $h{has_photo} = ''; $h{image_url} = ''; diff --git a/perllib/FixMyStreet/SendReport/Open311.pm b/perllib/FixMyStreet/SendReport/Open311.pm index ecda0bca1..98637dd1f 100644 --- a/perllib/FixMyStreet/SendReport/Open311.pm +++ b/perllib/FixMyStreet/SendReport/Open311.pm @@ -28,6 +28,7 @@ sub send { send_notpinpointed => 0, use_service_as_deviceid => 0, extended_description => 1, + multi_photos => 0, ); my $cobrand = $body->get_cobrand_handler || $row->get_cobrand_logged; diff --git a/perllib/Open311.pm b/perllib/Open311.pm index 22293ee9f..577de31ea 100644 --- a/perllib/Open311.pm +++ b/perllib/Open311.pm @@ -32,6 +32,7 @@ has use_service_as_deviceid => ( is => 'ro', isa => Bool, default => 0 ); has use_extended_updates => ( is => 'ro', isa => Bool, default => 0 ); has extended_statuses => ( is => 'ro', isa => Bool, default => 0 ); has always_send_email => ( is => 'ro', isa => Bool, default => 0 ); +has multi_photos => ( is => 'ro', isa => Bool, default => 0 ); before [ qw/get_service_list get_service_meta_info get_service_requests get_service_request_updates @@ -163,7 +164,11 @@ sub _populate_service_request_params { } if ( $extra->{image_url} ) { - $params->{media_url} = $extra->{image_url}; + if ( $self->multi_photos ) { + $params->{media_url} = $extra->{all_image_urls}; + } else { + $params->{media_url} = $extra->{image_url}; + } } if ( $self->use_service_as_deviceid && $problem->service ) { diff --git a/t/sendreport/open311.t b/t/sendreport/open311.t index 1eb5535aa..23096aaac 100644 --- a/t/sendreport/open311.t +++ b/t/sendreport/open311.t @@ -1,4 +1,16 @@ +package FixMyStreet::Cobrand::Tester; + +use parent 'FixMyStreet::Cobrand::FixMyStreet'; + +sub open311_config { + my ($self, $row, $h, $params) = @_; + $params->{multi_photos} = 1; +} + +package main; + use CGI::Simple; +use Path::Tiny; use FixMyStreet::Script::Reports; use FixMyStreet::TestMech; my $mech = FixMyStreet::TestMech->new; @@ -41,4 +53,73 @@ subtest 'testing Open311 behaviour', sub { is $c->param('jurisdiction_id'), 'FMS', 'Request had correct jurisdiction'; }; +my ($photo_report) = $mech->create_problems_for_body( 1, $body->id, 'Test', { + cobrand => 'fixmystreet', + category => 'Potholes', + user => $user, +}); +my $sample_file = path(__FILE__)->parent->parent->child("app/controller/sample.jpg"); +my $UPLOAD_DIR = File::Temp->newdir(); +my @files = map { $_ x 40 . ".jpeg" } (1..3); +$sample_file->copy(path($UPLOAD_DIR, $_)) for @files; +$photo_report->photo(join(',', @files)); +$photo_report->update; + +subtest 'test report with multiple photos only sends one', sub { + $body->update( { send_method => 'Open311', endpoint => 'http://endpoint.example.com', jurisdiction => 'FMS', api_key => 'test' } ); + my $test_data; + + FixMyStreet::override_config { + STAGING_FLAGS => { send_reports => 1 }, + ALLOWED_COBRANDS => [ 'fixmystreet' ], + }, sub { + $test_data = FixMyStreet::Script::Reports::send(); + }; + $photo_report->discard_changes; + ok $photo_report->whensent, 'Report marked as sent'; + is $photo_report->send_method_used, 'Open311', 'Report sent via Open311'; + is $photo_report->external_id, 248, 'Report has right external ID'; + + my $req = $test_data->{test_req_used}; + my $c = CGI::Simple->new($req->content); + is $c->param('attribute[easting]'), 529025, 'Request had easting'; + is $c->param('attribute[northing]'), 179716, 'Request had northing'; + is $c->param('attribute[fixmystreet_id]'), $photo_report->id, 'Request had correct ID'; + is $c->param('jurisdiction_id'), 'FMS', 'Request had correct jurisdiction'; + my @media = $c->param('media_url'); + is_deeply \@media, [ + 'http://www.example.org/photo/' . $photo_report->id .'.0.full.jpeg?11111111' + ], 'One photo in media_url'; +}; + +$photo_report->whensent(undef); +$photo_report->cobrand('tester'); +$photo_report->send_method_used(''); +$photo_report->update(); + +subtest 'test sending multiple photos', sub { + $body->update( { send_method => 'Open311', endpoint => 'http://endpoint.example.com', jurisdiction => 'FMS', api_key => 'test' } ); + my $test_data; + + FixMyStreet::override_config { + STAGING_FLAGS => { send_reports => 1 }, + ALLOWED_COBRANDS => [ 'tester' ], + }, sub { + $test_data = FixMyStreet::Script::Reports::send(); + }; + $photo_report->discard_changes; + ok $photo_report->whensent, 'Report marked as sent'; + is $photo_report->send_method_used, 'Open311', 'Report sent via Open311'; + is $photo_report->external_id, 248, 'Report has right external ID'; + + my $req = $test_data->{test_req_used}; + my $c = CGI::Simple->new($req->content); + my @media = $c->param('media_url'); + is_deeply \@media, [ + 'http://www.example.org/photo/' . $photo_report->id .'.0.full.jpeg?11111111', + 'http://www.example.org/photo/' . $photo_report->id .'.1.full.jpeg?22222222', + 'http://www.example.org/photo/' . $photo_report->id .'.2.full.jpeg?33333333' + ], 'Multiple photos in media_url'; +}; + done_testing(); |