Implemented LayerActionMap

This commit is contained in:
Kevin Frantz 2019-01-27 19:47:41 +01:00
parent 17a6ee1dc6
commit c2d0c5f60d
3 changed files with 116 additions and 0 deletions

View File

@ -0,0 +1,56 @@
<?php
namespace App\Domain\LayerManagement;
use App\DBAL\Types\Meta\Right\LayerType;
use App\DBAL\Types\ActionType;
/**
* @author kevinfrantz
*/
final class LayerActionMap implements LayerActionMapInterface
{
/**
* @var array Add new combination possibilities to this map!
*/
const LAYER_ACTION_MAP = [
LayerType::SOURCE => [
ActionType::READ,
ActionType::CREATE,
ActionType::UPDATE,
ActionType::DELETE,
ActionType::LIST,
],
];
/**
* {@inheritdoc}
*
* @see \App\Domain\LayerManagement\LayerActionMapInterface::getLayers()
*/
public static function getLayers(string $action): array
{
$layers = [];
foreach (self::LAYER_ACTION_MAP as $layer => $actions) {
if (in_array($action, $actions)) {
$layers[] = $layer;
}
}
return $layers;
}
/**
* {@inheritdoc}
*
* @see \App\Domain\LayerManagement\LayerActionMapInterface::getActions()
*/
public static function getActions(string $layer): array
{
if (array_key_exists($layer, self::LAYER_ACTION_MAP)) {
return self::LAYER_ACTION_MAP[$layer];
}
return [];
}
}

View File

@ -0,0 +1,25 @@
<?php
namespace App\Domain\LayerManagement;
/**
* This LayerActionMap offers the possibility, to see which Action\Layer-Cobinations are possible.
*
* @author kevinfrantz
*/
interface LayerActionMapInterface
{
/**
* @param string $action
*
* @return array|string[]
*/
public static function getLayers(string $action): array;
/**
* @param string $layer
*
* @return array|string[]
*/
public static function getActions(string $layer): array;
}

View File

@ -0,0 +1,35 @@
<?php
namespace tests\Unit\Domain\LayerManagement;
use PHPUnit\Framework\TestCase;
use App\DBAL\Types\ActionType;
use App\Domain\LayerManagement\LayerActionMap;
use App\DBAL\Types\Meta\Right\LayerType;
/**
* @author kevinfrantz
*/
class LayerActionMapTest extends TestCase
{
public function testGetLayersBySource(): void
{
foreach (ActionType::getChoices() as $action) {
$layers = LayerActionMap::getLayers($action);
$this->assertArraySubset([LayerType::SOURCE], $layers);
}
}
public function testGetActionsBySource(): void
{
$actions = LayerActionMap::getActions(LayerType::SOURCE);
foreach (ActionType::getChoices() as $action) {
$this->assertTrue(in_array($action, $actions));
}
}
public function testEmptyGetActionsBySource(): void
{
$this->assertEquals(0, count(LayerActionMap::getActions('blablabla')));
}
}