Toggle navigation
Toggle navigation
This project
Loading...
Sign in
Зуев Егор
/
wiki.dev
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
Authored by
Dan Brown
2015-09-21 20:54:11 +0100
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
Commit
1b736ac0457eb5865bfc9ca33ce0681a0e8ab7de
1b736ac0
1 parent
e8dd7fda
Added tests for confirmed registration
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
96 additions
and
12 deletions
app/Http/Controllers/Auth/AuthController.php
app/Http/routes.php
app/User.php
config/mail.php
phpunit.xml
resources/views/users/edit.blade.php
tests/AuthTest.php
app/Http/Controllers/Auth/AuthController.php
View file @
1b736ac
...
...
@@ -171,6 +171,18 @@ class AuthController extends Controller
}
/**
* 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
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
...
...
app/Http/routes.php
View file @
1b736ac
...
...
@@ -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'
);
...
...
app/User.php
View file @
1b736ac
...
...
@@ -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
;
...
...
config/mail.php
View file @
1b736ac
...
...
@@ -119,6 +119,6 @@ return [
|
*/
'pretend'
=>
false
,
'pretend'
=>
env
(
'MAIL_PRETEND'
,
false
)
,
];
...
...
phpunit.xml
View file @
1b736ac
...
...
@@ -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>
...
...
resources/views/users/edit.blade.php
View file @
1b736ac
...
...
@@ -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>
...
...
tests/AuthTest.php
View file @
1b736ac
<?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
]);
}
p
rivate
function
setSettings
(
$settingsArray
)
p
ublic
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'
);
}
}
...
...
Please
register
or
sign in
to post a comment