diff options
author | Struan Donald <struan@exo.org.uk> | 2011-05-11 16:48:51 +0100 |
---|---|---|
committer | Struan Donald <struan@exo.org.uk> | 2011-05-11 16:48:51 +0100 |
commit | 6cd84f2e112b0f388266d6c64b634f31bafb264d (patch) | |
tree | c7063b861f892e9799ec5363604077b8802212fa | |
parent | 148d4edd7689f6df3b56678f6c9eb620cc219cd6 (diff) |
Automatically fill in email address of logged in user
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Alert.pm | 6 | ||||
-rw-r--r-- | t/app/controller/alert_new.t | 85 |
2 files changed, 73 insertions, 18 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Alert.pm b/perllib/FixMyStreet/App/Controller/Alert.pm index 595f6d252..28b338563 100644 --- a/perllib/FixMyStreet/App/Controller/Alert.pm +++ b/perllib/FixMyStreet/App/Controller/Alert.pm @@ -69,6 +69,10 @@ sub list : Path('list') : Args(0) { $c->stash->{rznvy} = $c->req->param('rznvy'); $c->stash->{selected_feed} = $c->req->param('feed'); + if ( $c->user ) { + $c->stash->{rznvy} ||= $c->user->email; + } + # my ($q, @errors) = @_; # my @vars = qw(pc rznvy lat lon); # my %input = map { $_ => scalar $q->param($_) } @vars; @@ -245,7 +249,7 @@ sub subscribe_email : Private { my $email = $c->req->param('rznvy'); $c->stash->{email} = $email; - $c->forward( 'process_user' ); + $c->forward('process_user'); my $alert; diff --git a/t/app/controller/alert_new.t b/t/app/controller/alert_new.t index bc4b11230..c44d14a30 100644 --- a/t/app/controller/alert_new.t +++ b/t/app/controller/alert_new.t @@ -53,26 +53,22 @@ foreach my $test ( my $type = $test->{type} . '_problems'; - my $user = FixMyStreet::App->model('DB::User')->find( - { - email => $test->{email} - } - ); + my $user = + FixMyStreet::App->model('DB::User') + ->find( { email => $test->{email} } ); # we don't want an alert my $alert; - if ( $user ) { - $mech->delete_user( $user ); + if ($user) { + $mech->delete_user($user); } $mech->get_ok( $test->{uri} ); $mech->content_contains( $test->{content} ); - $user = FixMyStreet::App->model('DB::User')->find( - { - email => $test->{email} - } - ); + $user = + FixMyStreet::App->model('DB::User') + ->find( { email => $test->{email} } ); ok $user, 'user created for alert'; @@ -147,18 +143,66 @@ foreach my $test ( '/alert/subscribe?type=local&rznvy=test-new@example.com&feed=area:1000:A_Location', param1 => 1000 } -) { + ) +{ subtest "use existing user in a alert" => sub { my $type = $test->{type} . '_problems'; - my $user = FixMyStreet::App->model('DB::User')->find_or_create( + my $user = + FixMyStreet::App->model('DB::User') + ->find_or_create( { email => $test->{email} } ); + + my $alert; + if ($user) { + $alert = FixMyStreet::App->model('DB::Alert')->find( + { + user => $user, + alert_type => $type + } + ); + + # clear existing data so we can be sure we're creating it + $alert->delete() if $alert; + } + + $mech->get_ok( $test->{uri} ); + + $alert = FixMyStreet::App->model('DB::Alert')->find( { - email => $test->{email} + user => $user, + alert_type => $type, + parameter => $test->{param1}, + parameter2 => $test->{param2}, + confirmed => 0, } ); + ok $alert, 'New alert created with existing user'; + }; +} + +foreach my $test ( + { + email => 'test-login@example.com', + type => 'council', + content => 'your alert will not be activated', + email_text => 'confirm the alert', + param1 => 2651, + param2 => 2651, + } + ) +{ + subtest "use logged in user in an alert" => sub { + my $type = $test->{type} . '_problems'; + + my $user = + FixMyStreet::App->model('DB::User') + ->find_or_create( { email => $test->{email} } ); + + $mech->log_in_ok( $test->{email} ); + my $alert; - if ( $user ) { + if ($user) { $alert = FixMyStreet::App->model('DB::Alert')->find( { user => $user, @@ -170,7 +214,14 @@ foreach my $test ( $alert->delete() if $alert; } - $mech->get_ok( $test->{uri} ); + $mech->get_ok('/alert/list?pc=EH991SP'); + + my $form_values = $mech->visible_form_values(); + ok $form_values->{rznvy} eq $test->{email}, + 'auto filled in correct email'; + + $mech->set_visible( [ radio => 'council:2651:City_of_Edinburgh' ] ); + $mech->click('alert'); $alert = FixMyStreet::App->model('DB::Alert')->find( { |