diff options
-rw-r--r-- | perllib/CrossSell.pm | 3 | ||||
-rw-r--r-- | perllib/FixMyStreet/Cobrand/Default.pm | 5 | ||||
-rw-r--r-- | perllib/FixMyStreet/Geocode/OSM.pm | 3 | ||||
-rw-r--r-- | perllib/Open311.pm | 6 | ||||
-rw-r--r-- | t/app/controller/report_updates.t | 45 | ||||
-rw-r--r-- | t/open311.t | 34 | ||||
-rw-r--r-- | templates/web/default/report/updates.html | 4 |
7 files changed, 90 insertions, 10 deletions
diff --git a/perllib/CrossSell.pm b/perllib/CrossSell.pm index f9a02a61b..f9cde6936 100644 --- a/perllib/CrossSell.pm +++ b/perllib/CrossSell.pm @@ -19,7 +19,6 @@ package CrossSell; use strict; use LWP::Simple qw($ua get); -$ua->timeout(5); use URI::Escape; use mySociety::AuthToken; use mySociety::Web qw(ent); @@ -169,6 +168,8 @@ sub display_advert ($$;$%) { return '' unless $c->cobrand->moniker eq 'fixmystreet'; + $ua->timeout(5); + #if (defined $data{council} && $data{council} eq '2326') { # my ($out, $ad) = display_hfyc_cheltenham_advert($email, $name); # if ($out) { diff --git a/perllib/FixMyStreet/Cobrand/Default.pm b/perllib/FixMyStreet/Cobrand/Default.pm index 04265963a..8d0b5ab50 100644 --- a/perllib/FixMyStreet/Cobrand/Default.pm +++ b/perllib/FixMyStreet/Cobrand/Default.pm @@ -4,6 +4,7 @@ use base 'FixMyStreet::Cobrand::Base'; use strict; use warnings; use FixMyStreet; +use Encode; use URI; use Digest::MD5 qw(md5_hex); @@ -647,7 +648,9 @@ sub get_report_stats { return 0; } sub get_council_sender { return 'Email' }; sub example_places { - return FixMyStreet->config('EXAMPLE_PLACES') || [ 'High Street', 'Main Street' ]; + my $e = FixMyStreet->config('EXAMPLE_PLACES') || [ 'High Street', 'Main Street' ]; + $e = [ map { Encode::decode('UTF-8', $_) } @$e ]; + return $e; } sub process_extras {} diff --git a/perllib/FixMyStreet/Geocode/OSM.pm b/perllib/FixMyStreet/Geocode/OSM.pm index ba939b443..197b2b1e7 100644 --- a/perllib/FixMyStreet/Geocode/OSM.pm +++ b/perllib/FixMyStreet/Geocode/OSM.pm @@ -15,7 +15,7 @@ use Digest::MD5 qw(md5_hex); use Encode; use File::Slurp; use File::Path (); -use LWP::Simple; +use LWP::Simple qw($ua); use Memcached; use XML::Simple; @@ -49,6 +49,7 @@ sub string { if (-s $cache_file) { $js = File::Slurp::read_file($cache_file); } else { + $ua->timeout(15); $js = LWP::Simple::get($url); $js = encode_utf8($js) if utf8::is_utf8($js); File::Path::mkpath($cache_dir); diff --git a/perllib/Open311.pm b/perllib/Open311.pm index aa0e64b53..6d218131f 100644 --- a/perllib/Open311.pm +++ b/perllib/Open311.pm @@ -65,7 +65,11 @@ sub send_service_request { if ( $obj ) { if ( $obj->{ request }->{ service_request_id } ) { - return $obj->{ request }->{ service_request_id }; + my $request_id = $obj->{request}->{service_request_id}; + + unless ( ref $request_id ) { + return $request_id; + } } else { my $token = $obj->{ request }->{ token }; if ( $token ) { diff --git a/t/app/controller/report_updates.t b/t/app/controller/report_updates.t index cf6af16cb..82670d6cc 100644 --- a/t/app/controller/report_updates.t +++ b/t/app/controller/report_updates.t @@ -577,7 +577,12 @@ for my $test ( is $update->problem_state, $test->{state}, 'problem state set'; my $update_meta = $mech->extract_update_metas; - like $update_meta->[0], qr/marked as $test->{fields}->{state}$/, 'update meta includes state change'; + # setting it to confirmed shouldn't say anything + if ( $test->{fields}->{state} ne 'confirmed' ) { + like $update_meta->[0], qr/marked as $test->{fields}->{state}$/, 'update meta includes state change'; + } else { + like $update_meta->[0], qr/reopened$/, 'update meta includes state change'; + } like $update_meta->[0], qr{Test User \(Westminster City Council\)}, 'update meta includes council name'; $mech->content_contains( 'Test User (<strong>Westminster City Council</strong>)', 'council name in bold'); @@ -586,6 +591,44 @@ for my $test ( }; } +subtest 'check meta correct for comments marked confirmed but not marked open' => sub { + $report->comments->delete; + my $comment = FixMyStreet::App->model('DB::Comment')->create( + { + user => $user, + problem_id => $report->id, + text => 'update text', + confirmed => DateTime->now, + problem_state => 'confirmed', + anonymous => 0, + mark_open => 0, + mark_fixed => 0, + state => 'confirmed', + } + ); + + $mech->get_ok( "/report/" . $report->id ); + my $update_meta = $mech->extract_update_metas; + like $update_meta->[0], qr/reopened$/, + 'update meta does not say reopened'; + + $comment->update( { mark_open => 1, problem_state => undef } ); + $mech->get_ok( "/report/" . $report->id ); + $update_meta = $mech->extract_update_metas; + + unlike $update_meta->[0], qr/marked as open$/, + 'update meta does not says marked as open'; + like $update_meta->[0], qr/reopened$/, 'update meta does say reopened'; + + $comment->update( { mark_open => 0, problem_state => undef } ); + $mech->get_ok( "/report/" . $report->id ); + $update_meta = $mech->extract_update_metas; + + unlike $update_meta->[0], qr/marked as open$/, + 'update meta does not says marked as open'; + unlike $update_meta->[0], qr/reopened$/, 'update meta does not say reopened'; + }; + $user->from_council(0); $user->update; diff --git a/t/open311.t b/t/open311.t index f082179ea..835d8d8cb 100644 --- a/t/open311.t +++ b/t/open311.t @@ -410,20 +410,48 @@ for my $test ( }; } +subtest 'No request id in reponse' => sub { + my $results; + warning_like { + $results = make_service_req( + $problem, + { url => 'http://example.com/report/1' }, + $problem->category, + '<?xml version="1.0" encoding="utf-8"?><service_requests><request><service_request_id></service_request_id></request></service_requests>' + ); + } qr/Failed to submit problem \d+ over Open311/, 'correct error message for missing request_id'; + + is $results->{ res }, 0, 'No request_id is a failure'; +}; + +subtest 'Bad data in request_id element in reponse' => sub { + my $results; + warning_like { + $results = make_service_req( + $problem, + { url => 'http://example.com/report/1' }, + $problem->category, + '<?xml version="1.0" encoding="utf-8"?><service_requests><request><service_request_id><bad_data>BAD</bad_data></service_request_id></request></service_requests>' + ); + } qr/Failed to submit problem \d+ over Open311/, 'correct error message for bad data in request_id'; + + is $results->{ res }, 0, 'No request_id is a failure'; +}; + subtest 'No update id in reponse' => sub { my $results; warning_like { $results = make_update_req( $comment, '<?xml version="1.0" encoding="utf-8"?><service_request_updates><request_update><update_id></update_id></request_update></service_request_updates>' ) - } qr/Failed to submit comment \d+ over Open311/, 'correct error message'; + } qr/Failed to submit comment \d+ over Open311/, 'correct error message for missing update_id'; is $results->{ res }, 0, 'No update_id is a failure'; }; -subtest 'error reponse' => sub { +subtest 'error response' => sub { my $results; warning_like { $results = make_update_req( $comment, '<?xml version="1.0" encoding="utf-8"?><errors><error><code>400</code><description>There was an error</description</error></errors>' ) - } qr/Failed to submit comment \d+ over Open311.*There was an error/, 'correct error messages'; + } qr/Failed to submit comment \d+ over Open311.*There was an error/, 'correct error messages for general error'; is $results->{ res }, 0, 'error in response is a failure'; }; diff --git a/templates/web/default/report/updates.html b/templates/web/default/report/updates.html index de873e2ed..eaf5209ff 100644 --- a/templates/web/default/report/updates.html +++ b/templates/web/default/report/updates.html @@ -23,7 +23,7 @@ [% tprintf( loc( 'Posted by %s at %s' ), update.name, prettify_epoch( update.confirmed_local.epoch ) ) | html -%] [%- END -%] [%- ", " _ loc( 'marked as fixed' ) IF update.mark_fixed %] - [%- ", " _ loc( 'reopened' ) IF update.mark_open %] - [%- ", " _ tprintf(loc( 'marked as %s' ), update.meta_problem_state) IF update.problem_state %] + [%- ", " _ loc( 'reopened' ) IF update.mark_open OR update.problem_state == 'confirmed' %] + [%- ", " _ tprintf(loc( 'marked as %s' ), update.meta_problem_state) IF update.problem_state AND update.problem_state != 'confirmed' %] [% END %] |