diff --git a/datamodels/2.x/itop-portal-base/portal/src/Helper/ApplicationHelper.php b/datamodels/2.x/itop-portal-base/portal/src/Helper/ApplicationHelper.php index 64e70c98e..cbd7c6a4f 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Helper/ApplicationHelper.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Helper/ApplicationHelper.php @@ -100,9 +100,9 @@ class ApplicationHelper try { // Allowed profiles - if ($oBrick->GetAllowedProfilesOql() !== null && $oBrick->GetAllowedProfilesOql() !== '') + if (utils::IsNotNullOrEmptyString($oBrick->GetAllowedProfilesOql())) { - $oSearch = DBObjectSearch::FromOQL($oBrick->GetAllowedProfilesOql()); + $oSearch = DBObjectSearch::FromOQL_AllData($oBrick->GetAllowedProfilesOql()); $oSet = new DBObjectSet($oSearch); while ($oProfile = $oSet->Fetch()) { @@ -111,9 +111,9 @@ class ApplicationHelper } // Denied profiles - if ($oBrick->GetDeniedProfilesOql() !== null && $oBrick->GetDeniedProfilesOql() !== '') + if (utils::IsNotNullOrEmptyString($oBrick->GetDeniedProfilesOql())) { - $oSearch = DBObjectSearch::FromOQL($oBrick->GetDeniedProfilesOql()); + $oSearch = DBObjectSearch::FromOQL_AllData($oBrick->GetDeniedProfilesOql()); $oSet = new DBObjectSet($oSearch); while ($oProfile = $oSet->Fetch()) { diff --git a/tests/php-unit-tests/unitary-tests/datamodels/2.x/itop-portal-base/ApplicationHelperTest.php b/tests/php-unit-tests/unitary-tests/datamodels/2.x/itop-portal-base/ApplicationHelperTest.php new file mode 100644 index 000000000..02f903e10 --- /dev/null +++ b/tests/php-unit-tests/unitary-tests/datamodels/2.x/itop-portal-base/ApplicationHelperTest.php @@ -0,0 +1,96 @@ + + * + */ + +use Combodo\iTop\Portal\Brick\AbstractBrick; +use Combodo\iTop\Portal\Helper\ApplicationHelper; +use Combodo\iTop\Test\UnitTest\ItopDataTestCase; + +/** + * @covers \Combodo\iTop\Portal\Helper\RequestManipulatorHelper + */ +class ApplicationHelperTest extends ItopDataTestCase +{ + const PASSWORD = "aBCDEFG@123456789"; + + protected function LoadRequiredItopFiles(): void + { + parent::LoadRequiredItopFiles(); + $this->RequireOnceItopFile('datamodels/2.x/itop-portal-base/portal/src/Helper/ApplicationHelper.php'); + } + + public static function LoadBrickSecurityProvider() + { + return [ + 'can access admin profile' => [ + 'associated_profile' => 'Administrator', + ], + 'cannot access admin profile' => [ + 'associated_profile' => 'Portal user', + ], + ]; + } + + /** + * @dataProvider LoadBrickSecurityProvider + */ + public function testLoadBrickSecurity_GetAllowedProfilesOql(string $sAssociatedProfileName) + { + $oBrick = $this->createMock(AbstractBrick::class); + $oBrick->expects($this->any()) + ->method('GetAllowedProfilesOql') + ->willReturn("SELECT URP_Profiles WHERE name IN ('Administrator')"); + + $oBrick->expects($this->exactly(1)) + ->method('AddAllowedProfile') + ->willReturn("Administrator"); + + $_SESSION = []; + $oUser = $this->CreateContactlessUser("$sAssociatedProfileName-" . uniqid(), self::$aURP_Profiles[$sAssociatedProfileName], self::PASSWORD); + \UserRights::Login($oUser->Get('login')); + + $this->InvokeNonPublicStaticMethod(ApplicationHelper::class, 'LoadBrickSecurity', [$oBrick]); + } + + /** + * @dataProvider LoadBrickSecurityProvider + */ + public function testLoadBrickSecurity_GetDeniedProfilesOql(string $sAssociatedProfileName) + { + $oBrick = $this->createMock(AbstractBrick::class); + $oBrick->expects($this->any()) + ->method('GetDeniedProfilesOql') + ->willReturn("SELECT URP_Profiles WHERE name IN ('Administrator')"); + + $oBrick->expects($this->exactly(1)) + ->method('AddDeniedProfile') + ->willReturn("Administrator"); + + $_SESSION = []; + $oUser = $this->CreateContactlessUser("$sAssociatedProfileName-" . uniqid(), self::$aURP_Profiles[$sAssociatedProfileName], self::PASSWORD); + \UserRights::Login($oUser->Get('login')); + + $this->InvokeNonPublicStaticMethod(ApplicationHelper::class, 'LoadBrickSecurity', [$oBrick]); + } + + +}