phpOMS/tests/Account/AccountTest.php
Dennis Eichhorn a1b591d141 fix tests
2024-03-20 03:00:25 +00:00

269 lines
7.8 KiB
PHP
Executable File

<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package tests
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
namespace phpOMS\tests\Account;
use phpOMS\Account\Account;
use phpOMS\Account\AccountStatus;
use phpOMS\Account\AccountType;
use phpOMS\Account\Group;
use phpOMS\Account\NullGroup;
use phpOMS\Account\PermissionAbstract;
use phpOMS\Account\PermissionType;
use phpOMS\Localization\L11nManager;
use phpOMS\Localization\Localization;
require_once __DIR__ . '/../Autoloader.php';
/**
* @testdox phpOMS\tests\Account\Account: Base account/user representation
*
* @internal
*/
final class AccountTest extends \PHPUnit\Framework\TestCase
{
protected $l11nManager = null;
/**
* {@inheritdoc}
*/
protected function setUp() : void
{
$this->l11nManager = new L11nManager('Api');
}
/**
* @testdox The account has the expected default values after initialization
* @covers \phpOMS\Account\Account<extended>
* @group framework
*/
public function testDefault() : void
{
$account = new Account();
/* Testing default values */
self::assertIsInt($account->id);
self::assertEquals(0, $account->id);
self::assertInstanceOf('\phpOMS\Localization\Localization', $account->l11n);
self::assertEquals([], $account->getGroups());
self::assertNull($account->login);
self::assertIsString($account->name1);
self::assertEquals('', $account->name1);
self::assertIsString($account->name2);
self::assertEquals('', $account->name2);
self::assertIsString($account->name3);
self::assertEquals('', $account->name3);
self::assertIsString($account->getEmail());
self::assertEquals('', $account->getEmail());
self::assertIsInt($account->status);
self::assertEquals(AccountStatus::INACTIVE, $account->status);
self::assertIsInt($account->type);
self::assertEquals(AccountType::USER, $account->type);
self::assertEquals([], $account->getPermissions());
self::assertFalse($account->hasGroup(2));
self::assertInstanceOf('\DateTimeInterface', $account->getLastActive());
self::assertInstanceOf('\DateTimeImmutable', $account->createdAt);
$array = $account->toArray();
self::assertIsArray($array);
self::assertGreaterThan(0, \count($array));
self::assertEquals(\json_encode($array), $account->__toString());
self::assertEquals($array, $account->jsonSerialize());
}
/**
* @testdox The account names can be set and retrieved correctly
* @covers \phpOMS\Account\Account<extended>
* @group framework
*/
public function testSetAndGetAccountNames() : void
{
$account = new Account();
$account->generatePassword('abcd');
$account->login = 'Login';
self::assertEquals('Login', $account->login);
$account->name1 = 'Donald';
self::assertEquals('Donald', $account->name1);
$account->name2 = 'Fauntleroy';
self::assertEquals('Fauntleroy', $account->name2);
$account->name3 = 'Duck';
self::assertEquals('Duck', $account->name3);
}
/**
* @testdox Groups can be added to an account
* @covers \phpOMS\Account\Account<extended>
* @group framework
*/
public function testAddAndGetGroup() : void
{
$account = new Account();
$account->generatePassword('abcd');
$account->addGroup(new NullGroup(2));
self::assertCount(1, $account->getGroups());
self::assertTrue($account->hasGroup(2));
}
/**
* @testdox An account can have a valid email address
* @covers \phpOMS\Account\Account<extended>
* @group framework
*/
public function testSetAndGetAccountEmail() : void
{
$account = new Account();
$account->generatePassword('abcd');
$account->setEmail('d.duck@duckburg.com');
self::assertEquals('d.duck@duckburg.com', $account->getEmail());
}
/**
* @testdox Account permissions can be added
* @covers \phpOMS\Account\Account<extended>
* @group framework
*/
public function testPermissionAdd() : void
{
$account = new Account();
$account->generatePassword('abcd');
$account->addPermission(new class() extends PermissionAbstract {});
self::assertCount(1, $account->getPermissions());
$account->setPermissions([
new class() extends PermissionAbstract {},
new class() extends PermissionAbstract {},
]);
self::assertCount(2, $account->getPermissions());
$account->addPermissions([
new class() extends PermissionAbstract {},
new class() extends PermissionAbstract {},
]);
self::assertCount(4, $account->getPermissions());
$account->addPermissions([[
new class() extends PermissionAbstract {},
new class() extends PermissionAbstract {},
]]);
self::assertCount(6, $account->getPermissions());
}
/**
* @testdox Account permissions can be checked for existence
* @covers \phpOMS\Account\Account<extended>
* @group framework
*/
public function testPermissionExists() : void
{
$account = new Account();
$account->generatePassword('abcd');
$account->addPermission(new class() extends PermissionAbstract {});
self::assertCount(1, $account->getPermissions());
self::assertFalse($account->hasPermission(PermissionType::READ, 1, 2, 'a', 1, 1, 1));
self::assertTrue($account->hasPermission(PermissionType::NONE));
}
public function testGroupPmerissionExists() : void
{
$account = new Account();
$group = new NullGroup(2);
$perm = new class() extends PermissionAbstract {};
$perm->addPermission(PermissionType::CREATE);
$group->addPermission($perm);
$account->hasPermission(PermissionType::READ);
}
/**
* @testdox Account permissions can be removed
* @covers \phpOMS\Account\Account<extended>
* @group framework
*/
public function testPermissionRemove() : void
{
$account = new Account();
$account->generatePassword('abcd');
$perm = new class() extends PermissionAbstract {};
$perm->setPermission(PermissionType::READ);
$account->addPermission($perm);
self::assertCount(1, $account->getPermissions());
$account->removePermission($perm);
self::assertCount(0, $account->getPermissions());
}
/**
* @testdox An account can have it's own localization
* @covers \phpOMS\Account\Account<extended>
* @group framework
*/
public function testLocalization() : void
{
$account = new Account();
$account->generatePassword('abcd');
$account->l11n = new Localization();
self::assertInstanceOf('\phpOMS\Localization\Localization', $account->l11n);
}
/**
* @testdox An account 'last activity' timestamp can be updated and retrieved
* @group framework
*/
public function testLastChange() : void
{
$account = new Account();
$account->generatePassword('abcd');
$datetime = new \DateTime('now');
$account->updateLastActive();
self::assertEquals($datetime->format('Y-m-d h:i:s'), $account->getLastActive()->format('Y-m-d h:i:s'));
}
/**
* @testdox An account can only have a valid email
* @group framework
*/
public function testEmailException() : void
{
$this->expectException(\InvalidArgumentException::class);
$account = new Account();
$account->setEmail('d.duck!@#%@duckburg');
}
}