diff options
author | Struan Donald <struan@exo.org.uk> | 2013-01-21 16:24:35 +0000 |
---|---|---|
committer | Struan Donald <struan@exo.org.uk> | 2013-01-21 16:24:35 +0000 |
commit | 3d3cbcee61636734200fafb5f91d68e3cbaee20a (patch) | |
tree | dd57fec96fe81457bcf298ebf62918f9f7aaa99f | |
parent | ce9afa6c9e362e84dbdb46fffcdc47a4c3185ad5 (diff) | |
parent | 2fe8c928d8d8acbd19f0f5243e92c0a5efd62456 (diff) |
Merge branch 'bromley-internal-referral'
-rw-r--r-- | db/schema.sql | 2 | ||||
-rw-r--r-- | db/schema_0025-add_more_statuses_to_problem.sql | 20 | ||||
-rw-r--r-- | perllib/FixMyStreet/DB/Result/Problem.pm | 4 | ||||
-rw-r--r-- | perllib/Open311.pm | 2 | ||||
-rw-r--r-- | t/app/controller/report_display.t | 8 | ||||
-rw-r--r-- | t/app/controller/report_updates.t | 47 | ||||
-rw-r--r-- | t/open311.t | 40 | ||||
-rw-r--r-- | t/open311/getservicerequestupdates.t | 12 |
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', |