feat(tests): registration tests
This commit is contained in:
parent
7c30dd459a
commit
a9baa6c526
6 changed files with 114 additions and 76 deletions
|
@ -21,8 +21,12 @@
|
|||
<env name="APP_ENV" value="testing"/>
|
||||
<env name="BCRYPT_ROUNDS" value="4"/>
|
||||
<env name="CACHE_DRIVER" value="array"/>
|
||||
<!-- <env name="DB_CONNECTION" value="sqlite"/> -->
|
||||
<!-- <env name="DB_DATABASE" value=":memory:"/> -->
|
||||
<env name="DB_CONNECTION" value="pgsql"/>
|
||||
<env name="DB_HOST" value="127.0.0.1"/>
|
||||
<env name="DB_PORT" value="5432"/>
|
||||
<env name="DB_DATABASE" value="libretime"/>
|
||||
<env name="DB_USERNAME" value="libretime"/>
|
||||
<env name="DB_PASSWORD" value="libretime"/>
|
||||
<env name="MAIL_MAILER" value="array"/>
|
||||
<env name="PULSE_ENABLED" value="false"/>
|
||||
<env name="QUEUE_CONNECTION" value="sync"/>
|
||||
|
|
|
@ -1,15 +1,22 @@
|
|||
<?php
|
||||
|
||||
use App\Http\Controllers\Auth\RegistrationController;
|
||||
use App\Models\User;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Laravel\Fortify\Contracts\CreatesNewUsers;
|
||||
use Mockery;
|
||||
|
||||
use function Pest\Laravel\postJson;
|
||||
|
||||
uses(RefreshDatabase::class);
|
||||
it('should return unauthenticated error', function () {
|
||||
$response = postJson(route('/register'), [
|
||||
'username' => 'unauthenticatedError',
|
||||
'password' => 'password',
|
||||
'password_confirmation' => 'password',
|
||||
'email' => 'unauthenticatedError@unauthenticatedError.test',
|
||||
'type' => 'dj',
|
||||
]);
|
||||
|
||||
$response->assertStatus(401)
|
||||
->assertJsonValidationErrors(['username' => 'The username field is required.']);
|
||||
});
|
||||
|
||||
it('should return an error if username is missing', function () {
|
||||
$response = postJson(route('register'), [
|
||||
|
|
|
@ -14,6 +14,7 @@ use Tests\TestCase;
|
|||
*/
|
||||
|
||||
uses(TestCase::class)->in('Feature');
|
||||
uses(TestCase::class)->in('Unit');
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
|
@ -1,59 +1,94 @@
|
|||
<?php
|
||||
|
||||
use App\Actions\Fortify\CreateNewUser;
|
||||
use App\Actions\Fortify\LoginUser;
|
||||
use function Pest\Laravel\post;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
describe('LoginUser Action', function () {
|
||||
function sendLoginInfos(array $userInfo)
|
||||
{
|
||||
$loginAction = new LoginUser();
|
||||
$request = Request::create(
|
||||
'/register',
|
||||
'POST',
|
||||
['username' => $userInfo['username'], 'password' => $userInfo['password']]
|
||||
);
|
||||
|
||||
return $loginAction->login($request);
|
||||
}
|
||||
|
||||
it('logs in a user with MD5 password', function () {
|
||||
$userInfo = [
|
||||
'username' => 'admin',
|
||||
'password' => 'admin',
|
||||
];
|
||||
$result = sendLoginInfos($userInfo);
|
||||
|
||||
expect($result)->toBeInstanceOf(User::class);
|
||||
});
|
||||
|
||||
it(
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
'logs in a normal user with hashed password',
|
||||
function () {
|
||||
$userInfo = [
|
||||
'username' => 'authenticationtestHashedPass',
|
||||
'password' => 'authenticationtestHashedPass',
|
||||
'password_confirmation' => 'authenticationtestHashedPass',
|
||||
'email' => 'authenticationtestHashedPass@testestest.testestest',
|
||||
'type' => 'dj'
|
||||
];
|
||||
|
||||
$action = new CreateNewUser();
|
||||
$action->create($userInfo);
|
||||
|
||||
|
||||
it('logs in a user with MD5 password', function () {
|
||||
$userInfo = [
|
||||
'username' => 'testuser',
|
||||
'password' => 'password',
|
||||
];
|
||||
$result = sendLoginInfos($userInfo);
|
||||
|
||||
$response = post(
|
||||
'/login',
|
||||
['username' => $userInfo['username'], 'password' => $userInfo['password']],
|
||||
['Accept' => 'application/json']
|
||||
expect($result)->toBeInstanceOf(User::class);
|
||||
User::where('login', $userInfo['username'])->delete();
|
||||
}
|
||||
);
|
||||
|
||||
$response->assertStatus(200);
|
||||
it('returns null for non-existent user', function () {
|
||||
$userInfo = [
|
||||
'username' => 'nonexistantuser',
|
||||
'password' => 'testestest',
|
||||
];
|
||||
$result = sendLoginInfos($userInfo);
|
||||
|
||||
$data = $response->json()['data'];
|
||||
// Assert
|
||||
expect($result)->toBeNull();
|
||||
});
|
||||
|
||||
expect($data['username'])->toBe($userInfo['password']);
|
||||
});
|
||||
|
||||
it('logs in a normal user with hashed password', function () {
|
||||
// Arrange
|
||||
$request = (object)['username' => 'testestest', 'password' => 'testestest'];
|
||||
|
||||
// Act
|
||||
$result = LoginUser::login($request);
|
||||
|
||||
// Assert
|
||||
expect($result)->toBe($this->user);
|
||||
});
|
||||
|
||||
it('returns null for non-existent user', function () {
|
||||
// Arrange
|
||||
$request = (object)['username' => 'nonexistent', 'password' => 'password'];
|
||||
$this->userMock->shouldReceive('where->first')->andReturn(null);
|
||||
|
||||
// Act
|
||||
$result = LoginUser::login($request);
|
||||
|
||||
// Assert
|
||||
expect($result)->toBeNull();
|
||||
});
|
||||
|
||||
it('returns password error for existent user', function () {
|
||||
// Arrange
|
||||
$request = (object)['username' => 'testestest', 'password' => 'balaclava'];
|
||||
$this->userMock->shouldReceive('where->first')->andReturn(null);
|
||||
|
||||
// Act
|
||||
$result = LoginUser::login($request);
|
||||
|
||||
// Assert
|
||||
expect($result)->toBeNull();
|
||||
it(
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
'returns password error for existent user',
|
||||
function () {
|
||||
$userInfo = [
|
||||
'username' => 'testestest2',
|
||||
'password' => 'testestest2',
|
||||
'password_confirmation' => 'testestest2',
|
||||
'email' => 'testestest2@testestest.testestest',
|
||||
'type' => 'dj'
|
||||
];
|
||||
|
||||
try {
|
||||
$action = new CreateNewUser();
|
||||
$action->create($userInfo);
|
||||
$userInfo['password'] = 'wrongpass';
|
||||
$result = sendLoginInfos($userInfo);
|
||||
expect($result)->toBeNull();
|
||||
} catch (Exception $e) {
|
||||
throw new Exception($e);
|
||||
} finally {
|
||||
User::where('login', $userInfo['username'])->delete();
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
|
|
|
@ -3,12 +3,11 @@
|
|||
use App\Actions\Fortify\CreateNewUser;
|
||||
use App\Models\User;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Tests\TestCase;
|
||||
|
||||
uses(TestCase::class);
|
||||
|
||||
function createUserTest(CreateNewUser $action, array $userInfo, $error_message)
|
||||
function createUserTest(array $userInfo, $error_message)
|
||||
{
|
||||
$action = new CreateNewUser();
|
||||
try {
|
||||
$action->create($userInfo);
|
||||
expect(true)->toBeFalse(
|
||||
|
@ -21,13 +20,14 @@ function createUserTest(CreateNewUser $action, array $userInfo, $error_message)
|
|||
}
|
||||
|
||||
describe('CreateNewUser Action', function () {
|
||||
it('should create a new user successfully', function () {
|
||||
it('should create a new dj user successfully', function () {
|
||||
$action = new CreateNewUser();
|
||||
$userInfo = [
|
||||
'username' => 'testuser',
|
||||
'password' => 'password',
|
||||
'password_confirmation' => 'password',
|
||||
'email' => 'email',
|
||||
'type' => 'dj',
|
||||
];
|
||||
|
||||
$user = $action->create($userInfo);
|
||||
|
@ -42,34 +42,26 @@ describe('CreateNewUser Action', function () {
|
|||
});
|
||||
|
||||
it('should fail validation if username is missing', function () {
|
||||
$action = new CreateNewUser();
|
||||
$userInfo = [
|
||||
'password' => 'password',
|
||||
'password_confirmation' => 'password',
|
||||
];
|
||||
|
||||
$errorMessage = 'Test failed because no exception was thrown when creating a user without an username.';
|
||||
createUserTest($action, $userInfo, $errorMessage);
|
||||
createUserTest($userInfo, $errorMessage);
|
||||
});
|
||||
|
||||
it('should fail validation if email is missing', function () {
|
||||
$action = new CreateNewUser();
|
||||
$userInfo = [
|
||||
$userInfo = [
|
||||
'username' => 'blabla',
|
||||
'password' => 'password',
|
||||
'password_confirmation' => 'password',
|
||||
];
|
||||
$errorMessage = 'Test failed because no exception was thrown when creating a user without an email.';
|
||||
createUserTest($action, $userInfo, $errorMessage);
|
||||
createUserTest($userInfo, $errorMessage);
|
||||
});
|
||||
|
||||
it('should fail validation if username is not unique', function () {
|
||||
User::create([
|
||||
'login' => 'existinguser',
|
||||
'pass' => Hash::make('password'),
|
||||
]);
|
||||
|
||||
$action = new CreateNewUser();
|
||||
$userInfo = [
|
||||
'username' => 'existinguser',
|
||||
'password' => 'password',
|
||||
|
@ -77,11 +69,10 @@ describe('CreateNewUser Action', function () {
|
|||
];
|
||||
|
||||
$errorMessage = 'Test failed because no exception was thrown when creating a user with a duplicate username.';
|
||||
createUserTest($action, $userInfo, $errorMessage);
|
||||
createUserTest($userInfo, $errorMessage);
|
||||
});
|
||||
|
||||
it('should fail validation if password does not meet complexity rules', function () {
|
||||
$action = new CreateNewUser();
|
||||
$userInfo = [
|
||||
'username' => 'testuser',
|
||||
'password' => 'weak', // Does not meet default password rules
|
||||
|
@ -89,12 +80,10 @@ describe('CreateNewUser Action', function () {
|
|||
];
|
||||
|
||||
$errorMessage = 'Test failed because no exception was thrown when validating passwd.';
|
||||
createUserTest($action, $userInfo, $errorMessage);
|
||||
|
||||
createUserTest($userInfo, $errorMessage);
|
||||
});
|
||||
|
||||
it('should return an exception on validation failure', function () {
|
||||
$action = new CreateNewUser();
|
||||
$userInfo = [
|
||||
'username' => null,
|
||||
'password' => 'password',
|
||||
|
@ -102,6 +91,6 @@ describe('CreateNewUser Action', function () {
|
|||
];
|
||||
|
||||
$errorMessage = 'Test failed because no exception was thrown when validating passwd.';
|
||||
createUserTest($action, $userInfo, $errorMessage);
|
||||
createUserTest($userInfo, $errorMessage);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
<?php
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
test('that true is true', function () {
|
||||
$this->assertNotNull(DB::connection()->getPdo());
|
||||
expect(true)->toBeTrue();
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue