mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-25 18:45:27 -06:00
Improve some test coverage.
This commit is contained in:
parent
d5e6d1c578
commit
48fa86cc54
@ -25,11 +25,11 @@ namespace FireflyIII\Handlers\Events;
|
|||||||
use FireflyIII\Events\RegisteredUser;
|
use FireflyIII\Events\RegisteredUser;
|
||||||
use FireflyIII\Events\RequestedNewPassword;
|
use FireflyIII\Events\RequestedNewPassword;
|
||||||
use FireflyIII\Events\UserChangedEmail;
|
use FireflyIII\Events\UserChangedEmail;
|
||||||
|
use FireflyIII\Factories\RoleFactory;
|
||||||
use FireflyIII\Mail\ConfirmEmailChangeMail;
|
use FireflyIII\Mail\ConfirmEmailChangeMail;
|
||||||
use FireflyIII\Mail\RegisteredUser as RegisteredUserMail;
|
use FireflyIII\Mail\RegisteredUser as RegisteredUserMail;
|
||||||
use FireflyIII\Mail\RequestedNewPassword as RequestedNewPasswordMail;
|
use FireflyIII\Mail\RequestedNewPassword as RequestedNewPasswordMail;
|
||||||
use FireflyIII\Mail\UndoEmailChangeMail;
|
use FireflyIII\Mail\UndoEmailChangeMail;
|
||||||
use FireflyIII\Models\Role;
|
|
||||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Auth\Events\Login;
|
use Illuminate\Auth\Events\Login;
|
||||||
@ -74,11 +74,12 @@ class UserEventHandler
|
|||||||
*/
|
*/
|
||||||
public function checkSingleUserIsAdmin(Login $event): bool
|
public function checkSingleUserIsAdmin(Login $event): bool
|
||||||
{
|
{
|
||||||
Log::debug('In checkSingleUserIsAdmin');
|
/** @var UserRepositoryInterface $repository */
|
||||||
|
$repository = app(UserRepositoryInterface::class);
|
||||||
|
|
||||||
/** @var User $user */
|
/** @var User $user */
|
||||||
$user = $event->user;
|
$user = $event->user;
|
||||||
$count = User::count();
|
$count = $repository->count();
|
||||||
|
|
||||||
if ($count > 1) {
|
if ($count > 1) {
|
||||||
// if more than one user, do nothing.
|
// if more than one user, do nothing.
|
||||||
@ -93,17 +94,16 @@ class UserEventHandler
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// user is the only user but does not have role "owner".
|
// user is the only user but does not have role "owner".
|
||||||
$role = Role::where('name', 'owner')->first();
|
$role = $repository->getRole('owner');
|
||||||
if (is_null($role)) {
|
if (is_null($role)) {
|
||||||
// create role, does not exist. Very strange situation so let's raise a big fuss about it.
|
// create role, does not exist. Very strange situation so let's raise a big fuss about it.
|
||||||
$role = Role::create(['name' => 'owner', 'display_name' => 'Site Owner', 'description' => 'User runs this instance of FF3']);
|
$role = $repository->createRole('owner', 'Site Owner', 'User runs this instance of FF3');
|
||||||
Log::error('Could not find role "owner". This is weird.');
|
Log::error('Could not find role "owner". This is weird.');
|
||||||
}
|
}
|
||||||
|
|
||||||
Log::info(sprintf('Gave user #%d role #%d ("%s")', $user->id, $role->id, $role->name));
|
Log::info(sprintf('Gave user #%d role #%d ("%s")', $user->id, $role->id, $role->name));
|
||||||
// give user the role
|
// give user the role
|
||||||
$user->attachRole($role);
|
$repository->attachRole($user, 'owner');
|
||||||
$user->save();
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -128,6 +128,18 @@ class UserRepository implements UserRepositoryInterface
|
|||||||
return $this->all()->count();
|
return $this->all()->count();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $name
|
||||||
|
* @param string $displayName
|
||||||
|
* @param string $description
|
||||||
|
*
|
||||||
|
* @return Role
|
||||||
|
*/
|
||||||
|
public function createRole(string $name, string $displayName, string $description): Role
|
||||||
|
{
|
||||||
|
return Role::create(['name' => $name, 'display_name' => $displayName, 'description' => $description]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param User $user
|
* @param User $user
|
||||||
*
|
*
|
||||||
@ -178,6 +190,16 @@ class UserRepository implements UserRepositoryInterface
|
|||||||
return User::first();
|
return User::first();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $role
|
||||||
|
*
|
||||||
|
* @return Role|null
|
||||||
|
*/
|
||||||
|
public function getRole(string $role): ?Role
|
||||||
|
{
|
||||||
|
return Role::where('name', $role)->first();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return basic user information.
|
* Return basic user information.
|
||||||
*
|
*
|
||||||
|
@ -22,6 +22,7 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace FireflyIII\Repositories\User;
|
namespace FireflyIII\Repositories\User;
|
||||||
|
|
||||||
|
use FireflyIII\Models\Role;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
|
|
||||||
@ -30,6 +31,15 @@ use Illuminate\Support\Collection;
|
|||||||
*/
|
*/
|
||||||
interface UserRepositoryInterface
|
interface UserRepositoryInterface
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $name
|
||||||
|
* @param string $displayName
|
||||||
|
* @param string $description
|
||||||
|
*
|
||||||
|
* @return Role
|
||||||
|
*/
|
||||||
|
public function createRole(string $name, string $displayName, string $description): Role;
|
||||||
/**
|
/**
|
||||||
* Returns a collection of all users.
|
* Returns a collection of all users.
|
||||||
*
|
*
|
||||||
@ -37,6 +47,13 @@ interface UserRepositoryInterface
|
|||||||
*/
|
*/
|
||||||
public function all(): Collection;
|
public function all(): Collection;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $role
|
||||||
|
*
|
||||||
|
* @return Role|null
|
||||||
|
*/
|
||||||
|
public function getRole(string $role): ?Role;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gives a user a role.
|
* Gives a user a role.
|
||||||
*
|
*
|
||||||
|
@ -24,11 +24,17 @@ namespace Tests\Unit\Handlers\Events;
|
|||||||
|
|
||||||
use FireflyIII\Events\RegisteredUser;
|
use FireflyIII\Events\RegisteredUser;
|
||||||
use FireflyIII\Events\RequestedNewPassword;
|
use FireflyIII\Events\RequestedNewPassword;
|
||||||
|
use FireflyIII\Events\UserChangedEmail;
|
||||||
use FireflyIII\Handlers\Events\UserEventHandler;
|
use FireflyIII\Handlers\Events\UserEventHandler;
|
||||||
|
use FireflyIII\Mail\ConfirmEmailChangeMail;
|
||||||
use FireflyIII\Mail\RegisteredUser as RegisteredUserMail;
|
use FireflyIII\Mail\RegisteredUser as RegisteredUserMail;
|
||||||
use FireflyIII\Mail\RequestedNewPassword as RequestedNewPasswordMail;
|
use FireflyIII\Mail\RequestedNewPassword as RequestedNewPasswordMail;
|
||||||
|
use FireflyIII\Mail\UndoEmailChangeMail;
|
||||||
|
use FireflyIII\Models\Role;
|
||||||
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
use FireflyIII\Repositories\User\UserRepositoryInterface;
|
||||||
|
use Illuminate\Auth\Events\Login;
|
||||||
use Illuminate\Support\Facades\Mail;
|
use Illuminate\Support\Facades\Mail;
|
||||||
|
use Mockery;
|
||||||
use Tests\TestCase;
|
use Tests\TestCase;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -57,6 +63,127 @@ class UserEventHandlerTest extends TestCase
|
|||||||
$this->assertTrue(true);
|
$this->assertTrue(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Handlers\Events\UserEventHandler::checkSingleUserIsAdmin
|
||||||
|
*/
|
||||||
|
public function testCheckSingleUserIsAdminMulti()
|
||||||
|
{
|
||||||
|
$repository = $this->mock(UserRepositoryInterface::class);
|
||||||
|
$user = $this->user();
|
||||||
|
$event = new Login($user, true);
|
||||||
|
$listener = new UserEventHandler();
|
||||||
|
|
||||||
|
// mock stuff
|
||||||
|
$repository->shouldReceive('count')->once()->andReturn(2);
|
||||||
|
|
||||||
|
|
||||||
|
$listener->checkSingleUserIsAdmin($event);
|
||||||
|
$this->assertTrue(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Handlers\Events\UserEventHandler::checkSingleUserIsAdmin
|
||||||
|
*/
|
||||||
|
public function testCheckSingleUserIsAdminNoRole()
|
||||||
|
{
|
||||||
|
$repository = $this->mock(UserRepositoryInterface::class);
|
||||||
|
$user = $this->emptyUser();
|
||||||
|
$event = new Login($user, true);
|
||||||
|
$listener = new UserEventHandler();
|
||||||
|
|
||||||
|
// mock stuff
|
||||||
|
$repository->shouldReceive('count')->once()->andReturn(1);
|
||||||
|
$repository->shouldReceive('getRole')->once()->andReturn(null);
|
||||||
|
$repository->shouldReceive('attachRole')->once()->withArgs([Mockery::any(), 'owner']);
|
||||||
|
$repository->shouldReceive('createRole')->once()->withArgs(['owner', 'Site Owner', 'User runs this instance of FF3'])->andReturn(new Role);
|
||||||
|
|
||||||
|
$listener->checkSingleUserIsAdmin($event);
|
||||||
|
$this->assertTrue(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Handlers\Events\UserEventHandler::checkSingleUserIsAdmin
|
||||||
|
*/
|
||||||
|
public function testCheckSingleUserIsAdminNotAdmin()
|
||||||
|
{
|
||||||
|
$repository = $this->mock(UserRepositoryInterface::class);
|
||||||
|
$user = $this->emptyUser();
|
||||||
|
$event = new Login($user, true);
|
||||||
|
$listener = new UserEventHandler();
|
||||||
|
|
||||||
|
// mock stuff
|
||||||
|
$repository->shouldReceive('count')->once()->andReturn(1);
|
||||||
|
$repository->shouldReceive('getRole')->once()->andReturn(new Role);
|
||||||
|
$repository->shouldReceive('attachRole')->once()->withArgs([Mockery::any(), 'owner']);
|
||||||
|
|
||||||
|
$listener->checkSingleUserIsAdmin($event);
|
||||||
|
$this->assertTrue(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Handlers\Events\UserEventHandler::checkSingleUserIsAdmin
|
||||||
|
*/
|
||||||
|
public function testCheckSingleUserIsAdminSingle()
|
||||||
|
{
|
||||||
|
$repository = $this->mock(UserRepositoryInterface::class);
|
||||||
|
$user = $this->user();
|
||||||
|
$event = new Login($user, true);
|
||||||
|
$listener = new UserEventHandler();
|
||||||
|
|
||||||
|
// mock stuff
|
||||||
|
$repository->shouldReceive('count')->once()->andReturn(1);
|
||||||
|
|
||||||
|
$listener->checkSingleUserIsAdmin($event);
|
||||||
|
$this->assertTrue(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Handlers\Events\UserEventHandler::sendEmailChangeConfirmMail
|
||||||
|
* @covers \FireflyIII\Events\UserChangedEmail
|
||||||
|
*/
|
||||||
|
public function testSendEmailChangeConfirmMail()
|
||||||
|
{
|
||||||
|
Mail::fake();
|
||||||
|
$user = $this->emptyUser();
|
||||||
|
$event = new UserChangedEmail($user, 'new@new', 'old@old', '127.0.0.1');
|
||||||
|
$listener = new UserEventHandler;
|
||||||
|
$listener->sendEmailChangeConfirmMail($event);
|
||||||
|
|
||||||
|
// must send user an email:
|
||||||
|
|
||||||
|
Mail::assertSent(
|
||||||
|
ConfirmEmailChangeMail::class, function ($mail) {
|
||||||
|
return $mail->hasTo('new@new') && '127.0.0.1' === $mail->ipAddress;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertTrue(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \FireflyIII\Handlers\Events\UserEventHandler::sendEmailChangeUndoMail
|
||||||
|
* @covers \FireflyIII\Events\UserChangedEmail
|
||||||
|
*/
|
||||||
|
public function testSendEmailChangeUndoMail()
|
||||||
|
{
|
||||||
|
Mail::fake();
|
||||||
|
$user = $this->emptyUser();
|
||||||
|
$event = new UserChangedEmail($user, 'new@new', 'old@old', '127.0.0.1');
|
||||||
|
$listener = new UserEventHandler;
|
||||||
|
$listener->sendEmailChangeUndoMail($event);
|
||||||
|
|
||||||
|
// must send user an email:
|
||||||
|
|
||||||
|
Mail::assertSent(
|
||||||
|
UndoEmailChangeMail::class, function ($mail) {
|
||||||
|
return $mail->hasTo('old@old') && '127.0.0.1' === $mail->ipAddress;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertTrue(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @covers \FireflyIII\Handlers\Events\UserEventHandler::sendNewPassword
|
* @covers \FireflyIII\Handlers\Events\UserEventHandler::sendNewPassword
|
||||||
* @covers \FireflyIII\Events\RequestedNewPassword
|
* @covers \FireflyIII\Events\RequestedNewPassword
|
||||||
|
@ -112,6 +112,22 @@ class AttachmentHelperTest extends TestCase
|
|||||||
Storage::disk('upload')->assertExists(sprintf('at-%d.data', $attachments->first()->id));
|
Storage::disk('upload')->assertExists(sprintf('at-%d.data', $attachments->first()->id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test double file upload. Needs to be after testSave.
|
||||||
|
*
|
||||||
|
* @covers \FireflyIII\Helpers\Attachments\AttachmentHelper::__construct
|
||||||
|
* @covers \FireflyIII\Helpers\Attachments\AttachmentHelper::saveAttachmentsForModel
|
||||||
|
*/
|
||||||
|
public function testSaveEmpty()
|
||||||
|
{
|
||||||
|
$journal = TransactionJournal::first();
|
||||||
|
$helper = new AttachmentHelper;
|
||||||
|
|
||||||
|
$res = $helper->saveAttachmentsForModel($journal, null);
|
||||||
|
$this->assertTrue($res);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test double file upload. Needs to be after testSave.
|
* Test double file upload. Needs to be after testSave.
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user