aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/FixMyStreet/App/Controller/Report/Update.pm7
-rw-r--r--t/app/controller/report_updates.t156
2 files changed, 104 insertions, 59 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Report/Update.pm b/perllib/FixMyStreet/App/Controller/Report/Update.pm
index a0c332b40..eadf2beea 100644
--- a/perllib/FixMyStreet/App/Controller/Report/Update.pm
+++ b/perllib/FixMyStreet/App/Controller/Report/Update.pm
@@ -315,10 +315,11 @@ sub signup_for_alerts : Private {
my ( $self, $c ) = @_;
if ( $c->stash->{add_alert} ) {
- my $alert = $c->model( 'DB::Alert' )->find_or_create(
- user => $c->stash->{update}->user,
+ my $alert = $c->model('DB::Alert')->find_or_create(
+ user => $c->stash->{update}->user,
alert_type => 'new_updates',
- parameter => $c->stash->{update}->problem_id,
+ parameter => $c->stash->{update}->problem_id,
+ confirmed => 1,
);
$alert->update;
diff --git a/t/app/controller/report_updates.t b/t/app/controller/report_updates.t
index 72a120b0e..4f7d1628d 100644
--- a/t/app/controller/report_updates.t
+++ b/t/app/controller/report_updates.t
@@ -270,73 +270,117 @@ for my $test (
};
}
-subtest "submit an update for a non registered user" => sub {
- $mech->log_out_ok();
- $mech->clear_emails_ok();
+for my $test (
+ {
+ desc => 'submit an update for a non registered user',
+ initial_values => {
+ name => '',
+ rznvy => '',
+ may_show_name => undef,
+ add_alert => 1,
+ photo => '',
+ update => '',
+ fixed => undef,
+ },
+ form_values => {
+ submit_update => 1,
+ rznvy => 'unregistered@example.com',
+ update => 'Update from an unregistered user',
+ add_alert => undef,
+ },
+ changes => {},
+ },
+ {
+ desc => 'submit an update for a non registered user and sign up',
+ initial_values => {
+ name => '',
+ rznvy => '',
+ may_show_name => undef,
+ add_alert => 1,
+ photo => '',
+ update => '',
+ fixed => undef,
+ },
+ form_values => {
+ submit_update => 1,
+ rznvy => 'unregistered@example.com',
+ update => 'update from an unregistered user',
+ add_alert => 1,
+ },
+ changes => {
+ update => 'Update from an unregistered user',
+ },
+ }
+) {
+ subtest $test->{desc} => sub {
+ $mech->log_out_ok();
+ $mech->clear_emails_ok();
- $mech->get_ok("/report/$report_id");
+ $mech->get_ok("/report/$report_id");
- my $values = $mech->visible_form_values('updateForm');
-
- is_deeply $values,
- {
- name => '',
- rznvy => '',
- may_show_name => undef,
- add_alert => 1,
- photo => '',
- update => '',
- fixed => undef,
- },
- 'initial form values';
-
- $mech->submit_form_ok(
- {
- with_fields => {
- submit_update => 1,
- rznvy => 'unregistered@example.com',
- update => 'update from an unregistered user',
- add_alert => undef,
+ my $values = $mech->visible_form_values('updateForm');
+
+ is_deeply $values, $test->{initial_values}, 'initial form values';
+
+ $mech->submit_form_ok(
+ {
+ with_fields => $test->{form_values}
+ },
+ 'submit update'
+ );
+
+ $mech->content_contains('Nearly Done! Now check your email');
+
+ my $email = $mech->get_email;
+ ok $email, "got an email";
+ like $email->body, qr/confirm the update you/i, "Correct email text";
+
+ my ( $url, $url_token ) = $email->body =~ m{(http://\S+/C/)(\S+)};
+ ok $url, "extracted confirm url '$url'";
+
+ my $token = FixMyStreet::App->model('DB::Token')->find(
+ {
+ token => $url_token,
+ scope => 'comment'
}
- },
- 'submit update'
- );
+ );
+ ok $token, 'Token found in database';
- $mech->content_contains('Nearly Done! Now check your email');
+ my $update_id = $token->data->{id};
+ my $add_alerts = $token->data->{add_alert};
+ my $update =
+ FixMyStreet::App->model('DB::Comment')->find( { id => $update_id } );
- my $email = $mech->get_email;
- ok $email, "got an email";
- like $email->body, qr/confirm the update you/i, "Correct email text";
+ my $details = {
+ %{ $test->{form_values} },
+ %{ $test->{changes} }
+ };
- my ( $url, $url_token ) = $email->body =~ m{(http://\S+/C/)(\S+)};
- ok $url, "extracted confirm url '$url'";
+ ok $update, 'found update in database';
+ is $update->state, 'unconfirmed', 'update unconfirmed';
+ is $update->user->email, $details->{rznvy}, 'update email';
+ is $update->text, $details->{update}, 'update text';
+ is $add_alerts, $details->{add_alert} ? 1 : 0, 'do not sign up for alerts';
- my $token = FixMyStreet::App->model('DB::Token')->find(
- {
- token => $url_token,
- scope => 'comment'
- }
- );
- ok $token, 'Token found in database';
+ $mech->get_ok( $url . $url_token );
+ $mech->content_contains("/report/$report_id#$update_id");
- my $update_id = $token->data->{id};
- my $add_alerts = $token->data->{add_alert};
- my $update =
- FixMyStreet::App->model('DB::Comment')->find( { id => $update_id } );
+ my $unreg_user = FixMyStreet::App->model( 'DB::User' )->find( { email => $details->{rznvy} } );
- ok $update, 'found update in database';
- is $update->state, 'unconfirmed', 'update unconfirmed';
- is $update->user->email, 'unregistered@example.com', 'update email';
- is $update->text, 'Update from an unregistered user', 'update text';
- is $add_alerts, 0, 'do not sign up for alerts';
+ ok $unreg_user, 'found user';
- $mech->get_ok( $url . $url_token );
- $mech->content_contains("/report/$report_id#$update_id");
+ my $alert = FixMyStreet::App->model( 'DB::Alert' )->find(
+ { user => $unreg_user, alert_type => 'new_updates', confirmed => 1, }
+ );
- $update->discard_changes;
+ ok $details->{add_alert} ? defined( $alert ) : !defined( $alert ), 'sign up for alerts';
- is $update->state, 'confirmed', 'update confirmed';
-};
+ $update->discard_changes;
+
+ is $update->state, 'confirmed', 'update confirmed';
+ $mech->delete_user( $unreg_user );
+ };
+}
for my $test (
{
@@ -519,7 +563,7 @@ for my $test (
my $alert =
FixMyStreet::App->model('DB::Alert')
- ->find( { user => $user, alert_type => 'new_updates' } );
+ ->find( { user => $user, alert_type => 'new_updates', confirmed => 1 } );
ok $test->{alert} ? $alert : !$alert, 'not signed up for alerts';
};