diff --git a/Makefile b/Makefile
index 7aec792..1e10be2 100644
--- a/Makefile
+++ b/Makefile
@@ -28,3 +28,11 @@ codeception:
.PHONY: ci
ci: phpcs codeception phpstan
+
+.PHONY: clean
+clean:
+ rm -Rf composer.lock
+ rm -Rf ./vendor
+ find ./tests/_output/ -not -name .gitignore -delete
+ rm -Rf src/Generated/*
+ rm -Rf src/Orm/*
diff --git a/src/FondOfImpala/Shared/CompanyTypeRole/Transfer/company_type_role.transfer.xml b/src/FondOfImpala/Shared/CompanyTypeRole/Transfer/company_type_role.transfer.xml
index 98029f4..67b69c0 100644
--- a/src/FondOfImpala/Shared/CompanyTypeRole/Transfer/company_type_role.transfer.xml
+++ b/src/FondOfImpala/Shared/CompanyTypeRole/Transfer/company_type_role.transfer.xml
@@ -1,7 +1,7 @@
+ xsi:schemaLocation="spryker:transfer-01 https://static.spryker.com/transfer-01.xsd">
@@ -32,4 +32,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/FondOfImpala/Zed/CompanyTypeRole/Business/Builder/CompanyRoleCriteriaFilterBuilder.php b/src/FondOfImpala/Zed/CompanyTypeRole/Business/Builder/CompanyRoleCriteriaFilterBuilder.php
deleted file mode 100644
index 0b341cb..0000000
--- a/src/FondOfImpala/Zed/CompanyTypeRole/Business/Builder/CompanyRoleCriteriaFilterBuilder.php
+++ /dev/null
@@ -1,32 +0,0 @@
-setOrderBy(SpyCompanyRoleTableMap::COL_ID_COMPANY_ROLE)
- ->setOrderDirection('asc');
-
- $paginationTransfer = (new PaginationTransfer())
- ->setPage($page)
- ->setMaxPerPage($maxPerPage);
-
- return (new CompanyRoleCriteriaFilterTransfer())
- ->setFilter($filterTransfer)
- ->setPagination($paginationTransfer);
- }
-}
diff --git a/src/FondOfImpala/Zed/CompanyTypeRole/Business/Builder/CompanyRoleCriteriaFilterBuilderInterface.php b/src/FondOfImpala/Zed/CompanyTypeRole/Business/Builder/CompanyRoleCriteriaFilterBuilderInterface.php
deleted file mode 100644
index 8768442..0000000
--- a/src/FondOfImpala/Zed/CompanyTypeRole/Business/Builder/CompanyRoleCriteriaFilterBuilderInterface.php
+++ /dev/null
@@ -1,16 +0,0 @@
-createCompanyTypeNameFilter(),
- $this->createPermissionIntersection(),
- $this->createCompanyRoleCriteriaFilterBuilder(),
+ $this->createCompanyRoleReader(),
$this->getCompanyRoleFacade(),
- $this->getPermissionFacade(),
+ );
+ }
+
+ /**
+ * @return \FondOfImpala\Zed\CompanyTypeRole\Business\Reader\CompanyRoleReaderInterface
+ */
+ protected function createCompanyRoleReader(): CompanyRoleReaderInterface
+ {
+ return new CompanyRoleReader(
+ $this->createNewPermissionReader(),
+ $this->createPermissionKeyMapper(),
+ $this->getRepository(),
+ );
+ }
+
+ /**
+ * @return \FondOfImpala\Zed\CompanyTypeRole\Business\Reader\PermissionReaderInterface
+ */
+ protected function createNewPermissionReader(): NewPermissionReaderInterface
+ {
+ return new NewPermissionReader(
+ $this->createPermissionIntersection(),
$this->getConfig(),
+ $this->getPermissionFacade(),
);
}
+ /**
+ * @return \FondOfImpala\Zed\CompanyTypeRole\Business\Mapper\PermissionKeyMapperInterface
+ */
+ protected function createPermissionKeyMapper(): PermissionKeyMapperInterface
+ {
+ return new PermissionKeyMapper();
+ }
+
/**
* @return \FondOfImpala\Zed\CompanyTypeRole\Business\Synchronizer\CompanyRoleSynchronizerInterface
*/
@@ -131,14 +161,6 @@ protected function createCompanyUserReader(): CompanyUserReaderInterface
);
}
- /**
- * @return \FondOfImpala\Zed\CompanyTypeRole\Business\Filter\CompanyTypeNameFilterInterface
- */
- protected function createCompanyTypeNameFilter(): CompanyTypeNameFilterInterface
- {
- return new CompanyTypeNameFilter($this->getCompanyTypeFacade());
- }
-
/**
* @return \FondOfImpala\Zed\CompanyTypeRole\Business\Intersection\PermissionIntersectionInterface
*/
@@ -147,14 +169,6 @@ protected function createPermissionIntersection(): PermissionIntersectionInterfa
return new PermissionIntersection();
}
- /**
- * @return \FondOfImpala\Zed\CompanyTypeRole\Business\Builder\CompanyRoleCriteriaFilterBuilderInterface
- */
- protected function createCompanyRoleCriteriaFilterBuilder(): CompanyRoleCriteriaFilterBuilderInterface
- {
- return new CompanyRoleCriteriaFilterBuilder();
- }
-
/**
* @return \FondOfImpala\Zed\CompanyTypeRole\Dependency\Facade\CompanyTypeRoleToCompanyUserFacadeInterface
*/
diff --git a/src/FondOfImpala/Zed/CompanyTypeRole/Business/Filter/CompanyTypeNameFilter.php b/src/FondOfImpala/Zed/CompanyTypeRole/Business/Filter/CompanyTypeNameFilter.php
deleted file mode 100644
index aa0507b..0000000
--- a/src/FondOfImpala/Zed/CompanyTypeRole/Business/Filter/CompanyTypeNameFilter.php
+++ /dev/null
@@ -1,47 +0,0 @@
-companyTypeFacade = $companyTypeFacade;
- }
-
- /**
- * @param \Generated\Shared\Transfer\CompanyRoleTransfer $companyRoleTransfer
- *
- * @return string|null
- */
- public function filterFromCompanyRole(CompanyRoleTransfer $companyRoleTransfer): ?string
- {
- $companyTransfer = $companyRoleTransfer->getCompany();
-
- if ($companyTransfer === null || $companyTransfer->getFkCompanyType() === null) {
- return null;
- }
-
- $companyTypeTransfer = $this->companyTypeFacade->getCompanyTypeById(
- (new CompanyTypeTransfer())->setIdCompanyType($companyTransfer->getFkCompanyType()),
- );
-
- if ($companyTypeTransfer === null) {
- return null;
- }
-
- return $companyTypeTransfer->getName();
- }
-}
diff --git a/src/FondOfImpala/Zed/CompanyTypeRole/Business/Filter/CompanyTypeNameFilterInterface.php b/src/FondOfImpala/Zed/CompanyTypeRole/Business/Filter/CompanyTypeNameFilterInterface.php
deleted file mode 100644
index 6c45e3d..0000000
--- a/src/FondOfImpala/Zed/CompanyTypeRole/Business/Filter/CompanyTypeNameFilterInterface.php
+++ /dev/null
@@ -1,15 +0,0 @@
-
+ */
+ public function fromPermissionCollection(PermissionCollectionTransfer $permissionCollectionTransfer): array
+ {
+ $permissionKeys = [];
+
+ foreach ($permissionCollectionTransfer->getPermissions() as $permissionTransfer) {
+ $permissionKey = $this->fromPermission($permissionTransfer);
+
+ if ($permissionKey === null) {
+ continue;
+ }
+
+ $permissionKeys[] = $permissionKey;
+ }
+
+ return array_unique($permissionKeys);
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\PermissionTransfer $permissionTransfer
+ *
+ * @return string|null
+ */
+ public function fromPermission(PermissionTransfer $permissionTransfer): ?string
+ {
+ return $permissionTransfer->getKey();
+ }
+}
diff --git a/src/FondOfImpala/Zed/CompanyTypeRole/Business/Mapper/PermissionKeyMapperInterface.php b/src/FondOfImpala/Zed/CompanyTypeRole/Business/Mapper/PermissionKeyMapperInterface.php
new file mode 100644
index 0000000..645771a
--- /dev/null
+++ b/src/FondOfImpala/Zed/CompanyTypeRole/Business/Mapper/PermissionKeyMapperInterface.php
@@ -0,0 +1,25 @@
+
+ */
+ public function fromPermissionCollection(
+ PermissionCollectionTransfer $permissionCollectionTransfer
+ ): array;
+
+ /**
+ * @param \Generated\Shared\Transfer\PermissionTransfer $permissionTransfer
+ *
+ * @return string|null
+ */
+ public function fromPermission(PermissionTransfer $permissionTransfer): ?string;
+}
diff --git a/src/FondOfImpala/Zed/CompanyTypeRole/Business/Reader/CompanyRoleReader.php b/src/FondOfImpala/Zed/CompanyTypeRole/Business/Reader/CompanyRoleReader.php
new file mode 100644
index 0000000..48b94f8
--- /dev/null
+++ b/src/FondOfImpala/Zed/CompanyTypeRole/Business/Reader/CompanyRoleReader.php
@@ -0,0 +1,107 @@
+permissionReader = $permissionReader;
+ $this->permissionKeyMapper = $permissionKeyMapper;
+ $this->repository = $repository;
+ }
+
+ /**
+ * @return array<\Generated\Shared\Transfer\SyncableCompanyRoleTransfer>
+ */
+ public function findSyncableCompanyRoles(): array
+ {
+ $syncableCompanyRoles = [];
+ $permissionSets = $this->permissionReader->getPermissionSets();
+
+ foreach ($permissionSets as $permissionSet) {
+ $syncableCompanyRole = $this->findSyncableCompanyRoleByPermissionSet($permissionSet);
+
+ if ($syncableCompanyRole === null) {
+ continue;
+ }
+
+ $syncableCompanyRoles[] = $syncableCompanyRole;
+ }
+
+ return $syncableCompanyRoles;
+ }
+
+ /**
+ * @param \Generated\Shared\Transfer\PermissionSetTransfer $permissionSetTransfer
+ *
+ * @return \Generated\Shared\Transfer\SyncableCompanyRoleTransfer|null
+ */
+ public function findSyncableCompanyRoleByPermissionSet(
+ PermissionSetTransfer $permissionSetTransfer
+ ): ?SyncableCompanyRoleTransfer {
+ $companyType = $permissionSetTransfer->getCompanyType();
+ $companyRoleName = $permissionSetTransfer->getCompanyRoleName();
+ $permissionCollectionTransfer = $permissionSetTransfer->getEntries();
+
+ if (
+ $companyType === null ||
+ $companyRoleName === null ||
+ $permissionCollectionTransfer === null ||
+ $permissionCollectionTransfer->getPermissions()->count() < 1
+ ) {
+ return null;
+ }
+
+ $permissionKeys = $this->permissionKeyMapper->fromPermissionCollection($permissionCollectionTransfer);
+ $companyRolesIds = $this->repository->findSyncableCompanyRoleIds(
+ $companyType,
+ $companyRoleName,
+ $permissionKeys,
+ );
+
+ return (new SyncableCompanyRoleTransfer())->setIds($companyRolesIds)
+ ->setName($companyRoleName)
+ ->setCompanyType($companyType)
+ ->setPermissions($permissionCollectionTransfer);
+ }
+
+ /**
+ * @param array $companyRoleIds
+ *
+ * @return \Generated\Shared\Transfer\CompanyRoleCollectionTransfer
+ */
+ public function findCompanyRolesByCompanyRoleIds(array $companyRoleIds): CompanyRoleCollectionTransfer
+ {
+ return $this->repository->findCompanyRolesByCompanyRoleIds($companyRoleIds);
+ }
+}
diff --git a/src/FondOfImpala/Zed/CompanyTypeRole/Business/Reader/CompanyRoleReaderInterface.php b/src/FondOfImpala/Zed/CompanyTypeRole/Business/Reader/CompanyRoleReaderInterface.php
new file mode 100644
index 0000000..aa210e4
--- /dev/null
+++ b/src/FondOfImpala/Zed/CompanyTypeRole/Business/Reader/CompanyRoleReaderInterface.php
@@ -0,0 +1,31 @@
+
+ */
+ public function findSyncableCompanyRoles(): array;
+
+ /**
+ * @param \Generated\Shared\Transfer\PermissionSetTransfer $permissionSetTransfer
+ *
+ * @return \Generated\Shared\Transfer\SyncableCompanyRoleTransfer|null
+ */
+ public function findSyncableCompanyRoleByPermissionSet(
+ PermissionSetTransfer $permissionSetTransfer
+ ): ?SyncableCompanyRoleTransfer;
+
+ /**
+ * @param array $companyRoleIds
+ *
+ * @return \Generated\Shared\Transfer\CompanyRoleCollectionTransfer
+ */
+ public function findCompanyRolesByCompanyRoleIds(array $companyRoleIds): CompanyRoleCollectionTransfer;
+}
diff --git a/src/FondOfImpala/Zed/CompanyTypeRole/Business/Reader/PermissionReader.php b/src/FondOfImpala/Zed/CompanyTypeRole/Business/Reader/PermissionReader.php
new file mode 100644
index 0000000..7aab9a0
--- /dev/null
+++ b/src/FondOfImpala/Zed/CompanyTypeRole/Business/Reader/PermissionReader.php
@@ -0,0 +1,79 @@
+permissionIntersection = $permissionIntersection;
+ $this->config = $config;
+ $this->permissionFacade = $permissionFacade;
+ }
+
+ /**
+ * @return \Generated\Shared\Transfer\PermissionCollectionTransfer
+ */
+ public function getPermissions(): PermissionCollectionTransfer
+ {
+ return $this->permissionFacade->findAll();
+ }
+
+ /**
+ * @return array<\Generated\Shared\Transfer\PermissionSetTransfer>
+ */
+ public function getPermissionSets(): array
+ {
+ $permissionSets = [];
+ $allPermissionCollectionTransfer = $this->getPermissions();
+ $groupedPermissionKeys = $this->config->getGroupedPermissionKeys();
+
+ foreach (array_keys($groupedPermissionKeys) as $companyTypeName) {
+ foreach (array_keys($groupedPermissionKeys[$companyTypeName]) as $companyRoleName) {
+ $permissionKeys = $groupedPermissionKeys[$companyTypeName][$companyRoleName];
+
+ $permissionSet = (new PermissionSetTransfer())->setCompanyType($companyTypeName)
+ ->setCompanyRoleName($companyRoleName)
+ ->setEntries(
+ $this->permissionIntersection->intersect(
+ $allPermissionCollectionTransfer,
+ $permissionKeys,
+ ),
+ );
+
+ $permissionSets[] = $permissionSet;
+ }
+ }
+
+ return $permissionSets;
+ }
+}
diff --git a/src/FondOfImpala/Zed/CompanyTypeRole/Business/Reader/PermissionReaderInterface.php b/src/FondOfImpala/Zed/CompanyTypeRole/Business/Reader/PermissionReaderInterface.php
new file mode 100644
index 0000000..16cc00d
--- /dev/null
+++ b/src/FondOfImpala/Zed/CompanyTypeRole/Business/Reader/PermissionReaderInterface.php
@@ -0,0 +1,18 @@
+
+ */
+ public function getPermissionSets(): array;
+}
diff --git a/src/FondOfImpala/Zed/CompanyTypeRole/Business/Synchronizer/PermissionSynchronizer.php b/src/FondOfImpala/Zed/CompanyTypeRole/Business/Synchronizer/PermissionSynchronizer.php
index 398294b..a97bcf6 100644
--- a/src/FondOfImpala/Zed/CompanyTypeRole/Business/Synchronizer/PermissionSynchronizer.php
+++ b/src/FondOfImpala/Zed/CompanyTypeRole/Business/Synchronizer/PermissionSynchronizer.php
@@ -2,36 +2,15 @@
namespace FondOfImpala\Zed\CompanyTypeRole\Business\Synchronizer;
-use FondOfImpala\Zed\CompanyTypeRole\Business\Builder\CompanyRoleCriteriaFilterBuilderInterface;
-use FondOfImpala\Zed\CompanyTypeRole\Business\Filter\CompanyTypeNameFilterInterface;
-use FondOfImpala\Zed\CompanyTypeRole\Business\Intersection\PermissionIntersectionInterface;
-use FondOfImpala\Zed\CompanyTypeRole\CompanyTypeRoleConfig;
+use FondOfImpala\Zed\CompanyTypeRole\Business\Reader\CompanyRoleReaderInterface;
use FondOfImpala\Zed\CompanyTypeRole\Dependency\Facade\CompanyTypeRoleToCompanyRoleFacadeInterface;
-use FondOfImpala\Zed\CompanyTypeRole\Dependency\Facade\CompanyTypeRoleToPermissionFacadeInterface;
-use Generated\Shared\Transfer\CompanyRoleCollectionTransfer;
-use Generated\Shared\Transfer\PermissionCollectionTransfer;
class PermissionSynchronizer implements PermissionSynchronizerInterface
{
/**
- * @var int
+ * @var \FondOfImpala\Zed\CompanyTypeRole\Business\Reader\CompanyRoleReaderInterface
*/
- public const PAGINATION_MAX_PER_PAGE = 100;
-
- /**
- * @var \FondOfImpala\Zed\CompanyTypeRole\Business\Filter\CompanyTypeNameFilterInterface
- */
- protected $companyTypeNameFilter;
-
- /**
- * @var \FondOfImpala\Zed\CompanyTypeRole\Business\Intersection\PermissionIntersectionInterface
- */
- protected $permissionIntersection;
-
- /**
- * @var \FondOfImpala\Zed\CompanyTypeRole\Business\Builder\CompanyRoleCriteriaFilterBuilderInterface
- */
- protected $companyRoleCriteriaFilterBuilder;
+ protected $companyRoleReader;
/**
* @var \FondOfImpala\Zed\CompanyTypeRole\Dependency\Facade\CompanyTypeRoleToCompanyRoleFacadeInterface
@@ -39,37 +18,15 @@ class PermissionSynchronizer implements PermissionSynchronizerInterface
protected $companyRoleFacade;
/**
- * @var \FondOfImpala\Zed\CompanyTypeRole\Dependency\Facade\CompanyTypeRoleToPermissionFacadeInterface
- */
- protected $permissionFacade;
-
- /**
- * @var \FondOfImpala\Zed\CompanyTypeRole\CompanyTypeRoleConfig
- */
- protected $config;
-
- /**
- * @param \FondOfImpala\Zed\CompanyTypeRole\Business\Filter\CompanyTypeNameFilterInterface $companyTypeNameFilter
- * @param \FondOfImpala\Zed\CompanyTypeRole\Business\Intersection\PermissionIntersectionInterface $permissionIntersection
- * @param \FondOfImpala\Zed\CompanyTypeRole\Business\Builder\CompanyRoleCriteriaFilterBuilderInterface $companyRoleCriteriaFilterBuilder
+ * @param \FondOfImpala\Zed\CompanyTypeRole\Business\Reader\CompanyRoleReaderInterface $companyRoleReader
* @param \FondOfImpala\Zed\CompanyTypeRole\Dependency\Facade\CompanyTypeRoleToCompanyRoleFacadeInterface $companyRoleFacade
- * @param \FondOfImpala\Zed\CompanyTypeRole\Dependency\Facade\CompanyTypeRoleToPermissionFacadeInterface $permissionFacade
- * @param \FondOfImpala\Zed\CompanyTypeRole\CompanyTypeRoleConfig $config
*/
public function __construct(
- CompanyTypeNameFilterInterface $companyTypeNameFilter,
- PermissionIntersectionInterface $permissionIntersection,
- CompanyRoleCriteriaFilterBuilderInterface $companyRoleCriteriaFilterBuilder,
- CompanyTypeRoleToCompanyRoleFacadeInterface $companyRoleFacade,
- CompanyTypeRoleToPermissionFacadeInterface $permissionFacade,
- CompanyTypeRoleConfig $config
+ CompanyRoleReaderInterface $companyRoleReader,
+ CompanyTypeRoleToCompanyRoleFacadeInterface $companyRoleFacade
) {
- $this->companyTypeNameFilter = $companyTypeNameFilter;
- $this->permissionIntersection = $permissionIntersection;
- $this->companyRoleCriteriaFilterBuilder = $companyRoleCriteriaFilterBuilder;
+ $this->companyRoleReader = $companyRoleReader;
$this->companyRoleFacade = $companyRoleFacade;
- $this->permissionFacade = $permissionFacade;
- $this->config = $config;
}
/**
@@ -77,71 +34,24 @@ public function __construct(
*/
public function sync(): void
{
- $permissionCollectionTransfer = $this->permissionFacade->findAll();
-
- if ($permissionCollectionTransfer->getPermissions()->count() === 0) {
- return;
- }
-
- $companyRoleCollectionTransfer = $this->companyRoleFacade->getCompanyRoleCollection(
- $this->companyRoleCriteriaFilterBuilder->buildByPageAndMaxPerPage(1, 1),
- );
+ $syncableCompanyRoles = $this->companyRoleReader->findSyncableCompanyRoles();
- $paginationTransfer = $companyRoleCollectionTransfer->getPagination();
+ foreach ($syncableCompanyRoles as $syncableCompanyRole) {
+ $syncableCompanyRoleIds = $syncableCompanyRole->getIds();
- if ($paginationTransfer === null || $paginationTransfer->getNbResults() === 0) {
- return;
- }
-
- $page = 1;
- $total = $paginationTransfer->getNbResults();
-
- while ($page <= ceil($total / static::PAGINATION_MAX_PER_PAGE)) {
- $companyRoleCollectionTransfer = $this->companyRoleFacade->getCompanyRoleCollection(
- $this->companyRoleCriteriaFilterBuilder->buildByPageAndMaxPerPage(
- $page,
- static::PAGINATION_MAX_PER_PAGE,
- ),
- );
-
- $this->syncChunk($companyRoleCollectionTransfer, $permissionCollectionTransfer);
-
- $page++;
- }
- }
-
- /**
- * @param \Generated\Shared\Transfer\CompanyRoleCollectionTransfer $companyRoleCollectionTransfer
- * @param \Generated\Shared\Transfer\PermissionCollectionTransfer $permissionCollectionTransfer
- *
- * @return void
- */
- protected function syncChunk(
- CompanyRoleCollectionTransfer $companyRoleCollectionTransfer,
- PermissionCollectionTransfer $permissionCollectionTransfer
- ): void {
- foreach ($companyRoleCollectionTransfer->getRoles() as $companyRoleTransfer) {
- $companyRoleName = $companyRoleTransfer->getName();
- $companyTypeName = $this->companyTypeNameFilter->filterFromCompanyRole($companyRoleTransfer);
-
- if ($companyTypeName === null || $companyRoleName === null) {
- continue;
- }
-
- $permissionKeys = $this->config->getPermissionKeys($companyTypeName, $companyRoleName);
-
- if (count($permissionKeys) === 0) {
+ if (count($syncableCompanyRoleIds) < 1) {
continue;
}
- $intersectedPermissionCollectionTransfer = $this->permissionIntersection->intersect(
- $permissionCollectionTransfer,
- $permissionKeys,
- );
+ foreach (array_chunk($syncableCompanyRoleIds, 100) as $chunk) {
+ $companyRoleCollectionTransfer = $this->companyRoleReader->findCompanyRolesByCompanyRoleIds($chunk);
- $companyRoleTransfer->setPermissionCollection($intersectedPermissionCollectionTransfer);
+ foreach ($companyRoleCollectionTransfer->getRoles() as $companyRoleTransfer) {
+ $companyRoleTransfer->setPermissionCollection($syncableCompanyRole->getPermissions());
- $this->companyRoleFacade->update($companyRoleTransfer);
+ $this->companyRoleFacade->update($companyRoleTransfer);
+ }
+ }
}
}
}
diff --git a/src/FondOfImpala/Zed/CompanyTypeRole/CompanyTypeRoleConfig.php b/src/FondOfImpala/Zed/CompanyTypeRole/CompanyTypeRoleConfig.php
index 3f9e1ee..5bc9374 100644
--- a/src/FondOfImpala/Zed/CompanyTypeRole/CompanyTypeRoleConfig.php
+++ b/src/FondOfImpala/Zed/CompanyTypeRole/CompanyTypeRoleConfig.php
@@ -156,6 +156,14 @@ public function getPermissionKeys(string $companyTypeName, string $roleName): ar
return $permissionKeys[$companyTypeName][$roleName];
}
+ /**
+ * @return array>>
+ */
+ public function getGroupedPermissionKeys(): array
+ {
+ return $this->get(CompanyTypeRoleConstants::PERMISSION_KEYS, []);
+ }
+
/**
* @param array $permissionKeys
*
diff --git a/src/FondOfImpala/Zed/CompanyTypeRole/CompanyTypeRoleDependencyProvider.php b/src/FondOfImpala/Zed/CompanyTypeRole/CompanyTypeRoleDependencyProvider.php
index c4ab3e1..9f403ee 100644
--- a/src/FondOfImpala/Zed/CompanyTypeRole/CompanyTypeRoleDependencyProvider.php
+++ b/src/FondOfImpala/Zed/CompanyTypeRole/CompanyTypeRoleDependencyProvider.php
@@ -7,10 +7,14 @@
use FondOfImpala\Zed\CompanyTypeRole\Dependency\Facade\CompanyTypeRoleToCompanyTypeFacadeBridge;
use FondOfImpala\Zed\CompanyTypeRole\Dependency\Facade\CompanyTypeRoleToCompanyUserFacadeBridge;
use FondOfImpala\Zed\CompanyTypeRole\Dependency\Facade\CompanyTypeRoleToPermissionFacadeBridge;
+use FondOfImpala\Zed\CompanyTypeRole\Dependency\Facade\CompanyTypeRoleToPropelFacadeBridge;
use Orm\Zed\CompanyUser\Persistence\SpyCompanyUserQuery;
use Spryker\Zed\Kernel\AbstractBundleDependencyProvider;
use Spryker\Zed\Kernel\Container;
+/**
+ * @codeCoverageIgnore
+ */
class CompanyTypeRoleDependencyProvider extends AbstractBundleDependencyProvider
{
/**
@@ -38,6 +42,11 @@ class CompanyTypeRoleDependencyProvider extends AbstractBundleDependencyProvider
*/
public const FACADE_COMPANY_USER = 'FACADE_COMPANY_USER';
+ /**
+ * @var string
+ */
+ public const FACADE_PROPEL = 'FACADE_PROPEL';
+
/**
* @var string
*/
@@ -149,7 +158,9 @@ public function providePersistenceLayerDependencies(Container $container): Conta
{
$container = parent::providePersistenceLayerDependencies($container);
- return $this->addCompanyUserQuery($container);
+ $container = $this->addCompanyUserQuery($container);
+
+ return $this->addPropelFacade($container);
}
/**
@@ -165,4 +176,20 @@ protected function addCompanyUserQuery(Container $container): Container
return $container;
}
+
+ /**
+ * @param \Spryker\Zed\Kernel\Container $container
+ *
+ * @return \Spryker\Zed\Kernel\Container
+ */
+ protected function addPropelFacade(Container $container): Container
+ {
+ $container[static::FACADE_PROPEL] = static function (Container $container) {
+ return new CompanyTypeRoleToPropelFacadeBridge(
+ $container->getLocator()->propel()->facade(),
+ );
+ };
+
+ return $container;
+ }
}
diff --git a/src/FondOfImpala/Zed/CompanyTypeRole/Dependency/Facade/CompanyTypeRoleToPropelFacadeBridge.php b/src/FondOfImpala/Zed/CompanyTypeRole/Dependency/Facade/CompanyTypeRoleToPropelFacadeBridge.php
new file mode 100644
index 0000000..ff78beb
--- /dev/null
+++ b/src/FondOfImpala/Zed/CompanyTypeRole/Dependency/Facade/CompanyTypeRoleToPropelFacadeBridge.php
@@ -0,0 +1,29 @@
+propelFacade = $propelFacade;
+ }
+
+ /**
+ * @return string
+ */
+ public function getCurrentDatabaseEngine(): string
+ {
+ return $this->propelFacade->getCurrentDatabaseEngine();
+ }
+}
diff --git a/src/FondOfImpala/Zed/CompanyTypeRole/Dependency/Facade/CompanyTypeRoleToPropelFacadeInterface.php b/src/FondOfImpala/Zed/CompanyTypeRole/Dependency/Facade/CompanyTypeRoleToPropelFacadeInterface.php
new file mode 100644
index 0000000..eab3e73
--- /dev/null
+++ b/src/FondOfImpala/Zed/CompanyTypeRole/Dependency/Facade/CompanyTypeRoleToPropelFacadeInterface.php
@@ -0,0 +1,11 @@
+getProvidedDependency(CompanyTypeRoleDependencyProvider::PROPEL_QUERY_COMPANY_USER);
}
+
+ /**
+ * @return \FondOfImpala\Zed\CompanyTypeRole\Dependency\Facade\CompanyTypeRoleToPropelFacadeInterface
+ */
+ public function getPropelFacade(): CompanyTypeRoleToPropelFacadeInterface
+ {
+ return $this->getProvidedDependency(CompanyTypeRoleDependencyProvider::FACADE_PROPEL);
+ }
}
diff --git a/src/FondOfImpala/Zed/CompanyTypeRole/Persistence/CompanyTypeRoleRepository.php b/src/FondOfImpala/Zed/CompanyTypeRole/Persistence/CompanyTypeRoleRepository.php
index 2266aeb..96297da 100644
--- a/src/FondOfImpala/Zed/CompanyTypeRole/Persistence/CompanyTypeRoleRepository.php
+++ b/src/FondOfImpala/Zed/CompanyTypeRole/Persistence/CompanyTypeRoleRepository.php
@@ -2,10 +2,17 @@
namespace FondOfImpala\Zed\CompanyTypeRole\Persistence;
+use Generated\Shared\Transfer\CompanyRoleCollectionTransfer;
+use Orm\Zed\CompanyRole\Persistence\Base\SpyCompanyRoleQuery;
+use Orm\Zed\CompanyRole\Persistence\Map\SpyCompanyRoleTableMap;
use Orm\Zed\CompanyUser\Persistence\Map\SpyCompanyUserTableMap;
+use Orm\Zed\Permission\Persistence\Map\SpyPermissionTableMap;
use Spryker\Zed\Kernel\Persistence\AbstractRepository;
+use Spryker\Zed\Propel\PropelConfig;
/**
+ * @codeCoverageIgnore
+ *
* @method \FondOfImpala\Zed\CompanyTypeRole\Persistence\CompanyTypeRolePersistenceFactory getFactory()
*/
class CompanyTypeRoleRepository extends AbstractRepository implements CompanyTypeRoleRepositoryInterface
@@ -17,7 +24,7 @@ class CompanyTypeRoleRepository extends AbstractRepository implements CompanyTyp
*/
public function findActiveCompanyUserIdsByIdCustomer(int $idCustomer): array
{
- /** @phpstan-ignore-next-line */
+ // @phpstan-ignore-next-line
return $this->getFactory()->getCompanyUserQuery()
->clear()
->filterByIsActive(true)
@@ -26,4 +33,87 @@ public function findActiveCompanyUserIdsByIdCustomer(int $idCustomer): array
->find()
->toArray();
}
+
+ /**
+ * @param string $companyTypeName
+ * @param string $companyRoleName
+ * @param array $permissionKeys
+ *
+ * @return array
+ */
+ public function findSyncableCompanyRoleIds(
+ string $companyTypeName,
+ string $companyRoleName,
+ array $permissionKeys
+ ): array {
+ sort($permissionKeys);
+
+ $havingClause = sprintf(
+ "string_agg(%s, ',' ORDER BY %s) != ?",
+ SpyPermissionTableMap::COL_KEY,
+ SpyPermissionTableMap::COL_KEY,
+ );
+
+ if ($this->getFactory()->getPropelFacade()->getCurrentDatabaseEngine() !== PropelConfig::DB_ENGINE_PGSQL) {
+ $havingClause = sprintf(
+ 'GROUP_CONCAT(%s ORDER BY %s) != ?',
+ SpyPermissionTableMap::COL_KEY,
+ SpyPermissionTableMap::COL_KEY,
+ );
+ }
+
+ // @phpstan-ignore-next-line
+ return SpyCompanyRoleQuery::create()
+ ->useSpyCompanyRoleToPermissionQuery()
+ ->innerJoinPermission()
+ ->endUse()
+ ->useCompanyQuery()
+ ->useFosCompanyTypeQuery()
+ ->filterByName($companyTypeName)
+ ->endUse()
+ ->endUse()
+ ->filterByName($companyRoleName)
+ ->orderBy(SpyCompanyRoleTableMap::COL_ID_COMPANY_ROLE)
+ ->select([SpyCompanyRoleTableMap::COL_ID_COMPANY_ROLE])
+ ->groupByIdCompanyRole()
+ ->having($havingClause, implode(',', $permissionKeys))
+ ->find()
+ ->toArray();
+ }
+
+ /**
+ * @param array $companyRoleIds
+ *
+ * @return \Generated\Shared\Transfer\CompanyRoleCollectionTransfer
+ */
+ public function findCompanyRolesByCompanyRoleIds(
+ array $companyRoleIds
+ ): CompanyRoleCollectionTransfer {
+ $spyCompanyRoles = SpyCompanyRoleQuery::create()
+ ->filterByIdCompanyRole_In($companyRoleIds)
+ ->find();
+
+ $companyRoleCollectionTransfer = new CompanyRoleCollectionTransfer();
+
+ foreach ($spyCompanyRoles as $spyCompanyRole) {
+ $companyRoleTransfer = $this->getFactory()
+ ->createCompanyRoleMapper()
+ ->fromSpyCompanyRole($spyCompanyRole);
+
+ $companyTransfer = $this->getFactory()
+ ->createCompanyMapper()
+ ->fromSpyCompanyRole($spyCompanyRole);
+
+ $permissionCollectionTransfer = $this->getFactory()
+ ->createPermissionMapper()
+ ->fromSpyCompanyRole($spyCompanyRole);
+
+ $companyRoleTransfer->setPermissionCollection($permissionCollectionTransfer)
+ ->setCompany($companyTransfer);
+
+ $companyRoleCollectionTransfer->addRole($companyRoleTransfer);
+ }
+
+ return $companyRoleCollectionTransfer;
+ }
}
diff --git a/src/FondOfImpala/Zed/CompanyTypeRole/Persistence/CompanyTypeRoleRepositoryInterface.php b/src/FondOfImpala/Zed/CompanyTypeRole/Persistence/CompanyTypeRoleRepositoryInterface.php
index 9b5d1b9..58a546c 100644
--- a/src/FondOfImpala/Zed/CompanyTypeRole/Persistence/CompanyTypeRoleRepositoryInterface.php
+++ b/src/FondOfImpala/Zed/CompanyTypeRole/Persistence/CompanyTypeRoleRepositoryInterface.php
@@ -2,6 +2,8 @@
namespace FondOfImpala\Zed\CompanyTypeRole\Persistence;
+use Generated\Shared\Transfer\CompanyRoleCollectionTransfer;
+
interface CompanyTypeRoleRepositoryInterface
{
/**
@@ -10,4 +12,26 @@ interface CompanyTypeRoleRepositoryInterface
* @return array
*/
public function findActiveCompanyUserIdsByIdCustomer(int $idCustomer): array;
+
+ /**
+ * @param string $companyTypeName
+ * @param string $companyRoleName
+ * @param array $permissionKeys
+ *
+ * @return array
+ */
+ public function findSyncableCompanyRoleIds(
+ string $companyTypeName,
+ string $companyRoleName,
+ array $permissionKeys
+ ): array;
+
+ /**
+ * @param array $companyRoleIds
+ *
+ * @return \Generated\Shared\Transfer\CompanyRoleCollectionTransfer
+ */
+ public function findCompanyRolesByCompanyRoleIds(
+ array $companyRoleIds
+ ): CompanyRoleCollectionTransfer;
}
diff --git a/src/FondOfImpala/Zed/CompanyTypeRole/Persistence/Mapper/CompanyMapper.php b/src/FondOfImpala/Zed/CompanyTypeRole/Persistence/Mapper/CompanyMapper.php
new file mode 100644
index 0000000..1633e6e
--- /dev/null
+++ b/src/FondOfImpala/Zed/CompanyTypeRole/Persistence/Mapper/CompanyMapper.php
@@ -0,0 +1,25 @@
+getCompany();
+
+ return (new CompanyTransfer())
+ ->fromArray($spyCompany->toArray(), true);
+ }
+}
diff --git a/src/FondOfImpala/Zed/CompanyTypeRole/Persistence/Mapper/CompanyMapperInterface.php b/src/FondOfImpala/Zed/CompanyTypeRole/Persistence/Mapper/CompanyMapperInterface.php
new file mode 100644
index 0000000..fc092ff
--- /dev/null
+++ b/src/FondOfImpala/Zed/CompanyTypeRole/Persistence/Mapper/CompanyMapperInterface.php
@@ -0,0 +1,16 @@
+fromArray($spyCompanyRole->toArray(), true);
+ }
+}
diff --git a/src/FondOfImpala/Zed/CompanyTypeRole/Persistence/Mapper/CompanyRoleMapperInterface.php b/src/FondOfImpala/Zed/CompanyTypeRole/Persistence/Mapper/CompanyRoleMapperInterface.php
new file mode 100644
index 0000000..dfe0eb4
--- /dev/null
+++ b/src/FondOfImpala/Zed/CompanyTypeRole/Persistence/Mapper/CompanyRoleMapperInterface.php
@@ -0,0 +1,16 @@
+getPermissions() as $spyPermission) {
+ $permissionTransfer = (new PermissionTransfer())
+ ->fromArray($spyPermission->toArray(), true);
+
+ $permissionCollectionTransfer->addPermission($permissionTransfer);
+ }
+
+ return $permissionCollectionTransfer;
+ }
+}
diff --git a/src/FondOfImpala/Zed/CompanyTypeRole/Persistence/Mapper/PermissionMapperInterface.php b/src/FondOfImpala/Zed/CompanyTypeRole/Persistence/Mapper/PermissionMapperInterface.php
new file mode 100644
index 0000000..0d11a16
--- /dev/null
+++ b/src/FondOfImpala/Zed/CompanyTypeRole/Persistence/Mapper/PermissionMapperInterface.php
@@ -0,0 +1,16 @@
+companyRoleCriteriaFilterBuilder = new CompanyRoleCriteriaFilterBuilder();
- }
-
- /**
- * @return void
- */
- public function testBuildByPageAndMaxPerPage(): void
- {
- $page = 1;
- $maxPerPage = 10;
-
- $companyRoleCriteriaFilterTransfer = $this->companyRoleCriteriaFilterBuilder->buildByPageAndMaxPerPage(
- $page,
- $maxPerPage,
- );
-
- static::assertEquals(
- $page,
- $companyRoleCriteriaFilterTransfer->getPagination()->getPage(),
- );
-
- static::assertEquals(
- $maxPerPage,
- $companyRoleCriteriaFilterTransfer->getPagination()->getMaxPerPage(),
- );
-
- static::assertEquals(
- 'asc',
- $companyRoleCriteriaFilterTransfer->getFilter()->getOrderDirection(),
- );
-
- static::assertEquals(
- SpyCompanyRoleTableMap::COL_ID_COMPANY_ROLE,
- $companyRoleCriteriaFilterTransfer->getFilter()->getOrderBy(),
- );
- }
-}
diff --git a/tests/FondOfImpala/Zed/CompanyTypeRole/Business/CompanyTypeRoleBusinessFactoryTest.php b/tests/FondOfImpala/Zed/CompanyTypeRole/Business/CompanyTypeRoleBusinessFactoryTest.php
index a4c2729..b11c044 100644
--- a/tests/FondOfImpala/Zed/CompanyTypeRole/Business/CompanyTypeRoleBusinessFactoryTest.php
+++ b/tests/FondOfImpala/Zed/CompanyTypeRole/Business/CompanyTypeRoleBusinessFactoryTest.php
@@ -158,21 +158,18 @@ public function testCreatePermissionSynchronizer(): void
$this->containerMock->expects(static::atLeastOnce())
->method('has')
->withConsecutive(
- [CompanyTypeRoleDependencyProvider::FACADE_COMPANY_TYPE],
- [CompanyTypeRoleDependencyProvider::FACADE_COMPANY_ROLE],
[CompanyTypeRoleDependencyProvider::FACADE_PERMISSION],
+ [CompanyTypeRoleDependencyProvider::FACADE_COMPANY_ROLE],
)->willReturnOnConsecutiveCalls(true, true, true);
$this->containerMock->expects(static::atLeastOnce())
->method('get')
->withConsecutive(
- [CompanyTypeRoleDependencyProvider::FACADE_COMPANY_TYPE],
- [CompanyTypeRoleDependencyProvider::FACADE_COMPANY_ROLE],
[CompanyTypeRoleDependencyProvider::FACADE_PERMISSION],
+ [CompanyTypeRoleDependencyProvider::FACADE_COMPANY_ROLE],
)->willReturnOnConsecutiveCalls(
- $this->companyTypeFacadeMock,
- $this->companyRoleFacadeMock,
$this->permissionFacadeMock,
+ $this->companyRoleFacadeMock,
);
$permissionSynchronizer = $this->companyTypeRoleBusinessFactory->createPermissionSynchronizer();
diff --git a/tests/FondOfImpala/Zed/CompanyTypeRole/Business/Filter/CompanyTypeNameFilterTest.php b/tests/FondOfImpala/Zed/CompanyTypeRole/Business/Filter/CompanyTypeNameFilterTest.php
deleted file mode 100644
index d4745b8..0000000
--- a/tests/FondOfImpala/Zed/CompanyTypeRole/Business/Filter/CompanyTypeNameFilterTest.php
+++ /dev/null
@@ -1,192 +0,0 @@
-companyTypeFacadeMock = $this->getMockBuilder(CompanyTypeRoleToCompanyTypeFacadeInterface::class)
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->companyRoleTransferMock = $this->getMockBuilder(CompanyRoleTransfer::class)
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->companyTransferMock = $this->getMockBuilder(CompanyTransfer::class)
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->companyTypeTransferMock = $this->getMockBuilder(CompanyTypeTransfer::class)
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->companyTypeNameFilter = new CompanyTypeNameFilter($this->companyTypeFacadeMock);
- }
-
- /**
- * @return void
- */
- public function testFilterFromCompanyRole(): void
- {
- $fkCompanyType = 1;
- $companyTypeName = 'foo bar';
-
- $this->companyRoleTransferMock->expects(static::atLeastOnce())
- ->method('getCompany')
- ->willReturn($this->companyTransferMock);
-
- $this->companyTransferMock->expects(static::atLeastOnce())
- ->method('getFkCompanyType')
- ->willReturn($fkCompanyType);
-
- $this->companyTypeFacadeMock->expects(static::atLeastOnce())
- ->method('getCompanyTypeById')
- ->with(
- static::callback(
- static function (CompanyTypeTransfer $companyTypeTransfer) use ($fkCompanyType) {
- return $companyTypeTransfer->getIdCompanyType() === $fkCompanyType;
- },
- ),
- )->willReturn($this->companyTypeTransferMock);
-
- $this->companyTypeTransferMock->expects(static::atLeastOnce())
- ->method('getName')
- ->willReturn($companyTypeName);
-
- static::assertEquals(
- $companyTypeName,
- $this->companyTypeNameFilter->filterFromCompanyRole($this->companyRoleTransferMock),
- );
- }
-
- /**
- * @return void
- */
- public function testFilterFromCompanyRoleWithoutCompany(): void
- {
- $this->companyRoleTransferMock->expects(static::atLeastOnce())
- ->method('getCompany')
- ->willReturn(null);
-
- $this->companyTransferMock->expects(static::never())
- ->method('getFkCompanyType');
-
- $this->companyTypeFacadeMock->expects(static::never())
- ->method('getCompanyTypeById');
-
- $this->companyTypeTransferMock->expects(static::never())
- ->method('getName');
-
- static::assertEquals(
- null,
- $this->companyTypeNameFilter->filterFromCompanyRole($this->companyRoleTransferMock),
- );
- }
-
- /**
- * @return void
- */
- public function testFilterFromCompanyRoleWithoutCompanyType(): void
- {
- $fkCompanyType = 1;
-
- $this->companyRoleTransferMock->expects(static::atLeastOnce())
- ->method('getCompany')
- ->willReturn($this->companyTransferMock);
-
- $this->companyTransferMock->expects(static::atLeastOnce())
- ->method('getFkCompanyType')
- ->willReturn($fkCompanyType);
-
- $this->companyTypeFacadeMock->expects(static::atLeastOnce())
- ->method('getCompanyTypeById')
- ->with(
- static::callback(
- static function (CompanyTypeTransfer $companyTypeTransfer) use ($fkCompanyType) {
- return $companyTypeTransfer->getIdCompanyType() === $fkCompanyType;
- },
- ),
- )->willReturn(null);
-
- $this->companyTypeTransferMock->expects(static::never())
- ->method('getName');
-
- static::assertEquals(
- null,
- $this->companyTypeNameFilter->filterFromCompanyRole($this->companyRoleTransferMock),
- );
- }
-
- /**
- * @return void
- */
- public function testFilterFromCompanyRoleWithoutCompanyTypeName(): void
- {
- $fkCompanyType = 1;
-
- $this->companyRoleTransferMock->expects(static::atLeastOnce())
- ->method('getCompany')
- ->willReturn($this->companyTransferMock);
-
- $this->companyTransferMock->expects(static::atLeastOnce())
- ->method('getFkCompanyType')
- ->willReturn($fkCompanyType);
-
- $this->companyTypeFacadeMock->expects(static::atLeastOnce())
- ->method('getCompanyTypeById')
- ->with(
- static::callback(
- static function (CompanyTypeTransfer $companyTypeTransfer) use ($fkCompanyType) {
- return $companyTypeTransfer->getIdCompanyType() === $fkCompanyType;
- },
- ),
- )->willReturn($this->companyTypeTransferMock);
-
- $this->companyTypeTransferMock->expects(static::atLeastOnce())
- ->method('getName')
- ->willReturn(null);
-
- static::assertEquals(
- null,
- $this->companyTypeNameFilter->filterFromCompanyRole($this->companyRoleTransferMock),
- );
- }
-}
diff --git a/tests/FondOfImpala/Zed/CompanyTypeRole/Business/Mapper/PermissionKeyMapperTest.php b/tests/FondOfImpala/Zed/CompanyTypeRole/Business/Mapper/PermissionKeyMapperTest.php
new file mode 100644
index 0000000..831e68f
--- /dev/null
+++ b/tests/FondOfImpala/Zed/CompanyTypeRole/Business/Mapper/PermissionKeyMapperTest.php
@@ -0,0 +1,81 @@
+permissionCollectionTransferMock = $this->getMockBuilder(PermissionCollectionTransfer::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->permissionTransferMock = $this->getMockBuilder(PermissionTransfer::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->invalidPermissionTransferMock = $this->getMockBuilder(PermissionTransfer::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->permissionKeyMapper = new PermissionKeyMapper();
+ }
+
+ /**
+ * @return void
+ */
+ public function testFromPermissionCollection(): void
+ {
+ $permissionKeys = ['foo'];
+
+ $this->permissionCollectionTransferMock->expects(static::atLeastOnce())
+ ->method('getPermissions')
+ ->willReturn(new ArrayObject([
+ $this->invalidPermissionTransferMock,
+ $this->permissionTransferMock,
+ ]));
+
+ $this->invalidPermissionTransferMock->expects(static::atLeastOnce())
+ ->method('getKey')
+ ->willReturn(null);
+
+ $this->permissionTransferMock->expects(static::atLeastOnce())
+ ->method('getKey')
+ ->willReturn($permissionKeys[0]);
+
+ static::assertEquals(
+ $permissionKeys,
+ $this->permissionKeyMapper->fromPermissionCollection($this->permissionCollectionTransferMock),
+ );
+ }
+}
diff --git a/tests/FondOfImpala/Zed/CompanyTypeRole/Business/Model/CompanyRoleAssignerTest.php b/tests/FondOfImpala/Zed/CompanyTypeRole/Business/Model/CompanyRoleAssignerTest.php
index c5130e6..8778062 100644
--- a/tests/FondOfImpala/Zed/CompanyTypeRole/Business/Model/CompanyRoleAssignerTest.php
+++ b/tests/FondOfImpala/Zed/CompanyTypeRole/Business/Model/CompanyRoleAssignerTest.php
@@ -64,7 +64,7 @@ class CompanyRoleAssignerTest extends Unit
protected $availablePermissionCollectionMock;
/**
- * @var \ArrayObject|\Generated\Shared\Transfer\PermissionTransfer[]|\PHPUnit\Framework\MockObject\MockObject[]
+ * @var \ArrayObject<\Generated\Shared\Transfer\PermissionTransfer|\PHPUnit\Framework\MockObject\MockObject>
*/
protected $availablePermissionMocks;
@@ -74,7 +74,7 @@ class CompanyRoleAssignerTest extends Unit
protected $companyRolePermissionCollectionMock;
/**
- * @var \ArrayObject|\Generated\Shared\Transfer\PermissionTransfer[]|\PHPUnit\Framework\MockObject\MockObject[]
+ * @var \ArrayObject<\Generated\Shared\Transfer\PermissionTransfer|\PHPUnit\Framework\MockObject\MockObject>
*/
protected $companyRolePermissionMocks;
diff --git a/tests/FondOfImpala/Zed/CompanyTypeRole/Business/Reader/CompanyRoleReaderTest.php b/tests/FondOfImpala/Zed/CompanyTypeRole/Business/Reader/CompanyRoleReaderTest.php
new file mode 100644
index 0000000..b8d07b0
--- /dev/null
+++ b/tests/FondOfImpala/Zed/CompanyTypeRole/Business/Reader/CompanyRoleReaderTest.php
@@ -0,0 +1,185 @@
+permissionReaderMock = $this->getMockBuilder(PermissionReaderInterface::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->permissionKeyMapperMock = $this->getMockBuilder(PermissionKeyMapperInterface::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->repositoryMock = $this->getMockBuilder(CompanyTypeRoleRepositoryInterface::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->companyRoleCollectionTransferMock = $this->getMockBuilder(CompanyRoleCollectionTransfer::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->permissionSetTransferMock = $this->getMockBuilder(PermissionSetTransfer::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->invalidPermissionSetTransferMock = $this->getMockBuilder(PermissionSetTransfer::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->permissionCollectionTransferMock = $this->getMockBuilder(PermissionCollectionTransfer::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->permissionTransferMock = $this->getMockBuilder(PermissionTransfer::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->companyRoleReader = new CompanyRoleReader(
+ $this->permissionReaderMock,
+ $this->permissionKeyMapperMock,
+ $this->repositoryMock,
+ );
+ }
+
+ /**
+ * @return void
+ */
+ public function testFindCompanyRolesByCompanyRoleIds(): void
+ {
+ $companyRoleIds = [1, 2, 3];
+
+ $this->repositoryMock->expects(static::atLeastOnce())
+ ->method('findCompanyRolesByCompanyRoleIds')
+ ->with($companyRoleIds)
+ ->willReturn($this->companyRoleCollectionTransferMock);
+
+ static::assertEquals(
+ $this->companyRoleCollectionTransferMock,
+ $this->companyRoleReader->findCompanyRolesByCompanyRoleIds($companyRoleIds),
+ );
+ }
+
+ /**
+ * @return void
+ */
+ public function testFindSyncableCompanyRoles(): void
+ {
+ $companyType = 'foo';
+ $companyRoleName = 'bar';
+ $permissionKeys = ['key1'];
+ $companyRoleIds = [1, 2, 4];
+
+ $this->permissionReaderMock->expects(static::atLeastOnce())
+ ->method('getPermissionSets')
+ ->willReturn([$this->permissionSetTransferMock, $this->invalidPermissionSetTransferMock]);
+
+ $this->invalidPermissionSetTransferMock->expects(static::atLeastOnce())
+ ->method('getCompanyType')
+ ->willReturn(null);
+
+ $this->invalidPermissionSetTransferMock->expects(static::atLeastOnce())
+ ->method('getCompanyRoleName')
+ ->willReturn($companyRoleName);
+
+ $this->invalidPermissionSetTransferMock->expects(static::atLeastOnce())
+ ->method('getEntries')
+ ->willReturn(null);
+
+ $this->permissionSetTransferMock->expects(static::atLeastOnce())
+ ->method('getCompanyType')
+ ->willReturn($companyType);
+
+ $this->permissionSetTransferMock->expects(static::atLeastOnce())
+ ->method('getCompanyRoleName')
+ ->willReturn($companyRoleName);
+
+ $this->permissionSetTransferMock->expects(static::atLeastOnce())
+ ->method('getEntries')
+ ->willReturn($this->permissionCollectionTransferMock);
+
+ $this->permissionCollectionTransferMock->expects(static::atLeastOnce())
+ ->method('getPermissions')
+ ->willReturn(new ArrayObject([$this->permissionTransferMock]));
+
+ $this->permissionKeyMapperMock->expects(static::atLeastOnce())
+ ->method('fromPermissionCollection')
+ ->with($this->permissionCollectionTransferMock)
+ ->willReturn($permissionKeys);
+
+ $this->repositoryMock->expects(static::atLeastOnce())
+ ->method('findSyncableCompanyRoleIds')
+ ->with($companyType, $companyRoleName, $permissionKeys)
+ ->willReturn($companyRoleIds);
+
+ $syncableCompanyRoles = $this->companyRoleReader->findSyncableCompanyRoles();
+
+ static::assertCount(1, $syncableCompanyRoles);
+ static::assertEquals($companyType, $syncableCompanyRoles[0]->getCompanyType());
+ static::assertEquals($companyRoleName, $syncableCompanyRoles[0]->getName());
+ static::assertEquals($companyRoleIds, $syncableCompanyRoles[0]->getIds());
+ static::assertEquals($this->permissionCollectionTransferMock, $syncableCompanyRoles[0]->getPermissions());
+ }
+}
diff --git a/tests/FondOfImpala/Zed/CompanyTypeRole/Business/Reader/PermissionReaderTest.php b/tests/FondOfImpala/Zed/CompanyTypeRole/Business/Reader/PermissionReaderTest.php
new file mode 100644
index 0000000..36f911e
--- /dev/null
+++ b/tests/FondOfImpala/Zed/CompanyTypeRole/Business/Reader/PermissionReaderTest.php
@@ -0,0 +1,120 @@
+permissionIntersectionMock = $this->getMockBuilder(PermissionIntersectionInterface::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->configMock = $this->getMockBuilder(CompanyTypeRoleConfig::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->permissionFacadeMock = $this->getMockBuilder(CompanyTypeRoleToPermissionFacadeInterface::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->permissionCollectionTransferMock = $this->getMockBuilder(PermissionCollectionTransfer::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->permissionReader = new PermissionReader(
+ $this->permissionIntersectionMock,
+ $this->configMock,
+ $this->permissionFacadeMock,
+ );
+ }
+
+ /**
+ * @return void
+ */
+ public function testGetPermissions(): void
+ {
+ $this->permissionFacadeMock->expects(static::atLeastOnce())
+ ->method('findAll')
+ ->willReturn($this->permissionCollectionTransferMock);
+
+ static::assertEquals(
+ $this->permissionCollectionTransferMock,
+ $this->permissionReader->getPermissions(),
+ );
+ }
+
+ /**
+ * @return void
+ */
+ public function testGetPermissionSets(): void
+ {
+ $companyType = 'foo';
+ $companyRoleName = 'bar';
+
+ $groupedPermissionKeys = [
+ $companyType => [
+ $companyRoleName => [
+ 'key1',
+ 'key3',
+ ],
+ ],
+ ];
+
+ $this->configMock->expects(static::atLeastOnce())
+ ->method('getGroupedPermissionKeys')
+ ->willReturn($groupedPermissionKeys);
+
+ $this->permissionFacadeMock->expects(static::atLeastOnce())
+ ->method('findAll')
+ ->willReturn($this->permissionCollectionTransferMock);
+
+ $this->permissionIntersectionMock->expects(static::atLeastOnce())
+ ->method('intersect')
+ ->with($this->permissionCollectionTransferMock, $groupedPermissionKeys[$companyType][$companyRoleName])
+ ->willReturn($this->permissionCollectionTransferMock);
+
+ $permissionSets = $this->permissionReader->getPermissionSets();
+
+ static::assertCount(1, $permissionSets);
+ static::assertEquals($companyType, $permissionSets[0]->getCompanyType());
+ static::assertEquals($companyRoleName, $permissionSets[0]->getCompanyRoleName());
+ static::assertEquals($this->permissionCollectionTransferMock, $permissionSets[0]->getEntries());
+ }
+}
diff --git a/tests/FondOfImpala/Zed/CompanyTypeRole/Business/Synchronizer/PermissionSynchronizerTest.php b/tests/FondOfImpala/Zed/CompanyTypeRole/Business/Synchronizer/PermissionSynchronizerTest.php
index 1001527..5fdd057 100644
--- a/tests/FondOfImpala/Zed/CompanyTypeRole/Business/Synchronizer/PermissionSynchronizerTest.php
+++ b/tests/FondOfImpala/Zed/CompanyTypeRole/Business/Synchronizer/PermissionSynchronizerTest.php
@@ -4,35 +4,19 @@
use ArrayObject;
use Codeception\Test\Unit;
-use FondOfImpala\Zed\CompanyTypeRole\Business\Builder\CompanyRoleCriteriaFilterBuilderInterface;
-use FondOfImpala\Zed\CompanyTypeRole\Business\Filter\CompanyTypeNameFilterInterface;
-use FondOfImpala\Zed\CompanyTypeRole\Business\Intersection\PermissionIntersectionInterface;
-use FondOfImpala\Zed\CompanyTypeRole\CompanyTypeRoleConfig;
+use FondOfImpala\Zed\CompanyTypeRole\Business\Reader\CompanyRoleReaderInterface;
use FondOfImpala\Zed\CompanyTypeRole\Dependency\Facade\CompanyTypeRoleToCompanyRoleFacadeInterface;
-use FondOfImpala\Zed\CompanyTypeRole\Dependency\Facade\CompanyTypeRoleToPermissionFacadeInterface;
use Generated\Shared\Transfer\CompanyRoleCollectionTransfer;
-use Generated\Shared\Transfer\CompanyRoleCriteriaFilterTransfer;
use Generated\Shared\Transfer\CompanyRoleTransfer;
-use Generated\Shared\Transfer\PaginationTransfer;
use Generated\Shared\Transfer\PermissionCollectionTransfer;
-use Generated\Shared\Transfer\PermissionTransfer;
+use Generated\Shared\Transfer\SyncableCompanyRoleTransfer;
class PermissionSynchronizerTest extends Unit
{
- /**
- * @var \FondOfImpala\Zed\CompanyTypeRole\Business\Filter\CompanyTypeNameFilterInterface|\PHPUnit\Framework\MockObject\MockObject
- */
- protected $companyTypeNameFilterMock;
-
- /**
- * @var \FondOfImpala\Zed\CompanyTypeRole\Business\Intersection\PermissionIntersectionInterface|\PHPUnit\Framework\MockObject\MockObject
- */
- protected $permissionIntersectionMock;
-
- /**
- * @var \FondOfImpala\Zed\CompanyTypeRole\Business\Builder\CompanyRoleCriteriaFilterBuilderInterface&\PHPUnit\Framework\MockObject\MockObject|\PHPUnit\Framework\MockObject\MockObject
- */
- protected $companyRoleCriteriaFilterBuilderMock;
+ /**
+ * @var (\FondOfImpala\Zed\CompanyTypeRole\Business\Reader\CompanyRoleReaderInterface&\PHPUnit\Framework\MockObject\MockObject)|\PHPUnit\Framework\MockObject\MockObject
+ */
+ protected $companyRoleReaderMock;
/**
* @var \FondOfImpala\Zed\CompanyTypeRole\Dependency\Facade\CompanyTypeRoleToCompanyRoleFacadeInterface|\PHPUnit\Framework\MockObject\MockObject
@@ -40,49 +24,29 @@ class PermissionSynchronizerTest extends Unit
protected $companyRoleFacadeMock;
/**
- * @var \FondOfImpala\Zed\CompanyTypeRole\Dependency\Facade\CompanyTypeRoleToPermissionFacadeInterface|\PHPUnit\Framework\MockObject\MockObject
+ * @var (\Generated\Shared\Transfer\SyncableCompanyRoleTransfer&\PHPUnit\Framework\MockObject\MockObject)|\PHPUnit\Framework\MockObject\MockObject
*/
- protected $permissionFacadeMock;
-
- /**
- * @var \FondOfImpala\Zed\CompanyTypeRole\CompanyTypeRoleConfig|\PHPUnit\Framework\MockObject\MockObject
- */
- protected $configMock;
-
- /**
- * @var \Generated\Shared\Transfer\PermissionCollectionTransfer|\PHPUnit\Framework\MockObject\MockObject
- */
- protected $permissionCollectionTransferMock;
+ protected $syncableCompanyRoleTransfer;
/**
- * @var array<\PHPUnit\Framework\MockObject\MockObject>|array<\Generated\Shared\Transfer\PermissionTransfer>
+ * @var (\Generated\Shared\Transfer\SyncableCompanyRoleTransfer&\PHPUnit\Framework\MockObject\MockObject)|\PHPUnit\Framework\MockObject\MockObject
*/
- protected $permissionTransferMocks;
+ protected $invalidSyncableCompanyRoleTransfer;
/**
- * @var array<\Generated\Shared\Transfer\CompanyRoleCollectionTransfer|\PHPUnit\Framework\MockObject\MockObject>
+ * @var (\Generated\Shared\Transfer\CompanyRoleCollectionTransfer&\PHPUnit\Framework\MockObject\MockObject)|\PHPUnit\Framework\MockObject\MockObject
*/
- protected $companyRoleCollectionTransferMocks;
+ protected $companyRoleCollectionTransferMock;
/**
- * @var array<\PHPUnit\Framework\MockObject\MockObject>|array<\Generated\Shared\Transfer\CompanyRoleTransfer>
+ * @var (\Generated\Shared\Transfer\PermissionCollectionTransfer&\PHPUnit\Framework\MockObject\MockObject)|\PHPUnit\Framework\MockObject\MockObject
*/
- protected $companyRoleTransferMocks;
-
- /**
- * @var \Generated\Shared\Transfer\PermissionCollectionTransfer|\PHPUnit\Framework\MockObject\MockObject
- */
- protected $intersectedPermissionCollectionTransferMock;
-
- /**
- * @var array<\Generated\Shared\Transfer\CompanyRoleCriteriaFilterTransfer|\PHPUnit\Framework\MockObject\MockObject>
- */
- protected $companyRoleCriteriaFilterTransferMocks;
+ protected $permissionCollectionTransferMock;
/**
- * @var \Generated\Shared\Transfer\PaginationTransfer&\PHPUnit\Framework\MockObject\MockObject|\PHPUnit\Framework\MockObject\MockObject
+ * @var (\Generated\Shared\Transfer\CompanyRoleTransfer&\PHPUnit\Framework\MockObject\MockObject)|\PHPUnit\Framework\MockObject\MockObject
*/
- protected $paginationTransferMock;
+ protected $companyRoleTransferMock;
/**
* @var \FondOfImpala\Zed\CompanyTypeRole\Business\Synchronizer\PermissionSynchronizer
@@ -96,15 +60,7 @@ protected function _before(): void
{
parent::_before();
- $this->companyTypeNameFilterMock = $this->getMockBuilder(CompanyTypeNameFilterInterface::class)
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->permissionIntersectionMock = $this->getMockBuilder(PermissionIntersectionInterface::class)
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->companyRoleCriteriaFilterBuilderMock = $this->getMockBuilder(CompanyRoleCriteriaFilterBuilderInterface::class)
+ $this->companyRoleReaderMock = $this->getMockBuilder(CompanyRoleReaderInterface::class)
->disableOriginalConstructor()
->getMock();
@@ -112,69 +68,30 @@ protected function _before(): void
->disableOriginalConstructor()
->getMock();
- $this->permissionFacadeMock = $this->getMockBuilder(CompanyTypeRoleToPermissionFacadeInterface::class)
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->configMock = $this->getMockBuilder(CompanyTypeRoleConfig::class)
+ $this->syncableCompanyRoleTransfer = $this->getMockBuilder(SyncableCompanyRoleTransfer::class)
->disableOriginalConstructor()
->getMock();
- $this->permissionCollectionTransferMock = $this->getMockBuilder(PermissionCollectionTransfer::class)
+ $this->invalidSyncableCompanyRoleTransfer = $this->getMockBuilder(SyncableCompanyRoleTransfer::class)
->disableOriginalConstructor()
->getMock();
- $this->permissionTransferMocks = [
- $this->getMockBuilder(PermissionTransfer::class)
- ->disableOriginalConstructor()
- ->getMock(),
- ];
-
- $this->companyRoleCollectionTransferMocks = [
- $this->getMockBuilder(CompanyRoleCollectionTransfer::class)
- ->disableOriginalConstructor()
- ->getMock(),
+ $this->companyRoleCollectionTransferMock =
$this->getMockBuilder(CompanyRoleCollectionTransfer::class)
->disableOriginalConstructor()
- ->getMock(),
- ];
+ ->getMock();
- $this->companyRoleTransferMocks = [
- $this->getMockBuilder(CompanyRoleTransfer::class)
- ->disableOriginalConstructor()
- ->getMock(),
- $this->getMockBuilder(CompanyRoleTransfer::class)
- ->disableOriginalConstructor()
- ->getMock(),
- $this->getMockBuilder(CompanyRoleTransfer::class)
- ->disableOriginalConstructor()
- ->getMock(),
- ];
-
- $this->intersectedPermissionCollectionTransferMock = $this->getMockBuilder(PermissionCollectionTransfer::class)
+ $this->permissionCollectionTransferMock = $this->getMockBuilder(PermissionCollectionTransfer::class)
->disableOriginalConstructor()
->getMock();
- $this->companyRoleCriteriaFilterTransferMocks = [
- $this->getMockBuilder(CompanyRoleCriteriaFilterTransfer::class)
+ $this->companyRoleTransferMock = $this->getMockBuilder(CompanyRoleTransfer::class)
->disableOriginalConstructor()
- ->getMock(),
- $this->getMockBuilder(CompanyRoleCriteriaFilterTransfer::class)
- ->disableOriginalConstructor()
- ->getMock(),
- ];
-
- $this->paginationTransferMock = $this->getMockBuilder(PaginationTransfer::class)
- ->disableOriginalConstructor()
- ->getMock();
+ ->getMock();
$this->permissionSynchronizer = new PermissionSynchronizer(
- $this->companyTypeNameFilterMock,
- $this->permissionIntersectionMock,
- $this->companyRoleCriteriaFilterBuilderMock,
+ $this->companyRoleReaderMock,
$this->companyRoleFacadeMock,
- $this->permissionFacadeMock,
- $this->configMock,
);
}
@@ -183,98 +100,47 @@ protected function _before(): void
*/
public function testSync(): void
{
- $companyTypeNames = ['TypeA', 'TypeB'];
- $companyRoleNames = ['RoleA', 'RoleB'];
- $permissionKeys = ['PermissionA'];
+ $companyRoleIds = [1];
- $this->permissionFacadeMock->expects(static::atLeastOnce())
- ->method('findAll')
- ->willReturn($this->permissionCollectionTransferMock);
+ $this->companyRoleReaderMock->expects(static::atLeastOnce())
+ ->method('findSyncableCompanyRoles')
+ ->willReturn([
+ $this->invalidSyncableCompanyRoleTransfer,
+ $this->syncableCompanyRoleTransfer,
+ ]);
- $this->permissionCollectionTransferMock->expects(static::atLeastOnce())
- ->method('getPermissions')
- ->willReturn(new ArrayObject($this->permissionTransferMocks));
+ $this->invalidSyncableCompanyRoleTransfer->expects(static::atLeastOnce())
+ ->method('getIds')
+ ->willReturn([]);
- $this->companyRoleCriteriaFilterBuilderMock->expects(static::atLeastOnce())
- ->method('buildByPageAndMaxPerPage')
- ->withConsecutive([1, 1], [1, PermissionSynchronizer::PAGINATION_MAX_PER_PAGE])
- ->willReturnOnConsecutiveCalls(
- $this->companyRoleCriteriaFilterTransferMocks[0],
- $this->companyRoleCriteriaFilterTransferMocks[1],
- );
+ $this->invalidSyncableCompanyRoleTransfer->expects(static::never())
+ ->method('getPermissions');
- $this->companyRoleFacadeMock->expects(static::atLeastOnce())
- ->method('getCompanyRoleCollection')
- ->withConsecutive(
- [$this->companyRoleCriteriaFilterTransferMocks[0]],
- [$this->companyRoleCriteriaFilterTransferMocks[1]],
- )->willReturnOnConsecutiveCalls(
- $this->companyRoleCollectionTransferMocks[0],
- $this->companyRoleCollectionTransferMocks[1],
- );
+ $this->syncableCompanyRoleTransfer->expects(static::atLeastOnce())
+ ->method('getIds')
+ ->willReturn($companyRoleIds);
- $this->companyRoleCollectionTransferMocks[0]->expects(static::atLeastOnce())
- ->method('getPagination')
- ->willReturn($this->paginationTransferMock);
+ $this->syncableCompanyRoleTransfer->expects(static::atLeastOnce())
+ ->method('getPermissions')
+ ->willReturn($this->permissionCollectionTransferMock);
- $this->paginationTransferMock->expects(static::atLeastOnce())
- ->method('getNbResults')
- ->willReturn(count($this->companyRoleTransferMocks));
+ $this->companyRoleReaderMock->expects(static::atLeastOnce())
+ ->method('findCompanyRolesByCompanyRoleIds')
+ ->with($companyRoleIds)
+ ->willReturn($this->companyRoleCollectionTransferMock);
- $this->companyRoleCollectionTransferMocks[1]->expects(static::atLeastOnce())
+ $this->companyRoleCollectionTransferMock->expects(static::atLeastOnce())
->method('getRoles')
- ->willReturn(new ArrayObject($this->companyRoleTransferMocks));
-
- $this->companyRoleTransferMocks[0]->expects(static::atLeastOnce())
- ->method('getName')
- ->willReturn($companyRoleNames[0]);
+ ->willReturn(new ArrayObject([$this->companyRoleTransferMock]));
- $this->companyRoleTransferMocks[1]->expects(static::atLeastOnce())
- ->method('getName')
- ->willReturn($companyRoleNames[1]);
-
- $this->companyRoleTransferMocks[2]->expects(static::atLeastOnce())
- ->method('getName')
- ->willReturn(null);
-
- $this->companyTypeNameFilterMock->expects(static::atLeastOnce())
- ->method('filterFromCompanyRole')
- ->withConsecutive(
- [$this->companyRoleTransferMocks[0]],
- [$this->companyRoleTransferMocks[1]],
- [$this->companyRoleTransferMocks[2]],
- )->willReturnOnConsecutiveCalls(
- $companyTypeNames[0],
- $companyTypeNames[1],
- null,
- );
-
- $this->configMock->expects(static::atLeastOnce())
- ->method('getPermissionKeys')
- ->withConsecutive(
- [$companyTypeNames[0], $companyRoleNames[0]],
- [$companyTypeNames[1], $companyRoleNames[1]],
- )->willReturnOnConsecutiveCalls([], $permissionKeys);
-
- $this->permissionIntersectionMock->expects(static::atLeastOnce())
- ->method('intersect')
- ->with($this->permissionCollectionTransferMock, $permissionKeys)
- ->willReturn($this->intersectedPermissionCollectionTransferMock);
-
- $this->companyRoleTransferMocks[0]->expects(static::never())
- ->method('setPermissionCollection');
-
- $this->companyRoleTransferMocks[1]->expects(static::atLeastOnce())
+ $this->companyRoleTransferMock->expects(static::atLeastOnce())
->method('setPermissionCollection')
- ->with($this->intersectedPermissionCollectionTransferMock)
- ->willReturn($this->companyRoleTransferMocks);
-
- $this->companyRoleTransferMocks[2]->expects(static::never())
- ->method('setPermissionCollection');
+ ->with($this->permissionCollectionTransferMock)
+ ->willReturn($this->companyRoleTransferMock);
$this->companyRoleFacadeMock->expects(static::atLeastOnce())
->method('update')
- ->with($this->companyRoleTransferMocks[1]);
+ ->with($this->companyRoleTransferMock);
$this->permissionSynchronizer->sync();
}
diff --git a/tests/FondOfImpala/Zed/CompanyTypeRole/CompanyTypeRoleDependencyProviderTest.php b/tests/FondOfImpala/Zed/CompanyTypeRole/CompanyTypeRoleDependencyProviderTest.php
deleted file mode 100644
index c6d7e7d..0000000
--- a/tests/FondOfImpala/Zed/CompanyTypeRole/CompanyTypeRoleDependencyProviderTest.php
+++ /dev/null
@@ -1,130 +0,0 @@
-containerMock = $this->getMockBuilder(Container::class)
- ->setMethodsExcept(['factory', 'set', 'offsetSet', 'get', 'offsetGet'])
- ->getMock();
-
- $this->locatorMock = $this->getMockBuilder(Locator::class)
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->bundleProxyMock = $this->getMockBuilder(BundleProxy::class)
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->companyRoleFacadeMock = $this->getMockBuilder(CompanyRoleFacadeInterface::class)
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->companyTypeFacadeMock = $this->getMockBuilder(CompanyTypeFacadeInterface::class)
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->permissionFacadeMock = $this->getMockBuilder(PermissionFacadeInterface::class)
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->companyTypeRoleDependencyProvider = new CompanyTypeRoleDependencyProvider();
- }
-
- /**
- * @return void
- */
- public function testProvideBusinessLayerDependencies(): void
- {
- $this->containerMock->expects($this->atLeastOnce())
- ->method('getLocator')
- ->willReturn($this->locatorMock);
-
- $this->locatorMock->expects($this->exactly(3))
- ->method('__call')
- ->withConsecutive(['companyRole'], ['companyType'], ['permission'])
- ->willReturn($this->bundleProxyMock);
-
- $this->bundleProxyMock->expects($this->exactly(3))
- ->method('__call')
- ->with('facade')
- ->willReturnOnConsecutiveCalls(
- $this->companyRoleFacadeMock,
- $this->companyTypeFacadeMock,
- $this->permissionFacadeMock,
- );
-
- $this->assertEquals(
- $this->containerMock,
- $this->companyTypeRoleDependencyProvider->provideBusinessLayerDependencies($this->containerMock),
- );
-
- $this->assertInstanceOf(
- CompanyTypeRoleToCompanyRoleFacadeBridge::class,
- $this->containerMock[CompanyTypeRoleDependencyProvider::FACADE_COMPANY_ROLE],
- );
-
- $this->assertInstanceOf(
- CompanyTypeRoleToCompanyTypeFacadeBridge::class,
- $this->containerMock[CompanyTypeRoleDependencyProvider::FACADE_COMPANY_TYPE],
- );
-
- $this->assertInstanceOf(
- CompanyTypeRoleToPermissionFacadeBridge::class,
- $this->containerMock[CompanyTypeRoleDependencyProvider::FACADE_PERMISSION],
- );
- }
-}
diff --git a/tests/FondOfImpala/Zed/CompanyTypeRole/Dependency/Facade/CompanyTypeRoleToPropelFacadeBridgeTest.php b/tests/FondOfImpala/Zed/CompanyTypeRole/Dependency/Facade/CompanyTypeRoleToPropelFacadeBridgeTest.php
new file mode 100644
index 0000000..934a396
--- /dev/null
+++ b/tests/FondOfImpala/Zed/CompanyTypeRole/Dependency/Facade/CompanyTypeRoleToPropelFacadeBridgeTest.php
@@ -0,0 +1,50 @@
+facadeMock = $this->getMockBuilder(PropelFacadeInterface::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->bridge = new CompanyTypeRoleToPropelFacadeBridge($this->facadeMock);
+ }
+
+ /**
+ * @return void
+ */
+ public function testGetCurrentDatabaseEngine(): void
+ {
+ $currentDatabaseEngine = 'psql';
+
+ $this->facadeMock->expects(static::atLeastOnce())
+ ->method('getCurrentDatabaseEngine')
+ ->willReturn($currentDatabaseEngine);
+
+ static::assertEquals(
+ $currentDatabaseEngine,
+ $this->bridge->getCurrentDatabaseEngine(),
+ );
+ }
+}