aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Somerville <matthew@mysociety.org>2011-06-23 15:16:51 +0100
committerMatthew Somerville <matthew@mysociety.org>2011-06-23 15:16:51 +0100
commit27edc4907f17cbfd16cdd18241d6a936990006f5 (patch)
treecd8c85f36c2b52ba42b38a6549e374be4cb651cf
parent8dbb38d87e7361bcc4f4d260f89cfa8b8dfe425b (diff)
Allow unsub from update form, fix test.
-rw-r--r--perllib/FixMyStreet/App/Controller/Report/Update.pm7
-rw-r--r--t/app/controller/report_updates.t40
2 files changed, 37 insertions, 10 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Report/Update.pm b/perllib/FixMyStreet/App/Controller/Report/Update.pm
index 86c84f14c..d84fda1bf 100644
--- a/perllib/FixMyStreet/App/Controller/Report/Update.pm
+++ b/perllib/FixMyStreet/App/Controller/Report/Update.pm
@@ -278,7 +278,8 @@ sub redirect_or_confirm_creation : Private {
=head2 signup_for_alerts
If the user has selected to be signed up for alerts then create a
-new_updates alert.
+new_updates alert. Or if they're logged in and they've unticked the
+box, disable their alert.
NB: this does not check if they are a registered user so that should
happen before calling this.
@@ -298,8 +299,10 @@ sub signup_for_alerts : Private {
cobrand_data => $update->cobrand_data,
lang => $update->lang,
);
-
$alert->confirm();
+
+ } elsif ( $c->user && ( my $alert = $c->user->alert_for_problem($c->stash->{update}->problem_id) ) ) {
+ $alert->disable();
}
return 1;
diff --git a/t/app/controller/report_updates.t b/t/app/controller/report_updates.t
index 624872505..21429c2a4 100644
--- a/t/app/controller/report_updates.t
+++ b/t/app/controller/report_updates.t
@@ -384,7 +384,7 @@ for my $test (
for my $test (
{
- desc => 'submit update for register user',
+ desc => 'submit update for registered user',
initial_values => {
name => 'Test User',
may_show_name => 1,
@@ -409,7 +409,7 @@ for my $test (
anonymous => 0,
},
{
- desc => 'submit update for register user anonymously by unchecking',
+ desc => 'submit update for registered user anonymously by unchecking',
initial_values => {
name => 'Test User',
may_show_name => 1,
@@ -435,7 +435,7 @@ for my $test (
anonymous => 1,
},
{
- desc => 'submit update for register user anonymously by deleting name',
+ desc => 'submit update for registered user anonymously by deleting name',
initial_values => {
name => 'Test User',
may_show_name => 1,
@@ -462,7 +462,7 @@ for my $test (
anonymous => 1,
},
{
- desc => 'submit update for register user and sign up',
+ desc => 'submit update for registered user and sign up',
initial_values => {
name => 'Test User',
may_show_name => 1,
@@ -487,7 +487,7 @@ for my $test (
anonymous => 0,
},
{
- desc => 'submit update for register user and mark fixed',
+ desc => 'submit update for registered user and mark fixed',
initial_values => {
name => 'Commenter',
may_show_name => 1,
@@ -500,7 +500,7 @@ for my $test (
fields => {
submit_update => 1,
update => 'update from a registered user',
- add_alert => undef,
+ add_alert => 1,
fixed => 1,
},
changed => {
@@ -508,9 +508,33 @@ for my $test (
},
initial_banner => '',
endstate_banner => ' This problem has been fixed. ',
- alert => 1, # we signed up for alerts before, do not unsign us
+ alert => 1,
+ anonymous => 0,
+ },
+ {
+ desc => 'submit another update for registered user and want no more alerts',
+ initial_values => {
+ name => 'Commenter',
+ may_show_name => 1,
+ add_alert => 1,
+ photo => '',
+ update => '',
+ },
+ email => 'commenter@example.com',
+ fields => {
+ submit_update => 1,
+ update => 'another update from a registered user',
+ add_alert => undef,
+ },
+ changed => {
+ update => 'Another update from a registered user'
+ },
+ initial_banner => ' This problem has been fixed. ',
+ endstate_banner => ' This problem has been fixed. ',
+ alert => 0,
anonymous => 0,
},
+ # If logged in person unticks the box and already has an alert, they should be unsubscribed.
) {
subtest $test->{desc} => sub {
$mech->log_out_ok();
@@ -558,7 +582,7 @@ for my $test (
my $alert =
FixMyStreet::App->model('DB::Alert')
- ->find( { user => $user, alert_type => 'new_updates', confirmed => 1 } );
+ ->find( { user => $update->user, alert_type => 'new_updates', confirmed => 1, whendisabled => undef } );
ok $test->{alert} ? $alert : !$alert, 'not signed up for alerts';
};