aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStruan Donald <struan@exo.org.uk>2013-01-21 16:24:35 +0000
committerStruan Donald <struan@exo.org.uk>2013-01-21 16:24:35 +0000
commit3d3cbcee61636734200fafb5f91d68e3cbaee20a (patch)
treedd57fec96fe81457bcf298ebf62918f9f7aaa99f
parentce9afa6c9e362e84dbdb46fffcdc47a4c3185ad5 (diff)
parent2fe8c928d8d8acbd19f0f5243e92c0a5efd62456 (diff)
Merge branch 'bromley-internal-referral'
-rw-r--r--db/schema.sql2
-rw-r--r--db/schema_0025-add_more_statuses_to_problem.sql20
-rw-r--r--perllib/FixMyStreet/DB/Result/Problem.pm4
-rw-r--r--perllib/Open311.pm2
-rw-r--r--t/app/controller/report_display.t8
-rw-r--r--t/app/controller/report_updates.t47
-rw-r--r--t/open311.t40
-rw-r--r--t/open311/getservicerequestupdates.t12
8 files changed, 111 insertions, 24 deletions
diff --git a/db/schema.sql b/db/schema.sql
index 021c5561d..5bdd2a66a 100644
--- a/db/schema.sql
+++ b/db/schema.sql
@@ -193,6 +193,7 @@ create table problem (
or state = 'unable to fix'
or state = 'not responsible'
or state = 'duplicate'
+ or state = 'internal referral'
),
lang text not null default 'en-gb',
service text not null default '',
@@ -343,6 +344,7 @@ create table comment (
or problem_state = 'unable to fix'
or problem_state = 'not responsible'
or problem_state = 'duplicate'
+ or problem_state = 'internal referral'
),
-- other fields? one to indicate whether this was written by the council
-- and should be highlighted in the display?
diff --git a/db/schema_0025-add_more_statuses_to_problem.sql b/db/schema_0025-add_more_statuses_to_problem.sql
index 9c49c8566..14d1b3195 100644
--- a/db/schema_0025-add_more_statuses_to_problem.sql
+++ b/db/schema_0025-add_more_statuses_to_problem.sql
@@ -18,6 +18,7 @@ BEGIN;
or state = 'unable to fix'
or state = 'not responsible'
or state = 'duplicate'
+ or state = 'internal referral'
);
@@ -36,40 +37,47 @@ BEGIN;
or problem_state = 'unable to fix'
or problem_state = 'not responsible'
or problem_state = 'duplicate'
+ or problem_state = 'internal referral'
);
UPDATE alert_type set item_where = 'nearby.problem_id = problem.id and problem.state in
(''confirmed'', ''investigating'', ''planned'', ''in progress'',
''fixed'', ''fixed - council'', ''fixed - user'', ''closed'',
- ''action scheduled'', ''not responsible'', ''duplicate'', ''unable to fix'' )'
+ ''action scheduled'', ''not responsible'', ''duplicate'', ''unable to fix'',
+ ''internal referral'')'
WHERE ref = 'postcode_local_problems';
UPDATE alert_type set item_where = 'problem.state in
(''confirmed'', ''investigating'', ''planned'', ''in progress'',
''fixed'', ''fixed - council'', ''fixed - user'', ''closed''
- ''action scheduled'', ''not responsible'', ''duplicate'', ''unable to fix'' )'
+ ''action scheduled'', ''not responsible'', ''duplicate'', ''unable to fix'',
+ ''internal referral'' )'
WHERE ref = 'new_problems';
UPDATE alert_type set item_where = 'problem.state in (''fixed'', ''fixed - user'', ''fixed - council'')' WHERE ref = 'new_fixed_problems';
UPDATE alert_type set item_where = 'nearby.problem_id = problem.id and problem.state in
(''confirmed'', ''investigating'', ''planned'', ''in progress'',
''fixed'', ''fixed - council'', ''fixed - user'', ''closed'',
- ''action scheduled'', ''not responsible'', ''duplicate'', ''unable to fix'' )'
+ ''action scheduled'', ''not responsible'', ''duplicate'', ''unable to fix'',
+ ''internal referral'')'
WHERE ref = 'local_problems';
UPDATE alert_type set item_where = 'problem.state in
(''confirmed'', ''investigating'', ''planned'', ''in progress'',
''fixed'', ''fixed - council'', ''fixed - user'', ''closed'',
- ''action scheduled'', ''not responsible'', ''duplicate'', ''unable to fix'' ) AND
+ ''action scheduled'', ''not responsible'', ''duplicate'', ''unable to fix'',
+ ''internal referral'' ) AND
(council like ''%''||?||''%'' or council is null) and
areas like ''%,''||?||'',%''' WHERE ref = 'council_problems';
UPDATE alert_type set item_where = 'problem.state in
(''confirmed'', ''investigating'', ''planned'', ''in progress'',
''fixed'', ''fixed - council'', ''fixed - user'', ''closed'',
- ''action scheduled'', ''not responsible'', ''duplicate'', ''unable to fix'' ) AND
+ ''action scheduled'', ''not responsible'', ''duplicate'', ''unable to fix'',
+ ''internal referral'' ) AND
(council like ''%''||?||''%'' or council is null) and
areas like ''%,''||?||'',%''' WHERE ref = 'ward_problems';
UPDATE alert_type set item_where = 'problem.state in
(''confirmed'', ''investigating'', ''planned'', ''in progress'',
''fixed'', ''fixed - council'', ''fixed - user'', ''closed'',
- ''action scheduled'', ''not responsible'', ''duplicate'', ''unable to fix'' ) AND
+ ''action scheduled'', ''not responsible'', ''duplicate'', ''unable to fix'',
+ ''internal referral'' ) AND
areas like ''%,''||?||'',%''' WHERE ref = 'area_problems';
COMMIT;
diff --git a/perllib/FixMyStreet/DB/Result/Problem.pm b/perllib/FixMyStreet/DB/Result/Problem.pm
index b1f59e78a..26724303e 100644
--- a/perllib/FixMyStreet/DB/Result/Problem.pm
+++ b/perllib/FixMyStreet/DB/Result/Problem.pm
@@ -242,6 +242,7 @@ sub closed_states {
'unable to fix' => 1,
'not responsible' => 1,
'duplicate' => 1,
+ 'internal referral' => 1,
};
return wantarray ? keys %{$states} : $states;
@@ -272,6 +273,7 @@ sub visible_states {
'not responsible' => 1,
'duplicate' => 1,
'closed' => 1,
+ 'internal referral' => 1,
};
return wantarray ? keys %{$states} : $states;
@@ -303,6 +305,7 @@ sub all_states {
'not responsible' => 1,
'duplicate' => 1,
'closed' => 1,
+ 'internal referral' => 1,
};
return wantarray ? keys %{$states} : $states;
@@ -327,6 +330,7 @@ sub council_states {
'unable to fix' => 1,
'not responsible' => 1,
'duplicate' => 1,
+ 'internal referral' => 1,
};
return wantarray ? keys %{$states} : $states;
diff --git a/perllib/Open311.pm b/perllib/Open311.pm
index e506ec1d0..efa0ac64f 100644
--- a/perllib/Open311.pm
+++ b/perllib/Open311.pm
@@ -312,6 +312,8 @@ sub _populate_service_request_update_params {
$status = 'NOT_COUNCILS_RESPONSIBILITY';
} elsif ( $state eq 'unable to fix' ) {
$status = 'NO_FURTHER_ACTION';
+ } elsif ( $state eq 'internal referral' ) {
+ $status = 'INTERNAL_REFERRAL';
}
} else {
if ( !FixMyStreet::DB::Result::Problem->open_states()->{$state} ) {
diff --git a/t/app/controller/report_display.t b/t/app/controller/report_display.t
index 82c98dc5c..aa04e499b 100644
--- a/t/app/controller/report_display.t
+++ b/t/app/controller/report_display.t
@@ -307,6 +307,14 @@ for my $test (
fixed => 0
},
{
+ description => 'internal referral report',
+ date => DateTime->now,
+ state => 'internal referral',
+ banner_id => 'closed',
+ banner_text => 'closed',
+ fixed => 0
+ },
+ {
description => 'closed report',
date => DateTime->now,
state => 'closed',
diff --git a/t/app/controller/report_updates.t b/t/app/controller/report_updates.t
index 12ac5d654..7d88a2d4f 100644
--- a/t/app/controller/report_updates.t
+++ b/t/app/controller/report_updates.t
@@ -538,6 +538,18 @@ for my $test (
state => 'unable to fix',
},
{
+ desc => 'from authority user marks report as internal referral',
+ fields => {
+ name => $user->name,
+ may_show_name => 1,
+ add_alert => undef,
+ photo => '',
+ update => 'Set state to internal referral',
+ state => 'internal referral',
+ },
+ state => 'internal referral',
+ },
+ {
desc => 'from authority user marks report as not responsible',
fields => {
name => $user->name,
@@ -564,6 +576,19 @@ for my $test (
meta => 'duplicate report',
},
{
+ desc => 'from authority user marks report as internal referral',
+ fields => {
+ name => $user->name,
+ may_show_name => 1,
+ add_alert => undef,
+ photo => '',
+ update => 'Set state to internal referral',
+ state => 'internal referral',
+ },
+ state => 'internal referral',
+ meta => 'internal referral',
+ },
+ {
desc => 'from authority user marks report sent to two councils as fixed',
fields => {
name => $user->name,
@@ -1480,6 +1505,17 @@ for my $test (
end_state => 'unable to fix',
},
{
+ desc => 'update internal referral without marking as fixed leaves state unchanged',
+ initial_state => 'internal referral',
+ expected_form_fields => {
+ fixed => undef,
+ },
+ submitted_form_fields => {
+ fixed => 0,
+ },
+ end_state => 'internal referral',
+ },
+ {
desc => 'update not responsible without marking as fixed leaves state unchanged',
initial_state => 'not responsible',
expected_form_fields => {
@@ -1568,6 +1604,17 @@ for my $test (
end_state => 'fixed - user',
},
{
+ desc => 'can mark internal referral as fixed, cannot mark not closed',
+ initial_state => 'internal referral',
+ expected_form_fields => {
+ fixed => undef,
+ },
+ submitted_form_fields => {
+ fixed => 1,
+ },
+ end_state => 'fixed - user',
+ },
+ {
desc => 'can mark not responsible as fixed, cannot mark not closed',
initial_state => 'not responsible',
expected_form_fields => {
diff --git a/t/open311.t b/t/open311.t
index 4c451d55e..71a87325c 100644
--- a/t/open311.t
+++ b/t/open311.t
@@ -217,7 +217,7 @@ subtest 'basic request update post parameters' => sub {
};
subtest 'extended request update post parameters' => sub {
- my $results = make_update_req( $comment, '<?xml version="1.0" encoding="utf-8"?><service_request_updates><request_update><update_id>248</update_id></request_update></service_request_updates>', { extended_updates => 1 } );
+ my $results = make_update_req( $comment, '<?xml version="1.0" encoding="utf-8"?><service_request_updates><request_update><update_id>248</update_id></request_update></service_request_updates>', { use_extended_updates => 1 } );
is $results->{ res }, 248, 'got update id';
@@ -295,6 +295,13 @@ foreach my $test (
extended => 'NO_FURTHER_ACTION',
},
{
+ desc => 'comment with internal referral state sends status of CLOSED',
+ state => 'internal referral',
+ anon => 0,
+ status => 'CLOSED',
+ extended => 'INTERNAL_REFERRAL',
+ },
+ {
desc => 'comment with closed state sends status of CLOSED',
state => 'closed',
status => 'CLOSED',
@@ -322,19 +329,23 @@ foreach my $test (
desc => 'comment with in progress state sends status of OPEN',
state => 'in progress',
status => 'OPEN',
- },
- {
- state => 'confirmed',
- status => 'OPEN',
+ extended => 'IN_PROGRESS',
},
) {
subtest $test->{desc} => sub {
+ $comment->problem_state( $test->{state} );
$comment->problem->state( $test->{state} );
my $results = make_update_req( $comment, '<?xml version="1.0" encoding="utf-8"?><service_request_updates><request_update><update_id>248</update_id></request_update></service_request_updates>' );
my $c = CGI::Simple->new( $results->{ req }->content );
is $c->param('status'), $test->{status}, 'correct status';
+
+ if ( $test->{extended} ) {
+ my $results = make_update_req( $comment, '<?xml version="1.0" encoding="utf-8"?><service_request_updates><request_update><update_id>248</update_id></request_update></service_request_updates>', { extended_statuses => 1 } );
+ my $c = CGI::Simple->new( $results->{ req }->content );
+ is $c->param('status'), $test->{extended}, 'correct extended status';
+ }
};
}
@@ -344,7 +355,6 @@ for my $test (
state => 'confirmed',
anon => 0,
status => 'OPEN',
- extended => 'IN_PROGRESS',
},
{
desc => 'anonymous commment sets public_anonymity_required to true',
@@ -358,16 +368,10 @@ for my $test (
$comment->problem->state( $test->{state} );
$comment->anonymous( $test->{anon} );
- my $results = make_update_req( $comment, '<?xml version="1.0" encoding="utf-8"?><service_request_updates><request_update><update_id>248</update_id></request_update></service_request_updates>', { extended_updates => 1 } );
+ my $results = make_update_req( $comment, '<?xml version="1.0" encoding="utf-8"?><service_request_updates><request_update><update_id>248</update_id></request_update></service_request_updates>', { use_extended_updates => 1 } );
my $c = CGI::Simple->new( $results->{ req }->content );
is $c->param('public_anonymity_required'), $test->{anon} ? 'TRUE' : 'FALSE', 'correct anonymity';
-
- if ( $test->{extended} ) {
- my $results = make_update_req( $comment, '<?xml version="1.0" encoding="utf-8"?><service_request_updates><request_update><update_id>248</update_id></request_update></service_request_updates>', { extended_statuses => 1 } );
- my $c = CGI::Simple->new( $results->{ req }->content );
- is $c->param('status'), $test->{extended}, 'correct extended status';
- }
};
}
@@ -634,13 +638,13 @@ done_testing();
sub make_update_req {
my $comment = shift;
my $xml = shift;
- my $open311conf = shift || {};
+ my $open311_args = shift || {};
my $params = {
- object => $comment,
- xml => $xml,
- method => 'post_service_request_update',
- path => 'servicerequestupdates.xml',
+ object => $comment,
+ xml => $xml,
+ method => 'post_service_request_update',
+ path => 'servicerequestupdates.xml',
open311_conf => $open311_args,
};
diff --git a/t/open311/getservicerequestupdates.t b/t/open311/getservicerequestupdates.t
index 3f9c35c32..ba2854460 100644
--- a/t/open311/getservicerequestupdates.t
+++ b/t/open311/getservicerequestupdates.t
@@ -204,6 +204,18 @@ for my $test (
end_state => 'not responsible',
},
{
+ desc => 'internal referral status changes problem status',
+ updated_datetime => sprintf( '<updated_datetime>%s</updated_datetime>', $dt ),
+ description => 'This is a note',
+ external_id => 638344,
+ start_state => 'confirmed',
+ comment_status => 'INTERNAL_REFERRAL',
+ mark_fixed=> 0,
+ mark_open => 0,
+ problem_state => 'internal referral',
+ end_state => 'internal referral',
+ },
+ {
desc => 'duplicate status changes problem status',
updated_datetime => sprintf( '<updated_datetime>%s</updated_datetime>', $dt ),
description => 'This is a note',