mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-07-30 04:23:11 +03:00
Added tests for confirmed registration
This commit is contained in:
@ -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');
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user