aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStruan Donald <struan@exo.org.uk>2011-06-23 16:08:20 +0100
committerStruan Donald <struan@exo.org.uk>2011-06-23 16:08:20 +0100
commit2264d094189ff9d5e1c52b58329fc191f97c3fd6 (patch)
tree4a9d037f260cc984192db6d5664e423baa577423
parent46848a1dd7a7e33cb8953df334f434d0450b5651 (diff)
parent27edc4907f17cbfd16cdd18241d6a936990006f5 (diff)
Merge branch 'master' of ssh://git.mysociety.org/data/git/public/fixmystreet into new_statuses
-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 a131fbd35..41bc3a4bd 100644
--- a/perllib/FixMyStreet/App/Controller/Report/Update.pm
+++ b/perllib/FixMyStreet/App/Controller/Report/Update.pm
@@ -297,7 +297,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.
@@ -317,8 +318,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 0812ddd81..e5495ebf1 100644
--- a/t/app/controller/report_updates.t
+++ b/t/app/controller/report_updates.t
@@ -464,7 +464,7 @@ $report->update;
for my $test (
{
- desc => 'submit update for register user',
+ desc => 'submit update for registered user',
initial_values => {
name => 'Test User',
may_show_name => 1,
@@ -489,7 +489,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,
@@ -515,7 +515,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,
@@ -542,7 +542,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,
@@ -567,7 +567,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,
@@ -580,7 +580,7 @@ for my $test (
fields => {
submit_update => 1,
update => 'update from a registered user',
- add_alert => undef,
+ add_alert => 1,
fixed => 1,
},
changed => {
@@ -588,9 +588,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();
@@ -638,7 +662,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';
};