mirror of
https://github.com/kevinveenbirkenbach/infinito.git
synced 2024-12-04 23:17:19 +01:00
Optimized tests for fixture sources
This commit is contained in:
parent
0115751e98
commit
108debf6bf
@ -6,6 +6,8 @@ use Infinito\Entity\Meta\Right;
|
||||
use Infinito\DBAL\Types\Meta\Right\LayerType;
|
||||
use Infinito\DBAL\Types\ActionType;
|
||||
use Infinito\Entity\Source\SourceInterface;
|
||||
use Infinito\Entity\Meta\RightInterface;
|
||||
use Infinito\Entity\Meta\LawInterface;
|
||||
|
||||
/**
|
||||
* @author kevinfrantz
|
||||
@ -13,18 +15,30 @@ use Infinito\Entity\Source\SourceInterface;
|
||||
final class EntityTemplateFactory extends Right
|
||||
{
|
||||
/**
|
||||
* @param SourceInterface $source
|
||||
* @param LawInterface $law
|
||||
* @param RightInterface $right
|
||||
*/
|
||||
public static function createStandartPublicRight(SourceInterface $source): Right
|
||||
private static function addRightToLaw(LawInterface $law, RightInterface $right)
|
||||
{
|
||||
$right = new Right();
|
||||
$law = $source->getLaw();
|
||||
$right->setLaw($law);
|
||||
$law->getRights()->add($right);
|
||||
$right->setSource($source);
|
||||
$right->setLayer(LayerType::SOURCE);
|
||||
$right->setActionType(ActionType::READ);
|
||||
}
|
||||
|
||||
return $right;
|
||||
/**
|
||||
* @param SourceInterface $source
|
||||
*/
|
||||
public static function createStandartPublicRights(SourceInterface $source): void
|
||||
{
|
||||
$law = $source->getLaw();
|
||||
$readRight = new Right();
|
||||
self::addRightToLaw($law, $readRight);
|
||||
$readRight->setSource($source);
|
||||
$readRight->setLayer(LayerType::SOURCE);
|
||||
$readRight->setActionType(ActionType::READ);
|
||||
$executeRight = new Right();
|
||||
self::addRightToLaw($law, $executeRight);
|
||||
$executeRight->setSource($source);
|
||||
$executeRight->setLayer(LayerType::SOURCE);
|
||||
$executeRight->setActionType(ActionType::EXECUTE);
|
||||
}
|
||||
}
|
||||
|
@ -22,7 +22,7 @@ final class GuestUserFixtureSource extends AbstractFixtureSource
|
||||
{
|
||||
$userSource = new UserSource();
|
||||
$userSource->setSlug(self::getSlug());
|
||||
EntityTemplateFactory::createStandartPublicRight($userSource);
|
||||
EntityTemplateFactory::createStandartPublicRights($userSource);
|
||||
|
||||
return $userSource;
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ final class HelpFixtureSource extends AbstractFixtureSource
|
||||
$helpSource = new TextSource();
|
||||
$helpSource->setText('See https://github.com/KevinFrantz/infinito/issues.');
|
||||
$helpSource->setSlug(self::getSlug());
|
||||
EntityTemplateFactory::createStandartPublicRight($helpSource);
|
||||
EntityTemplateFactory::createStandartPublicRights($helpSource);
|
||||
|
||||
return $helpSource;
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ final class HomepageFixtureSource extends AbstractFixtureSource
|
||||
$homepage = new TextSource();
|
||||
$homepage->setText('Welcome to infinito!');
|
||||
$homepage->setSlug(self::getSlug());
|
||||
EntityTemplateFactory::createStandartPublicRight($homepage);
|
||||
EntityTemplateFactory::createStandartPublicRights($homepage);
|
||||
|
||||
return $homepage;
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ final class ImpressumFixtureSource extends AbstractFixtureSource
|
||||
$impressumSource = new TextSource();
|
||||
$impressumSource->setText('Example Impressum');
|
||||
$impressumSource->setSlug(self::getSlug());
|
||||
EntityTemplateFactory::createStandartPublicRight($impressumSource);
|
||||
EntityTemplateFactory::createStandartPublicRights($impressumSource);
|
||||
|
||||
return $impressumSource;
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ final class InformationFixtureSource extends AbstractFixtureSource
|
||||
$informationSource = new TextSource();
|
||||
$informationSource->setText('See https://github.com/KevinFrantz/infinito/issues.');
|
||||
$informationSource->setSlug(self::getSlug());
|
||||
EntityTemplateFactory::createStandartPublicRight($informationSource);
|
||||
EntityTemplateFactory::createStandartPublicRights($informationSource);
|
||||
|
||||
return $informationSource;
|
||||
}
|
||||
|
@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace tests\Integration\Domain\FixtureManagement;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Infinito\Entity\Source\AbstractSource;
|
||||
use Infinito\Domain\FixtureManagement\EntityTemplateFactory;
|
||||
use Infinito\Entity\Source\Complex\UserSource;
|
||||
use Infinito\Entity\Meta\Right;
|
||||
use Infinito\DBAL\Types\Meta\Right\LayerType;
|
||||
use Infinito\DBAL\Types\ActionType;
|
||||
use Infinito\Domain\LawManagement\LawPermissionChecker;
|
||||
|
||||
/**
|
||||
* @author kevinfrantz
|
||||
*/
|
||||
class EntityTemplateFactoryIntegrationTest extends TestCase
|
||||
{
|
||||
public function testStandartPublicRights(): void
|
||||
{
|
||||
$allowedActions = [ActionType::READ, ActionType::EXECUTE];
|
||||
$allowedLayers = [LayerType::SOURCE];
|
||||
$source = new class() extends AbstractSource {
|
||||
};
|
||||
$law = $source->getLaw();
|
||||
$anonymUserSource = new UserSource();
|
||||
EntityTemplateFactory::createStandartPublicRights($source);
|
||||
$requestedRight = new Right();
|
||||
$requestedRight->setReciever($anonymUserSource);
|
||||
$lawPermissionChecker = new LawPermissionChecker($law);
|
||||
foreach (LayerType::getValues() as $layerType) {
|
||||
foreach (ActionType::getValues() as $actionType) {
|
||||
$requestedRight->setActionType($actionType);
|
||||
$requestedRight->setLayer($layerType);
|
||||
$checkResult = $lawPermissionChecker->hasPermission($requestedRight);
|
||||
if (in_array($actionType, $allowedActions) && in_array($layerType, $allowedLayers)) {
|
||||
$this->assertTrue($checkResult);
|
||||
} else {
|
||||
$this->assertFalse($checkResult);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -10,7 +10,7 @@ use Infinito\Entity\Source\SourceInterface;
|
||||
/**
|
||||
* @author kevinfrantz
|
||||
*/
|
||||
class FixtureSourceFactoryTest extends TestCase
|
||||
class FixtureSourceFactoryIntegrationTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @var array|FixtureSourceInterface[]
|
||||
@ -39,12 +39,27 @@ class FixtureSourceFactoryTest extends TestCase
|
||||
}
|
||||
}
|
||||
|
||||
public function testFixtureSourcesIcons(): void
|
||||
{
|
||||
$icons = [];
|
||||
foreach ($this->fixtureSources as $fixtureSource) {
|
||||
$this->assertInstanceOf(FixtureSourceInterface::class, $fixtureSource);
|
||||
$icon = $fixtureSource->getIcon();
|
||||
$this->assertIsString($icon);
|
||||
$this->assertFalse(in_array($icon, $icons), 'An icon has to be unique');
|
||||
$icons[] = $icon;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The following test is redundant.
|
||||
*/
|
||||
public function testFixtureSourcesObjects(): void
|
||||
{
|
||||
$objects = [];
|
||||
foreach ($this->fixtureSources as $fixtureSource) {
|
||||
$this->assertInstanceOf(SourceInterface::class, $fixtureSource->getORMReadyObject());
|
||||
$this->assertFalse(in_array($fixtureSource, $objects), 'A slug has to be unique');
|
||||
$this->assertFalse(in_array($fixtureSource, $objects), 'A object has to be unique');
|
||||
$objects[] = $fixtureSource;
|
||||
}
|
||||
}
|
@ -9,7 +9,7 @@ use Infinito\Domain\FixtureManagement\FixtureSource\ImpressumFixtureSource;
|
||||
/**
|
||||
* @author kevinfrantz
|
||||
*/
|
||||
class ImprintFixtureSourceTest extends KernelTestCase
|
||||
class ImprintFixtureSourceIntegrationTest extends KernelTestCase
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
Loading…
Reference in New Issue
Block a user