mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-10-29 23:22:34 +01:00
Added tests for confirmed registration
This commit is contained in:
parent
e8dd7fda1f
commit
1b736ac045
@ -170,6 +170,18 @@ class AuthController extends Controller
|
||||
return view('auth/register-confirm');
|
||||
}
|
||||
|
||||
/**
|
||||
* View the confirmation email as a standard web page.
|
||||
* @param $token
|
||||
* @return \Illuminate\View\View
|
||||
* @throws UserRegistrationException
|
||||
*/
|
||||
public function viewConfirmEmail($token)
|
||||
{
|
||||
$confirmation = $this->emailConfirmationService->getEmailConfirmationFromToken($token);
|
||||
return view('emails/email-confirmation', ['token' => $confirmation->token]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Confirms an email via a token and logs the user into the system.
|
||||
* @param $token
|
||||
|
@ -94,6 +94,7 @@ Route::get('/register/confirm', 'Auth\AuthController@getRegisterConfirmation');
|
||||
Route::get('/register/confirm/awaiting', 'Auth\AuthController@showAwaitingConfirmation');
|
||||
Route::post('/register/confirm/resend', 'Auth\AuthController@resendConfirmation');
|
||||
Route::get('/register/confirm/{token}', 'Auth\AuthController@confirmEmail');
|
||||
Route::get('/register/confirm/{token}/email', 'Auth\AuthController@viewConfirmEmail');
|
||||
Route::get('/register/service/{socialDriver}', 'Auth\AuthController@socialRegister');
|
||||
Route::post('/register', 'Auth\AuthController@postRegister');
|
||||
|
||||
|
@ -134,6 +134,10 @@ class User extends Model implements AuthenticatableContract, CanResetPasswordCon
|
||||
return '//www.gravatar.com/avatar/' . $emailHash . '?s=' . $size . '&d=identicon';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the url for editing this user.
|
||||
* @return string
|
||||
*/
|
||||
public function getEditUrl()
|
||||
{
|
||||
return '/users/' . $this->id;
|
||||
|
@ -119,6 +119,6 @@ return [
|
||||
|
|
||||
*/
|
||||
|
||||
'pretend' => false,
|
||||
'pretend' => env('MAIL_PRETEND', false),
|
||||
|
||||
];
|
||||
|
@ -25,5 +25,6 @@
|
||||
<env name="SESSION_DRIVER" value="array"/>
|
||||
<env name="QUEUE_DRIVER" value="sync"/>
|
||||
<env name="DB_CONNECTION" value="mysql_testing"/>
|
||||
<env name="MAIL_PRETEND" value="true"/>
|
||||
</php>
|
||||
</phpunit>
|
||||
|
@ -42,7 +42,7 @@
|
||||
|
||||
<hr class="margin-top large">
|
||||
|
||||
@if($currentUser->id === $user->id)
|
||||
@if($currentUser->id === $user->id && count($activeSocialDrivers) > 0)
|
||||
<h3>Social Accounts</h3>
|
||||
<p class="text-muted">
|
||||
Here you can connect your other accounts for quicker and easier login. <br>
|
||||
|
@ -1,5 +1,7 @@
|
||||
<?php
|
||||
|
||||
use BookStack\EmailConfirmation;
|
||||
|
||||
class AuthTest extends TestCase
|
||||
{
|
||||
|
||||
@ -12,10 +14,9 @@ class AuthTest extends TestCase
|
||||
public function testLogin()
|
||||
{
|
||||
$this->visit('/')
|
||||
->seePageIs('/login')
|
||||
->type('admin@admin.com', '#email')
|
||||
->type('password', '#password')
|
||||
->press('Sign In')
|
||||
->seePageIs('/login');
|
||||
|
||||
$this->login('admin@admin.com', 'password')
|
||||
->seePageIs('/')
|
||||
->see('BookStack');
|
||||
}
|
||||
@ -41,9 +42,11 @@ class AuthTest extends TestCase
|
||||
|
||||
public function testNormalRegistration()
|
||||
{
|
||||
// Set settings and get user instance
|
||||
$this->setSettings(['registration-enabled' => 'true']);
|
||||
$user = factory(\BookStack\User::class)->make();
|
||||
|
||||
// Test form and ensure user is created
|
||||
$this->visit('/register')
|
||||
->see('Sign Up')
|
||||
->type($user->name, '#name')
|
||||
@ -51,15 +54,52 @@ class AuthTest extends TestCase
|
||||
->type($user->password, '#password')
|
||||
->press('Create Account')
|
||||
->seePageIs('/')
|
||||
->see($user->name);
|
||||
->see($user->name)
|
||||
->seeInDatabase('users', ['name' => $user->name, 'email' => $user->email]);
|
||||
}
|
||||
|
||||
private function setSettings($settingsArray)
|
||||
public function testConfirmedRegistration()
|
||||
{
|
||||
$settings = app('BookStack\Services\SettingService');
|
||||
foreach($settingsArray as $key => $value) {
|
||||
$settings->put($key, $value);
|
||||
}
|
||||
// Set settings and get user instance
|
||||
$this->setSettings(['registration-enabled' => 'true', 'registration-confirmation' => 'true']);
|
||||
$user = factory(\BookStack\User::class)->make();
|
||||
|
||||
// Mock Mailer to ensure mail is being sent
|
||||
$mockMailer = Mockery::mock('Illuminate\Contracts\Mail\Mailer');
|
||||
$mockMailer->shouldReceive('send')->with('emails/email-confirmation', Mockery::type('array'), Mockery::type('callable'))->twice();
|
||||
$this->app->instance('mailer', $mockMailer);
|
||||
|
||||
// Go through registration process
|
||||
$this->visit('/register')
|
||||
->see('Sign Up')
|
||||
->type($user->name, '#name')
|
||||
->type($user->email, '#email')
|
||||
->type($user->password, '#password')
|
||||
->press('Create Account')
|
||||
->seePageIs('/register/confirm')
|
||||
->seeInDatabase('users', ['name' => $user->name, 'email' => $user->email, 'email_confirmed' => false]);
|
||||
|
||||
// Test access and resend confirmation email
|
||||
$this->login($user->email, $user->password)
|
||||
->seePageIs('/register/confirm/awaiting')
|
||||
->see('Resend')
|
||||
->visit('/books')
|
||||
->seePageIs('/register/confirm/awaiting')
|
||||
->press('Resend Confirmation Email');
|
||||
|
||||
// Get confirmation
|
||||
$user = $user->where('email', '=', $user->email)->first();
|
||||
$emailConfirmation = EmailConfirmation::where('user_id', '=', $user->id)->first();
|
||||
|
||||
|
||||
// Check confirmation email button and confirmation activation.
|
||||
$this->visit('/register/confirm/' . $emailConfirmation->token . '/email')
|
||||
->see('Email Confirmation')
|
||||
->click('Confirm Email')
|
||||
->seePageIs('/')
|
||||
->see($user->name)
|
||||
->notSeeInDatabase('email_confirmations', ['token' => $emailConfirmation->token])
|
||||
->seeInDatabase('users', ['name' => $user->name, 'email' => $user->email, 'email_confirmed' => true]);
|
||||
}
|
||||
|
||||
public function testLogout()
|
||||
@ -71,4 +111,30 @@ class AuthTest extends TestCase
|
||||
->visit('/')
|
||||
->seePageIs('/login');
|
||||
}
|
||||
|
||||
/**
|
||||
* Quickly sets an array of settings.
|
||||
* @param $settingsArray
|
||||
*/
|
||||
private function setSettings($settingsArray)
|
||||
{
|
||||
$settings = app('BookStack\Services\SettingService');
|
||||
foreach ($settingsArray as $key => $value) {
|
||||
$settings->put($key, $value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform a login
|
||||
* @param string $email
|
||||
* @param string $password
|
||||
* @return $this
|
||||
*/
|
||||
private function login($email, $password)
|
||||
{
|
||||
return $this->visit('/login')
|
||||
->type($email, '#email')
|
||||
->type($password, '#password')
|
||||
->press('Sign In');
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user