From 7e96054dc2f4444a991a5213b4663ac660e2107b Mon Sep 17 00:00:00 2001 From: James Cole Date: Wed, 31 Dec 2014 00:57:12 +0100 Subject: [PATCH] Covered everything in the user controller except configuration controlled statements. --- app/controllers/UserController.php | 8 +-- app/database/seeds/DefaultUserSeeder.php | 2 + app/filters.php | 8 +++ app/lib/FireflyIII/Database/User/User.php | 3 +- .../FireflyIII/Shared/Mail/Registration.php | 22 ++++--- app/models/User.php | 2 +- app/routes.php | 4 +- app/views/user/remindme.blade.php | 2 +- tests/functional/UserControllerCest.php | 59 ++++++++++++++----- 9 files changed, 74 insertions(+), 36 deletions(-) diff --git a/app/controllers/UserController.php b/app/controllers/UserController.php index 4cf00ce1a1..00840fb375 100644 --- a/app/controllers/UserController.php +++ b/app/controllers/UserController.php @@ -33,7 +33,7 @@ class UserController extends BaseController Auth::logout(); Session::flush(); - return Redirect::route('index'); + return Redirect::route('login'); } /** @@ -67,9 +67,6 @@ class UserController extends BaseController */ public function postRegister() { - if (Config::get('auth.allow_register') !== true) { - return View::make('error')->with('message', 'Not possible'); - } /** @var \FireflyIII\Database\User\User $repository */ $repository = App::make('FireflyIII\Database\User\User'); @@ -136,9 +133,6 @@ class UserController extends BaseController */ public function register() { - if (Config::get('auth.allow_register') !== true) { - return View::make('error')->with('message', 'Not possible'); - } return View::make('user.register'); } diff --git a/app/database/seeds/DefaultUserSeeder.php b/app/database/seeds/DefaultUserSeeder.php index 4198ae4134..237d32e17c 100644 --- a/app/database/seeds/DefaultUserSeeder.php +++ b/app/database/seeds/DefaultUserSeeder.php @@ -13,6 +13,8 @@ class DefaultUserSeeder extends Seeder User::create(['email' => 'thegrumpydictator@gmail.com', 'password' => 'james', 'reset' => null, 'remember_token' => null]); User::create(['email' => 'acceptance@example.com', 'password' => 'acceptance', 'reset' => null, 'remember_token' => null]); User::create(['email' => 'functional@example.com', 'password' => 'functional', 'reset' => null, 'remember_token' => null]); + User::create(['email' => 'reset@example.com', 'password' => 'functional', 'reset' => 'okokokokokokokokokokokokokokokok', 'remember_token' => null]); + } } diff --git a/app/filters.php b/app/filters.php index 8a73c6b6da..27e9264440 100644 --- a/app/filters.php +++ b/app/filters.php @@ -94,3 +94,11 @@ Route::filter( } } ); + +Route::filter( + 'allow-register', function () { + if (Config::get('auth.allow_register') !== true) { + return View::make('error')->with('message', 'Not possible'); + } +} +); diff --git a/app/lib/FireflyIII/Database/User/User.php b/app/lib/FireflyIII/Database/User/User.php index e63bd8d57d..698eb6033b 100644 --- a/app/lib/FireflyIII/Database/User/User.php +++ b/app/lib/FireflyIII/Database/User/User.php @@ -43,7 +43,8 @@ class User $user->reset = \Str::random(32); $user->password = \Hash::make(\Str::random(12)); - if (!$user->save()) { + // validate user: + if (!$user->isValid()) { \Log::error('Invalid user with data: ' . isset($data['email']) ? $data['email'] : '(no email!)'); \Session::flash('error', 'Input invalid, please try again: ' . $user->getErrors()->first()); diff --git a/app/lib/FireflyIII/Shared/Mail/Registration.php b/app/lib/FireflyIII/Shared/Mail/Registration.php index 774deaf203..52747d561c 100644 --- a/app/lib/FireflyIII/Shared/Mail/Registration.php +++ b/app/lib/FireflyIII/Shared/Mail/Registration.php @@ -49,11 +49,14 @@ class Registration implements RegistrationInterface $email = $user->email; $data = ['reset' => $reset]; - \Mail::send( - ['emails.user.remindme-html', 'emails.user.remindme-text'], $data, function ($message) use ($email) { - $message->to($email, $email)->subject('Forgot your password?'); + try { + \Mail::send( + ['emails.user.remindme-html', 'emails.user.remindme-text'], $data, function ($message) use ($email) { + $message->to($email, $email)->subject('Forgot your password?'); + } + ); + } catch (Swift_RfcComplianceException $e) { } - ); } @@ -72,11 +75,14 @@ class Registration implements RegistrationInterface $email = $user->email; $data = ['reset' => $reset]; - \Mail::send( - ['emails.user.verify-html', 'emails.user.verify-text'], $data, function ($message) use ($email) { - $message->to($email, $email)->subject('Verify your e-mail address.'); + try { + \Mail::send( + ['emails.user.verify-html', 'emails.user.verify-text'], $data, function ($message) use ($email) { + $message->to($email, $email)->subject('Verify your e-mail address.'); + } + ); + } catch (Swift_RfcComplianceException $e) { } - ); } } \ No newline at end of file diff --git a/app/models/User.php b/app/models/User.php index f41750cda7..6bfaf45255 100644 --- a/app/models/User.php +++ b/app/models/User.php @@ -16,7 +16,7 @@ class User extends Eloquent implements UserInterface, RemindableInterface use UserTrait, RemindableTrait, ValidatingTrait; - public static $rules + protected $rules = [ 'email' => 'required|email|unique:users,email', 'password' => 'required|between:60,60', diff --git a/app/routes.php b/app/routes.php index bb410221aa..5542d28aa1 100644 --- a/app/routes.php +++ b/app/routes.php @@ -366,7 +366,7 @@ Route::group( ['before' => 'guest'], function () { // user controller Route::get('/login', ['uses' => 'UserController@login', 'as' => 'login']); - Route::get('/register', ['uses' => 'UserController@register', 'as' => 'register']); + Route::get('/register', ['uses' => 'UserController@register', 'as' => 'register','before' => 'allow-register']); Route::get('/reset/{reset}', ['uses' => 'UserController@reset', 'as' => 'reset']); Route::get('/remindme', ['uses' => 'UserController@remindme', 'as' => 'remindme']); @@ -380,7 +380,7 @@ Route::group( // user controller Route::post('/login', ['uses' => 'UserController@postLogin', 'as' => 'login.post']); - Route::post('/register', ['uses' => 'UserController@postRegister', 'as' => 'register.post']); + Route::post('/register', ['uses' => 'UserController@postRegister', 'as' => 'register.post','before' => 'allow-register']); Route::post('/remindme', ['uses' => 'UserController@postRemindme', 'as' => 'remindme.post']); } ); \ No newline at end of file diff --git a/app/views/user/remindme.blade.php b/app/views/user/remindme.blade.php index 5ee87b70e7..252a765351 100644 --- a/app/views/user/remindme.blade.php +++ b/app/views/user/remindme.blade.php @@ -7,7 +7,7 @@

Firefly III — Reset your password

- {{Form::open()}} + {{Form::open(['id' => 'remindme'])}}
diff --git a/tests/functional/UserControllerCest.php b/tests/functional/UserControllerCest.php index 06050c1bb6..62d58c9833 100644 --- a/tests/functional/UserControllerCest.php +++ b/tests/functional/UserControllerCest.php @@ -53,18 +53,11 @@ class UserControllerCest */ public function logout(FunctionalTester $I) { + $I->amLoggedAs(['email' => 'thegrumpydictator@gmail.com', 'password' => 'james']); $I->wantTo('logout'); - #$I->amOnPage('/logout'); - #$I->am - } - - /** - * @param FunctionalTester $I - */ - public function postLogin(FunctionalTester $I) - { - $I->wantTo('post login'); - $I->amOnRoute('login'); + $I->amOnPage('/'); + $I->click('Logout'); + $I->see('Firefly III — Sign In'); } /** @@ -72,14 +65,23 @@ class UserControllerCest */ public function postRegister(FunctionalTester $I) { - // @codingStandardsIgnoreStart $I->wantTo('post-register a new account'); $I->amOnPage('/register'); - $token = $I->grabValueFrom('input[name=_token]'); - $I->submitForm('#register', ['email' => 'noreply@gmail.com', '_token' => $token]); + $I->submitForm('#register', ['email' => 'noreply@gmail.com']); $I->see('Password sent!'); $I->seeRecord('users', ['email' => 'noreply@gmail.com']); - // @codingStandardsIgnoreEnd + } + + /** + * @param FunctionalTester $I + */ + public function postRegisterFail(FunctionalTester $I) + { + $I->wantTo('post-register a new account and fail'); + $I->amOnPage('/register'); + $I->submitForm('#register', ['email' => 'XXxxxxx']); + $I->see('Input invalid, please try again: The email must be a valid email address.'); + $I->dontseeRecord('users', ['email' => 'XXxxxxx']); } /** @@ -89,6 +91,19 @@ class UserControllerCest { $I->wantTo('get a password reminder'); $I->amOnRoute('remindme'); + $I->submitForm('#remindme', ['email' => 'functional@example.com']); + $I->see('You\'re about to get an e-mail.'); + } + + /** + * @param FunctionalTester $I + */ + public function postRemindmeFail(FunctionalTester $I) + { + $I->wantTo('get a password reminder and fail'); + $I->amOnRoute('remindme'); + $I->submitForm('#remindme', ['email' => 'abcdee']); + $I->see('No good!'); } /** @@ -109,6 +124,17 @@ class UserControllerCest { $I->wantTo('reminded of my password'); $I->amOnRoute('remindme'); + $I->see('Firefly III — Reset your password'); + } + + /** + * @param FunctionalTester $I + */ + public function resetFail(FunctionalTester $I) + { + $I->wantTo('reset my password and fail'); + $I->amOnPage('/reset/123'); + $I->see('Yo no hablo reset code!'); } /** @@ -117,7 +143,8 @@ class UserControllerCest public function reset(FunctionalTester $I) { $I->wantTo('reset my password'); - $I->amOnRoute('reset'); + $I->amOnPage('/reset/okokokokokokokokokokokokokokokok'); + $I->see('You\'re about to get an e-mail.'); } } \ No newline at end of file