aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStruan Donald <struan@exo.org.uk>2011-06-28 13:23:09 +0100
committerStruan Donald <struan@exo.org.uk>2011-06-28 13:23:09 +0100
commitf301d83e6bd7546b2f2a80067313dd17502581f8 (patch)
tree8bf4625cd8de90944468b66460d68c8fe8e8af3c
parent2c66aa1aa7c6c07c2146ebbccbf0b25f2ea97a3e (diff)
store correct old state in questionnaire when creator marks problem as fixed
-rwxr-xr-xperllib/FixMyStreet/App/Controller/Questionnaire.pm6
-rw-r--r--perllib/FixMyStreet/App/Controller/Report/Update.pm4
-rw-r--r--t/app/controller/report_updates.t37
3 files changed, 46 insertions, 1 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Questionnaire.pm b/perllib/FixMyStreet/App/Controller/Questionnaire.pm
index ad3827de9..ccf7dfba0 100755
--- a/perllib/FixMyStreet/App/Controller/Questionnaire.pm
+++ b/perllib/FixMyStreet/App/Controller/Questionnaire.pm
@@ -128,13 +128,19 @@ sub submit_creator_fixed : Private {
my $questionnaire = $c->model( 'DB::Questionnaire' )->find_or_new(
{
problem_id => $c->stash->{problem},
+ # we want to look for any previous questionnaire here rather than one for
+ # this specific open state -> fixed transistion
old_state => [ FixMyStreet::DB::Result::Problem->open_states() ],
new_state => 'fixed - user',
}
);
unless ( $questionnaire->in_storage ) {
+ my $old_state = $c->flash->{old_state};
+ $old_state = 'confirmed' unless FixMyStreet::DB::Result::Problem->open_states->{$old_state};
+
$questionnaire->ever_reported( $c->stash->{reported} eq 'Yes' ? 1 : 0 );
+ $questionnaire->old_state( $old_state );
$questionnaire->whensent( \'ms_current_timestamp()' );
$questionnaire->whenanswered( \'ms_current_timestamp()' );
$questionnaire->insert;
diff --git a/perllib/FixMyStreet/App/Controller/Report/Update.pm b/perllib/FixMyStreet/App/Controller/Report/Update.pm
index 1ea0e88b4..76bd89174 100644
--- a/perllib/FixMyStreet/App/Controller/Report/Update.pm
+++ b/perllib/FixMyStreet/App/Controller/Report/Update.pm
@@ -51,6 +51,9 @@ sub update_problem : Private {
my $update = $c->stash->{update};
my $problem = $c->stash->{problem} || $update->problem;
+ # we may need this if we display the questionnaire
+ my $old_state = $problem->state;
+
if ( $update->mark_fixed ) {
$problem->state('fixed - user');
@@ -75,6 +78,7 @@ sub update_problem : Private {
$c->stash->{problem_id} = $problem->id;
if ($display_questionnaire) {
+ $c->flash->{old_state} = $old_state;
$c->detach('/questionnaire/creator_fixed');
}
diff --git a/t/app/controller/report_updates.t b/t/app/controller/report_updates.t
index 72006dca8..49bfc0d1b 100644
--- a/t/app/controller/report_updates.t
+++ b/t/app/controller/report_updates.t
@@ -786,6 +786,34 @@ foreach my $test (
},
changed => { update => 'Update from owner' },
initial_banner => '',
+ initial_state => 'confirmed',
+ alert => 1, # we signed up for alerts before, do not unsign us
+ anonymous => 0,
+ answered => 0,
+ path => '/report/update',
+ content =>
+"Thanks, glad to hear it's been fixed! Could we just ask if you have ever reported a problem to a council before?",
+ },
+ {
+ desc => 'logged in reporter submits update and marks in progress problem fixed',
+ initial_values => {
+ name => 'Test User',
+ may_show_name => 1,
+ add_alert => 1,
+ photo => '',
+ update => '',
+ fixed => undef,
+ },
+ email => 'test@example.com',
+ fields => {
+ submit_update => 1,
+ update => 'update from owner',
+ add_alert => undef,
+ fixed => 1,
+ },
+ changed => { update => 'Update from owner' },
+ initial_banner => ' This problem is in progress. ',
+ initial_state => 'in progress',
alert => 1, # we signed up for alerts before, do not unsign us
anonymous => 0,
answered => 0,
@@ -813,6 +841,7 @@ foreach my $test (
},
changed => { update => 'Update from owner' },
initial_banner => '',
+ initial_state => 'confirmed',
alert => 1, # we signed up for alerts before, do not unsign us
anonymous => 0,
answered => 1,
@@ -831,7 +860,7 @@ foreach my $test (
ok( $_->delete, 'deleted comment ' . $_->id ) for $report->comments;
$report->discard_changes;
- $report->state('confirmed');
+ $report->state( $test->{initial_state} );
$report->update;
my $questionnaire;
@@ -873,6 +902,8 @@ foreach my $test (
my $results = { %{ $test->{fields} }, %{ $test->{changed} }, };
+ $report->discard_changes;
+
my $update = $report->comments->first;
ok $update, 'found update';
is $update->text, $results->{update}, 'update text';
@@ -880,6 +911,8 @@ foreach my $test (
is $update->state, 'confirmed', 'update confirmed';
is $update->anonymous, $test->{anonymous}, 'user anonymous';
+ is $report->state, 'fixed - user', 'report state';
+
SKIP: {
skip( 'not answering questionnaire', 5 ) if $questionnaire;
@@ -899,6 +932,8 @@ foreach my $test (
ok $questionnaire, 'questionnaire exists';
ok $questionnaire->ever_reported, 'ever reported is yes';
+ is $questionnaire->old_state(), $test->{initial_state}, 'questionnaire old state';
+ is $questionnaire->new_state(), 'fixed - user', 'questionnaire new state';
};
if ($questionnaire) {