aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/CrossSell.pm3
-rw-r--r--perllib/FixMyStreet/Cobrand/Default.pm5
-rw-r--r--perllib/FixMyStreet/Geocode/OSM.pm3
-rw-r--r--perllib/Open311.pm6
-rw-r--r--t/app/controller/report_updates.t45
-rw-r--r--t/open311.t34
-rw-r--r--templates/web/default/report/updates.html4
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 %]