diff options
author | Struan Donald <struan@exo.org.uk> | 2011-06-28 17:44:38 +0100 |
---|---|---|
committer | Struan Donald <struan@exo.org.uk> | 2011-06-28 17:44:38 +0100 |
commit | e2414d30dd673ecea38e2a40d187b835bd076ac3 (patch) | |
tree | c1c08382858784655c18e3bde293d0161e2380c7 | |
parent | 96da0c04218644450f141f20c1dee4247a0ed8fe (diff) |
indicate problem has been closed in alert
-rw-r--r-- | perllib/FixMyStreet/DB/ResultSet/AlertType.pm | 13 | ||||
-rw-r--r-- | t/app/model/alert_type.t | 144 |
2 files changed, 152 insertions, 5 deletions
diff --git a/perllib/FixMyStreet/DB/ResultSet/AlertType.pm b/perllib/FixMyStreet/DB/ResultSet/AlertType.pm index d5b2f5535..a7e6d9736 100644 --- a/perllib/FixMyStreet/DB/ResultSet/AlertType.pm +++ b/perllib/FixMyStreet/DB/ResultSet/AlertType.pm @@ -49,6 +49,7 @@ sub email_alerts ($) { # XXX Ugh - needs work $query =~ s/\?/alert.parameter/ if ($query =~ /\?/); $query =~ s/\?/alert.parameter2/ if ($query =~ /\?/); + $query = dbh()->prepare($query); $query->execute(); my $last_alert_id; @@ -73,11 +74,13 @@ sub email_alerts ($) { } # create problem status message for the templates - $data{state_message} = - # XXXXXX test this - FixMyStreet::DB::Result::Problem::fixed_states()->{$row->{state}} - ? _("This report is currently marked as fixed.") - : _("This report is currently marked as open."); + if ( FixMyStreet::DB::Result::Problem::fixed_states()->{$row->{state}} ) { + $data{state_message} = _("This report is currently marked as fixed."); + } elsif ( FixMyStreet::DB::Result::Problem::closed_states()->{$row->{state}} ) { + $data{state_message} = _("This report is currently marked as closed.") + } else { + $data{state_message} = _("This report is currently marked as open."); + } my $url = $cobrand->base_url_for_emails( $row->{alert_cobrand_data} ); if ($row->{item_text}) { diff --git a/t/app/model/alert_type.t b/t/app/model/alert_type.t new file mode 100644 index 000000000..c7bfe171c --- /dev/null +++ b/t/app/model/alert_type.t @@ -0,0 +1,144 @@ +use strict; +use warnings; +use Test::More; +use FixMyStreet::TestMech; + +mySociety::Locale::gettext_domain( 'FixMyStreet' ); + +my $mech = FixMyStreet::TestMech->new(); + +# this is the easiest way to make sure we're not going +# to get any emails sent by data kicking about in the database +FixMyStreet::App->model('DB::AlertType')->email_alerts(); +$mech->clear_emails_ok; + +my $user = + FixMyStreet::App->model('DB::User') + ->find_or_create( { email => 'test@example.com', name => 'Test User' } ); +ok $user, "created test user"; + +my $user2 = + FixMyStreet::App->model('DB::User') + ->find_or_create( { email => 'commenter@example.com', name => 'Commenter' } ); +ok $user2, "created comment user"; + + +my $dt = DateTime->new( + year => 2011, + month => 04, + day => 16, + hour => 15, + minute => 47, + second => 23 +); + +my $report = FixMyStreet::App->model('DB::Problem')->find_or_create( + { + postcode => 'SW1A 1AA', + council => '2504', + areas => ',105255,11806,11828,2247,2504,', + category => 'Other', + title => 'Test 2', + detail => 'Test 2 Detail', + used_map => 't', + name => 'Test User', + anonymous => 'f', + state => 'closed', + confirmed => $dt->ymd . ' ' . $dt->hms, + lang => 'en-gb', + service => '', + cobrand => 'default', + cobrand_data => '', + send_questionnaire => 't', + latitude => '51.5016605453401', + longitude => '-0.142497580865087', + user_id => $user->id, + } +); +my $report_id = $report->id; +ok $report, "created test report - $report_id"; + +my $comment = FixMyStreet::App->model('DB::Comment')->find_or_create( + { + problem_id => $report_id, + user_id => $user2->id, + name => 'Other User', + mark_fixed => 'false', + text => 'This is some update text', + state => 'confirmed', + confirmed => $dt->ymd . ' ' . $dt->hms, + anonymous => 'f', + } +); +my $comment2 = FixMyStreet::App->model('DB::Comment')->find_or_create( + { + problem_id => $report_id, + user_id => $user2->id, + name => 'Other User', + mark_fixed => 'false', + text => 'This is other update text', + state => 'confirmed', + confirmed => $dt->ymd . ' ' . $dt->hms, + anonymous => 'f', + } +); + +$comment->confirmed( \"ms_current_timestamp() - '3 days'::interval" ); +$comment->update; + +my $alert = FixMyStreet::App->model('DB::Alert')->find_or_create( + { + user => $user, + parameter => $report_id, + alert_type => 'new_updates', + whensubscribed => $dt->ymd . ' ' . $dt->hms, + confirmed => 1, + } +); + +for my $test ( + { + state => 'closed', + msg => 'This report is currently marked as closed', + }, + { + state => 'fixed', + msg => 'This report is currently marked as fixed', + }, + { + state => 'confirmed', + msg => 'This report is currently marked as open', + }, +) { + subtest "correct summary for state of $test->{state}" => sub { + $mech->clear_emails_ok; + + my $sent = FixMyStreet::App->model('DB::AlertSent')->search( + { + alert_id => $alert->id, + parameter => $comment->id, + } + )->delete; + + $report->state( $test->{state} ); + $report->update; + + FixMyStreet::App->model('DB::AlertType')->email_alerts(); + + $mech->email_count_is( 1 ); + my $email = $mech->get_email; + my $msg = $test->{msg}; + my $body = $email->body; + + like $body, qr/$msg/, 'email says problem is ' . $test->{state}; + like $body, qr{report/$report_id}, 'contains problem url'; + like $body, qr/This is some update text/, 'contains update text'; + unlike $body, qr/This is other update text/, 'does not contains other update text'; + + my $comments = $body =~ s/(------)//gs; + is $comments, 1, 'only 1 update'; + }; +} + +done_testing(); + |