mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-11-22 10:54:07 +08: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');
|
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.
|
* Confirms an email via a token and logs the user into the system.
|
||||||
* @param $token
|
* @param $token
|
||||||
|
|
|
@ -94,6 +94,7 @@ Route::get('/register/confirm', 'Auth\AuthController@getRegisterConfirmation');
|
||||||
Route::get('/register/confirm/awaiting', 'Auth\AuthController@showAwaitingConfirmation');
|
Route::get('/register/confirm/awaiting', 'Auth\AuthController@showAwaitingConfirmation');
|
||||||
Route::post('/register/confirm/resend', 'Auth\AuthController@resendConfirmation');
|
Route::post('/register/confirm/resend', 'Auth\AuthController@resendConfirmation');
|
||||||
Route::get('/register/confirm/{token}', 'Auth\AuthController@confirmEmail');
|
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::get('/register/service/{socialDriver}', 'Auth\AuthController@socialRegister');
|
||||||
Route::post('/register', 'Auth\AuthController@postRegister');
|
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';
|
return '//www.gravatar.com/avatar/' . $emailHash . '?s=' . $size . '&d=identicon';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the url for editing this user.
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
public function getEditUrl()
|
public function getEditUrl()
|
||||||
{
|
{
|
||||||
return '/users/' . $this->id;
|
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="SESSION_DRIVER" value="array"/>
|
||||||
<env name="QUEUE_DRIVER" value="sync"/>
|
<env name="QUEUE_DRIVER" value="sync"/>
|
||||||
<env name="DB_CONNECTION" value="mysql_testing"/>
|
<env name="DB_CONNECTION" value="mysql_testing"/>
|
||||||
|
<env name="MAIL_PRETEND" value="true"/>
|
||||||
</php>
|
</php>
|
||||||
</phpunit>
|
</phpunit>
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
|
|
||||||
<hr class="margin-top large">
|
<hr class="margin-top large">
|
||||||
|
|
||||||
@if($currentUser->id === $user->id)
|
@if($currentUser->id === $user->id && count($activeSocialDrivers) > 0)
|
||||||
<h3>Social Accounts</h3>
|
<h3>Social Accounts</h3>
|
||||||
<p class="text-muted">
|
<p class="text-muted">
|
||||||
Here you can connect your other accounts for quicker and easier login. <br>
|
Here you can connect your other accounts for quicker and easier login. <br>
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use BookStack\EmailConfirmation;
|
||||||
|
|
||||||
class AuthTest extends TestCase
|
class AuthTest extends TestCase
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -12,10 +14,9 @@ class AuthTest extends TestCase
|
||||||
public function testLogin()
|
public function testLogin()
|
||||||
{
|
{
|
||||||
$this->visit('/')
|
$this->visit('/')
|
||||||
->seePageIs('/login')
|
->seePageIs('/login');
|
||||||
->type('admin@admin.com', '#email')
|
|
||||||
->type('password', '#password')
|
$this->login('admin@admin.com', 'password')
|
||||||
->press('Sign In')
|
|
||||||
->seePageIs('/')
|
->seePageIs('/')
|
||||||
->see('BookStack');
|
->see('BookStack');
|
||||||
}
|
}
|
||||||
|
@ -41,9 +42,11 @@ class AuthTest extends TestCase
|
||||||
|
|
||||||
public function testNormalRegistration()
|
public function testNormalRegistration()
|
||||||
{
|
{
|
||||||
|
// Set settings and get user instance
|
||||||
$this->setSettings(['registration-enabled' => 'true']);
|
$this->setSettings(['registration-enabled' => 'true']);
|
||||||
$user = factory(\BookStack\User::class)->make();
|
$user = factory(\BookStack\User::class)->make();
|
||||||
|
|
||||||
|
// Test form and ensure user is created
|
||||||
$this->visit('/register')
|
$this->visit('/register')
|
||||||
->see('Sign Up')
|
->see('Sign Up')
|
||||||
->type($user->name, '#name')
|
->type($user->name, '#name')
|
||||||
|
@ -51,15 +54,52 @@ class AuthTest extends TestCase
|
||||||
->type($user->password, '#password')
|
->type($user->password, '#password')
|
||||||
->press('Create Account')
|
->press('Create Account')
|
||||||
->seePageIs('/')
|
->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');
|
// Set settings and get user instance
|
||||||
foreach($settingsArray as $key => $value) {
|
$this->setSettings(['registration-enabled' => 'true', 'registration-confirmation' => 'true']);
|
||||||
$settings->put($key, $value);
|
$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()
|
public function testLogout()
|
||||||
|
@ -71,4 +111,30 @@ class AuthTest extends TestCase
|
||||||
->visit('/')
|
->visit('/')
|
||||||
->seePageIs('/login');
|
->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