aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Somerville <matthew@mysociety.org>2012-01-20 11:17:30 +0000
committerMatthew Somerville <matthew@mysociety.org>2012-01-20 11:17:30 +0000
commit3b05a634896ee38caf375f7c587ec32e1fb947da (patch)
tree6c54b153be9914c260b3d4e34420e5ac03c71f7d
parentce98919c502c6e34a5469b0ae75746011fbcb7b3 (diff)
If password field left blank when reporting/updating, ignore that for password setting.
This is so if someone temporarily forgets their password, and uses email confirmation to confirm without setting a new password, their old password isn't lost.
-rw-r--r--perllib/FixMyStreet/App/Controller/Report/New.pm3
-rw-r--r--perllib/FixMyStreet/App/Controller/Report/Update.pm3
-rw-r--r--t/app/controller/report_new.t37
3 files changed, 32 insertions, 11 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm
index e982d6a4c..5138e3a19 100644
--- a/perllib/FixMyStreet/App/Controller/Report/New.pm
+++ b/perllib/FixMyStreet/App/Controller/Report/New.pm
@@ -660,7 +660,8 @@ sub process_user : Private {
# set the user's name, phone, and password
$report->user->name( Utils::trim_text( $params{name} ) ) if $params{name};
$report->user->phone( Utils::trim_text( $params{phone} ) );
- $report->user->password( Utils::trim_text( $params{password_register} ) );
+ $report->user->password( Utils::trim_text( $params{password_register} ) )
+ if $params{password_register};
$report->name( Utils::trim_text( $params{name} ) );
return 1;
diff --git a/perllib/FixMyStreet/App/Controller/Report/Update.pm b/perllib/FixMyStreet/App/Controller/Report/Update.pm
index c67ca4d1f..29933e2f6 100644
--- a/perllib/FixMyStreet/App/Controller/Report/Update.pm
+++ b/perllib/FixMyStreet/App/Controller/Report/Update.pm
@@ -134,7 +134,8 @@ sub process_user : Private {
$update->user->name( Utils::trim_text( $params{name} ) )
if $params{name};
- $update->user->password( Utils::trim_text( $params{password_register} ) );
+ $update->user->password( Utils::trim_text( $params{password_register} ) )
+ if $params{password_register};
return 1;
}
diff --git a/t/app/controller/report_new.t b/t/app/controller/report_new.t
index 15237e041..a4e1c99b4 100644
--- a/t/app/controller/report_new.t
+++ b/t/app/controller/report_new.t
@@ -313,15 +313,24 @@ foreach my $test (
};
}
+my $first_user;
foreach my $test (
{
- desc => 'does not have an account',
- user => 0,
+ desc => 'does not have an account, does not set a password',
+ user => 0, password => 0,
},
{
- desc => 'does have an account and is not signed in; does not sign in',
- user => 1,
- }
+ desc => 'does not have an account, sets a password',
+ user => 0, password => 1,
+ },
+ {
+ desc => 'does have an account and is not signed in; does not sign in, does not set a password',
+ user => 1, password => 0,
+ },
+ {
+ desc => 'does have an account and is not signed in; does not sign in, sets a password',
+ user => 1, password => 1,
+ },
) {
subtest "test report creation for a user who " . $test->{desc} => sub {
$mech->log_out_ok;
@@ -336,9 +345,13 @@ foreach my $test (
$user->name( 'Old Name' );
$user->password( 'old_password' );
$user->update;
- } else {
+ } elsif (!$first_user) {
ok !FixMyStreet::App->model('DB::User')->find( { email => $test_email } ),
"test user does not exist";
+ $first_user = 1;
+ } else {
+ # Not first pass, so will exist, but want no user to start, so delete it.
+ $mech->delete_user($test_email);
}
# submit initial pc form
@@ -362,7 +375,7 @@ foreach my $test (
email => 'test-1@example.com',
phone => '07903 123 456',
category => 'Street lighting',
- password_register => 'secret',
+ password_register => $test->{password} ? 'secret' : '',
}
},
"submit good details"
@@ -410,7 +423,13 @@ foreach my $test (
$mech->get_ok( '/report/' . $report->id );
is $report->name, 'Joe Bloggs', 'name updated correctly';
- ok $report->user->check_password('secret'), 'password updated correctly';
+ if ($test->{password}) {
+ ok $report->user->check_password('secret'), 'password updated correctly';
+ } elsif ($test->{user}) {
+ ok $report->user->check_password('old_password'), 'password unchanged, as no new one given';
+ } else {
+ is $report->user->password, '', 'password still not set, as none given';
+ }
# check that the reporter has an alert
my $alert = FixMyStreet::App->model('DB::Alert')->find( {
@@ -425,7 +444,7 @@ foreach my $test (
# cleanup
$mech->delete_user($user)
- if $test->{user};
+ if $test->{user} && $test->{password};
};
}