adjust tests

This commit is contained in:
Daniel Seifert 2024-09-22 13:24:00 +02:00
parent 30e13cb0dc
commit be1f482aba
29 changed files with 690 additions and 583 deletions

View File

@ -40,9 +40,7 @@ class d3force_2fa extends d3user_totp
/**
* @return bool
* @throws ContainerExceptionInterface
* @throws ModuleSettingNotFountException
* @throws NotFoundExceptionInterface
*/
protected function authorize(): bool
{
@ -62,8 +60,6 @@ class d3force_2fa extends d3user_totp
/**
* @return bool
* @throws ModuleSettingNotFountException
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
private function d3IsAdminForce2FA(): bool
{
@ -71,10 +67,14 @@ class d3force_2fa extends d3user_totp
return false;
}
return (bool) $this->getModuleConfiguration()->getModuleSetting('D3_TOTP_ADMIN_FORCE_2FA')->getValue();
}
protected function getModuleConfiguration(): ModuleConfiguration
{
$container = ContainerFactory::getInstance()->getContainer();
$moduleConfigurationBridge = $container->get(ModuleConfigurationDaoBridgeInterface::class);
/** @var ModuleConfiguration $moduleConfiguration */
$moduleConfiguration = $moduleConfigurationBridge->get(Constants::OXID_MODULE_ID);
return (bool) $moduleConfiguration->getModuleSetting('D3_TOTP_ADMIN_FORCE_2FA')->getValue();
return $moduleConfigurationBridge->get(Constants::OXID_MODULE_ID);
}
}

View File

@ -126,7 +126,7 @@ class d3totpadminlogin extends AdminController
public function getBackupCodeCountMessage()
{
/** @var d3_totp_user $user */
$user = oxNew(User::class);
$user = $this->d3TotpGetUserObject();
$userId = $user->d3TotpGetCurrentUser();
$oBackupCodeList = $this->d3GetBackupCodeListObject();
@ -172,7 +172,7 @@ class d3totpadminlogin extends AdminController
{
$session = $this->d3TotpGetSession();
/** @var d3_totp_user $user */
$user = oxNew(User::class);
$user = $this->d3TotpGetUserObject();
$userId = $user->d3TotpGetCurrentUser();
try {
@ -206,7 +206,7 @@ class d3totpadminlogin extends AdminController
}
/**
* @param string|null $sTotp
* @param string $sTotp
* @param d3totp $totp
* @return bool
* @throws ContainerExceptionInterface
@ -215,7 +215,7 @@ class d3totpadminlogin extends AdminController
* @throws DBALException
* @throws d3totp_wrongOtpException
*/
public function d3TotpHasValidTotp(string $sTotp = null, d3totp $totp): bool
public function d3TotpHasValidTotp(string $sTotp, d3totp $totp): bool
{
return $this->d3TotpGetSession()->getVariable(d3totp_conf::SESSION_ADMIN_AUTH)
|| $totp->verify($sTotp);

View File

@ -84,7 +84,7 @@ class d3user_totp extends AdminDetailsController
{
parent::save();
$aParams = Registry::getRequest()->getRequestEscapedParameter("editval");
$aParams = Registry::getRequest()->getRequestEscapedParameter("editval") ?? [];
try {
$oTotp = $this->getTotpObject();
@ -92,7 +92,7 @@ class d3user_totp extends AdminDetailsController
Assert::that($oTotp->checkIfAlreadyExist($this->getCurrentUserId()))->false('D3_TOTP_ALREADY_EXIST');
$oTotpBackupCodes = $this->getBackupcodeListObject();
if ($aParams['d3totp__oxid']) {
if (isset($aParams['d3totp__oxid'])) {
$oTotp->load($aParams['d3totp__oxid']);
} else {
$aParams['d3totp__usetotp'] = 1;

View File

@ -37,7 +37,7 @@ class d3totp extends BaseModel
{
protected const ENC_KEY = 'fq45QS09_fqyx09239QQ';
public string $tableName = 'd3totp';
protected $_sCoreTable = 'd3totp';
public null|string $userId = null;
public null|TOTP $totp = null;
protected int $timeWindow = 2;
@ -47,7 +47,7 @@ class d3totp extends BaseModel
*/
public function __construct()
{
$this->init($this->tableName);
$this->init($this->getCoreTableName());
parent::__construct();
}
@ -64,7 +64,7 @@ class d3totp extends BaseModel
$this->userId = $userId;
if ($this->getDbConnection()
->prepare("SHOW TABLES LIKE ".$this->getDbConnection()->quote($this->tableName))
->prepare("SHOW TABLES LIKE ".$this->getDbConnection()->quote($this->getCoreTableName()))
->executeQuery()
->fetchOne()
) {
@ -75,7 +75,10 @@ class d3totp extends BaseModel
$qb->expr()->eq('oxuserid', $qb->createNamedParameter($userId))
)
->setMaxResults(1);
$this->load($qb->execute()->fetchOne());
if ($oxid = $qb->execute()->fetchOne()) {
$this->load($oxid);
}
}
}

View File

@ -101,11 +101,7 @@ class d3_totp_utils extends d3_totp_utils_parent
return false;
}
$container = ContainerFactory::getInstance()->getContainer();
$moduleConfigurationBridge = $container->get(ModuleConfigurationDaoBridgeInterface::class);
/** @var ModuleConfiguration $moduleConfiguration */
$moduleConfiguration = $moduleConfigurationBridge->get(Constants::OXID_MODULE_ID);
return (bool) $moduleConfiguration->getModuleSetting('D3_TOTP_ADMIN_FORCE_2FA')->getValue();
return (bool) $this->getModuleConfiguration()->getModuleSetting('D3_TOTP_ADMIN_FORCE_2FA')->getValue();
}
/**
@ -116,4 +112,12 @@ class d3_totp_utils extends d3_totp_utils_parent
{
return $blAuth;
}
protected function getModuleConfiguration(): ModuleConfiguration
{
$container = ContainerFactory::getInstance()->getContainer();
$moduleConfigurationBridge = $container->get(ModuleConfigurationDaoBridgeInterface::class);
/** @var ModuleConfiguration $moduleConfiguration */
return $moduleConfigurationBridge->get(Constants::OXID_MODULE_ID);
}
}

View File

@ -11,12 +11,14 @@
* @link https://www.oxidmodule.com
*/
namespace D3\Totp\tests\unit\Application\Controller\Admin;
namespace D3\Totp\Tests\Unit\Application\Controller\Admin;
use D3\Totp\Application\Controller\Admin\d3force_2fa;
use D3\Totp\Application\Model\d3totp_conf;
use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\Session;
use OxidEsales\EshopCommunity\Internal\Framework\Module\Configuration\DataObject\ModuleConfiguration;
use OxidEsales\EshopCommunity\Internal\Framework\Module\Setting\Setting;
use PHPUnit\Framework\MockObject\MockObject;
use ReflectionException;
@ -62,19 +64,28 @@ class d3force_2faTest extends d3user_totpTest
* @test
* @return void
* @throws ReflectionException
* @covers \D3\Totp\Application\Controller\Admin\d3force_2fa::_authorize
* @covers \D3\Totp\Application\Controller\Admin\d3force_2fa::authorize
* @covers \D3\Totp\Application\Controller\Admin\d3force_2fa::d3IsAdminForce2FA
* @dataProvider authorizeDataProvider
*/
public function testAuthorize($expected, $isAdmin, $force2FA, $givenUserId)
{
/** @var d3force_2fa|MockObject $oController */
$oController = $this->getMockBuilder(d3force_2fa::class)
->onlyMethods(['isAdmin'])
$settingMock = $this->d3getMockBuilder(Setting::class)
->onlyMethods(['getValue'])
->getMock();
$oController->expects($this->once())->method('isAdmin')->willReturn($isAdmin);
$settingMock->method('getValue')->willReturn($force2FA);
Registry::getConfig()->setConfigParam('D3_TOTP_ADMIN_FORCE_2FA', $force2FA);
$moduleConfigurationMock = $this->d3getMockBuilder(ModuleConfiguration::class)
->onlyMethods(['getModuleSetting'])
->getMock();
$moduleConfigurationMock->method('getModuleSetting')->willReturn($settingMock);
/** @var d3force_2fa|MockObject $oController */
$oController = $this->d3getMockBuilder(d3force_2fa::class)
->onlyMethods(['isAdmin', 'getModuleConfiguration'])
->getMock();
$oController->expects($this->any())->method('isAdmin')->willReturn($isAdmin);
$oController->method('getModuleConfiguration')->willReturn($moduleConfigurationMock);
Registry::getSession()->setVariable(d3totp_conf::OXID_ADMIN_AUTH, $givenUserId);
@ -82,7 +93,7 @@ class d3force_2faTest extends d3user_totpTest
$expected,
$this->callMethod(
$oController,
'_authorize'
'authorize'
)
);
}
@ -90,7 +101,7 @@ class d3force_2faTest extends d3user_totpTest
/**
* @return array[]
*/
public function authorizeDataProvider(): array
public static function authorizeDataProvider(): array
{
return [
'noAdmin' => [false, false, true, 'userId'],

View File

@ -13,7 +13,7 @@
declare(strict_types=1);
namespace D3\Totp\tests\unit\Application\Controller\Admin;
namespace D3\Totp\Tests\Unit\Application\Controller\Admin;
use D3\TestingTools\Development\CanAccessRestricted;
use D3\Totp\Application\Controller\Admin\d3totpadminlogin;
@ -23,7 +23,7 @@ use D3\Totp\Application\Model\d3totp_conf;
use D3\Totp\Application\Model\Exceptions\d3totp_wrongOtpException;
use D3\Totp\Modules\Application\Controller\Admin\d3_totp_LoginController;
use D3\Totp\Modules\Application\Model\d3_totp_user;
use D3\Totp\tests\unit\d3TotpUnitTestCase;
use D3\Totp\Tests\Unit\d3TotpUnitTestCase;
use OxidEsales\Eshop\Application\Controller\Admin\LoginController;
use OxidEsales\Eshop\Application\Model\User;
use OxidEsales\Eshop\Core\Registry;
@ -62,14 +62,14 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
* @test
* @return void
* @throws ReflectionException
* @covers \D3\Totp\Application\Controller\Admin\d3totpadminlogin::_authorize
* @covers \D3\Totp\Application\Controller\Admin\d3totpadminlogin::authorize
*/
public function testAuthorize()
{
$this->assertTrue(
$this->callMethod(
$this->_oController,
'_authorize'
'authorize'
)
);
}
@ -103,8 +103,13 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
*/
public function isTotpIsNotRequiredPassed($hasAuthAlready, $totpActive, $expected)
{
$oUserMock = $this->d3getMockBuilder(User::class)
->onlyMethods(['d3TotpGetCurrentUser'])
->getMock();
$oUserMock->method('d3TotpGetCurrentUser')->willReturn('foo');
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'isActive',
'loadByUserId',
@ -112,10 +117,10 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
->disableOriginalConstructor()
->getMock();
$oTotpMock->method('isActive')->willReturn($totpActive);
$oTotpMock->method('loadByUserId')->willReturn(true);
$oTotpMock->method('loadByUserId');
/** @var Session|MockObject $oSessionMock */
$oSessionMock = $this->getMockBuilder(Session::class)
$oSessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods([
'hasVariable',
])
@ -126,14 +131,16 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
$oSessionMock->method('hasVariable')->willReturnMap($hasVariableMap);
/** @var d3totpadminlogin|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3totpadminlogin::class)
$oControllerMock = $this->d3getMockBuilder(d3totpadminlogin::class)
->onlyMethods([
'd3TotpGetSession',
'd3TotpGetTotpObject',
'd3TotpGetUserObject'
])
->getMock();
$oControllerMock->method('d3TotpGetSession')->willReturn($oSessionMock);
$oControllerMock->method('d3TotpGetTotpObject')->willReturn($oTotpMock);
$oControllerMock->method('d3TotpGetUserObject')->willReturn($oUserMock);
$this->_oController = $oControllerMock;
@ -149,7 +156,7 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
/**
* @return array
*/
public function isTotpIsNotRequiredPassedDataProvider(): array
public static function isTotpIsNotRequiredPassedDataProvider(): array
{
return [
'auth already finished' => [true, true, true],
@ -170,13 +177,13 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
public function isTotpLoginNotPossiblePassed($userId, $expected)
{
/** @var d3_totp_user|MockObject $oUserMock */
$oUserMock = $this->getMockBuilder(User::class)
$oUserMock = $this->d3getMockBuilder(User::class)
->onlyMethods(['d3TotpGetCurrentUser'])
->getMock();
$oUserMock->method('d3TotpGetCurrentUser')->willReturn($userId);
/** @var d3totpadminlogin|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3totpadminlogin::class)
$oControllerMock = $this->d3getMockBuilder(d3totpadminlogin::class)
->onlyMethods(['d3TotpGetUserObject'])
->getMock();
$oControllerMock->method('d3TotpGetUserObject')->willReturn($oUserMock);
@ -195,7 +202,7 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
/**
* @return array
*/
public function isTotpLoginNotPossiblePassedDataProvider(): array
public static function isTotpLoginNotPossiblePassedDataProvider(): array
{
return [
'no user' => [null, true],
@ -216,7 +223,7 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
public function canRender($totpNotRequired, $totpNotPossible, $redirect)
{
/** @var Utils|MockObject $oUtilsMock */
$oUtilsMock = $this->getMockBuilder(Utils::class)
$oUtilsMock = $this->d3getMockBuilder(Utils::class)
->onlyMethods(['redirect'])
->getMock();
$oUtilsMock
@ -226,14 +233,13 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
->willReturn(true);
/** @var d3_totp_LoginController|MockObject $loginControllerMock */
$loginControllerMock = $this->getMockBuilder(LoginController::class)
$loginControllerMock = $this->d3getMockBuilder(LoginController::class)
->onlyMethods(['d3totpAfterLoginSetLanguage'])
->getMock();
$loginControllerMock->expects($this->once())->method('d3totpAfterLoginSetLanguage')
->willReturn(true);
$loginControllerMock->expects($this->once())->method('d3totpAfterLoginSetLanguage');
/** @var d3totpadminlogin|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3totpadminlogin::class)
$oControllerMock = $this->d3getMockBuilder(d3totpadminlogin::class)
->onlyMethods([
'isTotpIsNotRequired',
'isTotpLoginNotPossible',
@ -257,7 +263,7 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
/**
* @return array[]
*/
public function canRenderDataProvider(): array
public static function canRenderDataProvider(): array
{
return [
'not required' => [true, false, 'admin_start'],
@ -286,17 +292,23 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
*/
public function getBackupCodeCountMessageShowMessage()
{
$userMock = $this->d3getMockBuilder(User::class)
->onlyMethods(['d3TotpGetCurrentUser'])
->getMock();
$userMock->method('d3TotpGetCurrentUser')->willReturn('foo');
/** @var d3backupcodelist|MockObject $oBackupCodeListMock */
$oBackupCodeListMock = $this->getMockBuilder(d3backupcodelist::class)
$oBackupCodeListMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods(['getAvailableCodeCount'])
->getMock();
$oBackupCodeListMock->method('getAvailableCodeCount')->willReturn(2);
/** @var d3totpadminlogin|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3totpadminlogin::class)
->onlyMethods(['d3GetBackupCodeListObject'])
$oControllerMock = $this->d3getMockBuilder(d3totpadminlogin::class)
->onlyMethods(['d3GetBackupCodeListObject', 'd3TotpGetUserObject'])
->getMock();
$oControllerMock->method('d3GetBackupCodeListObject')->willReturn($oBackupCodeListMock);
$oControllerMock->method('d3TotpGetUserObject')->willReturn($userMock);
$this->_oController = $oControllerMock;
@ -316,17 +328,23 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
*/
public function getBackupCodeCountMessageDontShowMessage()
{
$userMock = $this->d3getMockBuilder(User::class)
->onlyMethods(['d3TotpGetCurrentUser'])
->getMock();
$userMock->method('d3TotpGetCurrentUser')->willReturn('foo');
/** @var d3backupcodelist|MockObject $oBackupCodeListMock */
$oBackupCodeListMock = $this->getMockBuilder(d3backupcodelist::class)
$oBackupCodeListMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods(['getAvailableCodeCount'])
->getMock();
$oBackupCodeListMock->method('getAvailableCodeCount')->willReturn(10);
/** @var d3totpadminlogin|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3totpadminlogin::class)
->onlyMethods(['d3GetBackupCodeListObject'])
$oControllerMock = $this->d3getMockBuilder(d3totpadminlogin::class)
->onlyMethods(['d3GetBackupCodeListObject', 'd3TotpGetUserObject'])
->getMock();
$oControllerMock->method('d3GetBackupCodeListObject')->willReturn($oBackupCodeListMock);
$oControllerMock->method('d3TotpGetUserObject')->willReturn($userMock);
$this->_oController = $oControllerMock;
@ -344,13 +362,13 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
public function canCancelLogin()
{
/** @var d3_totp_user|MockObject $userMock */
$userMock = $this->getMockBuilder(User::class)
$userMock = $this->d3getMockBuilder(User::class)
->onlyMethods(['logout'])
->getMock();
$userMock->expects($this->once())->method('logout')->willReturn(true);
/** @var d3totpadminlogin|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3totpadminlogin::class)
$oControllerMock = $this->d3getMockBuilder(d3totpadminlogin::class)
->onlyMethods(['d3TotpGetUserObject'])
->getMock();
$oControllerMock->method('d3TotpGetUserObject')->willReturn($userMock);
@ -386,8 +404,13 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
*/
public function checkloginUnvalidTotp()
{
$userMock = $this->d3getMockBuilder(User::class)
->onlyMethods(['d3TotpGetCurrentUser'])
->getMock();
$userMock->method('d3TotpGetCurrentUser')->willReturn('foo');
/** @var LoggerWrapper|MockObject $loggerMock */
$loggerMock = $this->getMockBuilder(LoggerWrapper::class)
$loggerMock = $this->d3getMockBuilder(LoggerWrapper::class)
->disableOriginalConstructor()
->onlyMethods(['error', 'debug'])
->getMock();
@ -395,14 +418,14 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
$loggerMock->expects($this->atLeastOnce())->method('debug')->willReturn(true);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->disableOriginalConstructor()
->onlyMethods(['loadByUserId'])
->getMock();
$oTotpMock->method('loadByUserId')->willReturn(true);
$oTotpMock->method('loadByUserId');
/** @var Session|MockObject $oSessionMock */
$oSessionMock = $this->getMockBuilder(Session::class)
$oSessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods([
'initNewSession',
'setVariable',
@ -414,18 +437,19 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
$oSessionMock->expects($this->never())->method('deleteVariable')->willReturn(false);
/** @var d3_totp_LoginController|MockObject $loginControllerMock */
$loginControllerMock = $this->getMockBuilder(LoginController::class)
$loginControllerMock = $this->d3getMockBuilder(LoginController::class)
->onlyMethods(['d3totpAfterLogin'])
->getMock();
$loginControllerMock->expects($this->never())->method('d3totpAfterLogin')->willReturn(true);
$loginControllerMock->expects($this->never())->method('d3totpAfterLogin');
/** @var d3totpadminlogin|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3totpadminlogin::class)
$oControllerMock = $this->d3getMockBuilder(d3totpadminlogin::class)
->onlyMethods([
'getLogger',
'd3TotpHasValidTotp',
'd3TotpGetSession',
'd3GetLoginController',
'd3TotpGetUserObject',
])
->getMock();
$oControllerMock->method('d3TotpHasValidTotp')
@ -433,6 +457,7 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
$oControllerMock->method('d3TotpGetSession')->willReturn($oSessionMock);
$oControllerMock->method('getLogger')->willReturn($loggerMock);
$oControllerMock->method('d3GetLoginController')->willReturn($loginControllerMock);
$oControllerMock->method('d3TotpGetUserObject')->willReturn($userMock);
$this->_oController = $oControllerMock;
@ -449,8 +474,13 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
*/
public function checkloginValidTotp()
{
$userMock = $this->d3getMockBuilder(User::class)
->onlyMethods(['d3TotpGetCurrentUser'])
->getMock();
$userMock->method('d3TotpGetCurrentUser')->willReturn('foo');
/** @var LoggerWrapper|MockObject $loggerMock */
$loggerMock = $this->getMockBuilder(LoggerWrapper::class)
$loggerMock = $this->d3getMockBuilder(LoggerWrapper::class)
->disableOriginalConstructor()
->onlyMethods(['error', 'debug'])
->getMock();
@ -458,14 +488,14 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
$loggerMock->expects($this->never())->method('debug')->willReturn(true);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->disableOriginalConstructor()
->onlyMethods(['loadByUserId'])
->getMock();
$oTotpMock->method('loadByUserId')->willReturn(true);
$oTotpMock->method('loadByUserId');
/** @var Session|MockObject $oSessionMock */
$oSessionMock = $this->getMockBuilder(Session::class)
$oSessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods([
'initNewSession',
'setVariable',
@ -477,24 +507,26 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
$oSessionMock->expects($this->atLeastOnce())->method('deleteVariable')->willReturn(false);
/** @var d3_totp_LoginController|MockObject $loginControllerMock */
$loginControllerMock = $this->getMockBuilder(LoginController::class)
$loginControllerMock = $this->d3getMockBuilder(LoginController::class)
->onlyMethods(['d3totpAfterLogin'])
->getMock();
$loginControllerMock->expects($this->once())->method('d3totpAfterLogin')->willReturn(true);
$loginControllerMock->expects($this->once())->method('d3totpAfterLogin');
/** @var d3totpadminlogin|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3totpadminlogin::class)
$oControllerMock = $this->d3getMockBuilder(d3totpadminlogin::class)
->onlyMethods([
'getLogger',
'd3TotpHasValidTotp',
'd3TotpGetSession',
'd3GetLoginController',
'd3TotpGetUserObject'
])
->getMock();
$oControllerMock->method('d3TotpHasValidTotp')->willReturn(true);
$oControllerMock->method('d3TotpGetSession')->willReturn($oSessionMock);
$oControllerMock->method('getLogger')->willReturn($loggerMock);
$oControllerMock->method('d3GetLoginController')->willReturn($loginControllerMock);
$oControllerMock->method('d3TotpGetUserObject')->willReturn($userMock);
$this->_oController = $oControllerMock;
@ -514,7 +546,7 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
Registry::getSession()->setVariable(d3totp_conf::SESSION_ADMIN_AUTH, true);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['verify'])
->disableOriginalConstructor()
->getMock();
@ -535,7 +567,7 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
Registry::getSession()->setVariable(d3totp_conf::SESSION_ADMIN_AUTH, false);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['verify'])
->disableOriginalConstructor()
->getMock();
@ -556,14 +588,14 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
Registry::getSession()->setVariable(d3totp_conf::SESSION_ADMIN_AUTH, false);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['verify'])
->disableOriginalConstructor()
->getMock();
$oTotpMock->method('verify')->willThrowException(oxNew(d3totp_wrongOtpException::class));
$this->expectException(d3totp_wrongOtpException::class);
$this->callMethod($this->_oController, 'd3TotpHasValidTotp', [null, $oTotpMock]);
$this->callMethod($this->_oController, 'd3TotpHasValidTotp', ['123456', $oTotpMock]);
}
/**
@ -576,7 +608,7 @@ class d3totpadminloginTest extends d3TotpUnitTestCase
Registry::getSession()->setVariable(d3totp_conf::SESSION_ADMIN_AUTH, false);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['verify'])
->disableOriginalConstructor()
->getMock();

View File

@ -13,15 +13,17 @@
declare(strict_types=1);
namespace D3\Totp\tests\unit\Application\Controller\Admin;
namespace D3\Totp\Tests\Unit\Application\Controller\Admin;
use D3\TestingTools\Development\CanAccessRestricted;
use D3\Totp\Application\Controller\Admin\d3user_totp;
use D3\Totp\Application\Model\d3backupcodelist;
use D3\Totp\Application\Model\d3totp;
use D3\Totp\tests\unit\d3TotpUnitTestCase;
use D3\Totp\Application\Model\d3totp_conf;
use D3\Totp\Tests\Unit\d3TotpUnitTestCase;
use Exception;
use OxidEsales\Eshop\Application\Model\User;
use OxidEsales\Eshop\Core\Registry;
use PHPUnit\Framework\MockObject\MockObject;
use ReflectionException;
@ -57,22 +59,24 @@ class d3user_totpTest extends d3TotpUnitTestCase
*/
public function canRenderNoSelectedUser()
{
$userMock = oxNew(User::class);
/** @var d3user_totp|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3user_totp::class)
$oControllerMock = $this->d3getMockBuilder(d3user_totp::class)
->onlyMethods([
'getEditObjectId',
'getUserObject',
])
->getMock();
$oControllerMock->method('getEditObjectId')->willReturn('-1');
$oControllerMock->expects($this->never())->method('getUserObject')->willReturn(false);
$oControllerMock->expects($this->never())->method('getUserObject')->willReturn($userMock);
$this->_oController = $oControllerMock;
$sTpl = $this->callMethod($this->_oController, 'render');
$tplUser = $this->callMethod($this->_oController, 'getViewDataElement', ['edit']);
$this->assertSame('d3user_totp.tpl', $sTpl);
$this->assertSame('@d3totp/admin/d3user_totp', $sTpl);
$this->assertSame($tplUser, null);
}
@ -85,7 +89,7 @@ class d3user_totpTest extends d3TotpUnitTestCase
public function canRenderSelectedUser()
{
/** @var User|MockObject $oUserMock */
$oUserMock = $this->getMockBuilder(User::class)
$oUserMock = $this->d3getMockBuilder(User::class)
->onlyMethods([
'getId',
'load',
@ -95,7 +99,7 @@ class d3user_totpTest extends d3TotpUnitTestCase
$oUserMock->expects($this->atLeast(1))->method('load')->willReturn(true);
/** @var d3user_totp|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3user_totp::class)
$oControllerMock = $this->d3getMockBuilder(d3user_totp::class)
->onlyMethods([
'getEditObjectId',
'getUserObject',
@ -110,7 +114,7 @@ class d3user_totpTest extends d3TotpUnitTestCase
$tplUser = $this->callMethod($this->_oController, 'getViewDataElement', ['edit']);
$oxid = $this->callMethod($this->_oController, 'getViewDataElement', ['oxid']);
$this->assertSame('d3user_totp.tpl', $sTpl);
$this->assertSame('@d3totp/admin/d3user_totp', $sTpl);
$this->assertSame($tplUser, $oUserMock);
$this->assertSame($oxid, 'foobar');
}
@ -124,7 +128,7 @@ class d3user_totpTest extends d3TotpUnitTestCase
public function canRenderUnloadableUser()
{
/** @var User|MockObject $oUserMock */
$oUserMock = $this->getMockBuilder(User::class)
$oUserMock = $this->d3getMockBuilder(User::class)
->onlyMethods([
'getId',
'load',
@ -134,7 +138,7 @@ class d3user_totpTest extends d3TotpUnitTestCase
$oUserMock->expects($this->atLeast(1))->method('load')->willReturn(false);
/** @var d3user_totp|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3user_totp::class)
$oControllerMock = $this->d3getMockBuilder(d3user_totp::class)
->onlyMethods([
'getEditObjectId',
'getUserObject',
@ -159,7 +163,7 @@ class d3user_totpTest extends d3TotpUnitTestCase
$tplUser = $this->callMethod($this->_oController, 'getViewDataElement', ['edit']);
$oxid = $this->callMethod($this->_oController, 'getViewDataElement', ['oxid']);
$this->assertSame('d3user_totp.tpl', $sTpl);
$this->assertSame('@d3totp/admin/d3user_totp', $sTpl);
$this->assertNull($tplUser);
$this->assertSame($oxid, 'foobar');
}
@ -220,13 +224,13 @@ class d3user_totpTest extends d3TotpUnitTestCase
public function cantSaveBecauseOfNotVerifiable()
{
/** @var d3backupcodelist|MockObject $oBackupCodeListMock */
$oBackupCodeListMock = $this->getMockBuilder(d3backupcodelist::class)
$oBackupCodeListMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods(['save'])
->getMock();
$oBackupCodeListMock->expects($this->never())->method('save')->willReturn(true);
$oBackupCodeListMock->expects($this->never())->method('save');
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'load',
'save',
@ -240,12 +244,12 @@ class d3user_totpTest extends d3TotpUnitTestCase
$oTotpMock->method('load')->willReturn(true);
$oTotpMock->expects($this->never())->method('save')->willReturn(true);
$oTotpMock->expects($this->once())->method('verify')->willThrowException(new Exception());
$oTotpMock->method('saveSecret')->willReturn(true);
$oTotpMock->method('saveSecret');
$oTotpMock->method('assign')->willReturn(true);
$oTotpMock->method('checkIfAlreadyExist')->willReturn(false);
/** @var d3user_totp|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3user_totp::class)
$oControllerMock = $this->d3getMockBuilder(d3user_totp::class)
->onlyMethods([
'getEditObjectId',
'getUserObject',
@ -259,6 +263,9 @@ class d3user_totpTest extends d3TotpUnitTestCase
$this->_oController = $oControllerMock;
$_GET['otp'] = '123456';
Registry::getSession()->setVariable(d3totp_conf::OTP_SESSION_VARNAME, $oTotpMock);
$this->callMethod($this->_oController, 'save');
}
@ -270,13 +277,13 @@ class d3user_totpTest extends d3TotpUnitTestCase
public function cantSaveBecauseExistingRegistration()
{
/** @var d3backupcodelist|MockObject $oBackupCodeListMock */
$oBackupCodeListMock = $this->getMockBuilder(d3backupcodelist::class)
$oBackupCodeListMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods(['save'])
->getMock();
$oBackupCodeListMock->expects($this->never())->method('save')->willReturn(true);
$oBackupCodeListMock->expects($this->never())->method('save');
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->disableOriginalConstructor()
->onlyMethods([
'load',
@ -290,12 +297,12 @@ class d3user_totpTest extends d3TotpUnitTestCase
$oTotpMock->method('load')->willReturn(true);
$oTotpMock->expects($this->never())->method('save')->willReturn(true);
$oTotpMock->expects($this->never())->method('verify')->willThrowException(new Exception());
$oTotpMock->method('saveSecret')->willReturn(true);
$oTotpMock->method('saveSecret');
$oTotpMock->method('assign')->willReturn(true);
$oTotpMock->method('checkIfAlreadyExist')->willReturn(true);
/** @var d3user_totp|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3user_totp::class)
$oControllerMock = $this->d3getMockBuilder(d3user_totp::class)
->onlyMethods([
'getEditObjectId',
'getUserObject',
@ -320,17 +327,17 @@ class d3user_totpTest extends d3TotpUnitTestCase
public function canSave()
{
/** @var d3backupcodelist|MockObject $oBackupCodeListMock */
$oBackupCodeListMock = $this->getMockBuilder(d3backupcodelist::class)
$oBackupCodeListMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods([
'save',
'generateBackupCodes',
])
->getMock();
$oBackupCodeListMock->expects($this->once())->method('save')->willReturn(true);
$oBackupCodeListMock->method('generateBackupCodes')->willReturn(true);
$oBackupCodeListMock->expects($this->once())->method('save');
$oBackupCodeListMock->method('generateBackupCodes');
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'load',
'save',
@ -344,12 +351,12 @@ class d3user_totpTest extends d3TotpUnitTestCase
$oTotpMock->expects($this->never())->method('load')->willReturn(true);
$oTotpMock->expects($this->once())->method('save')->willReturn(true);
$oTotpMock->expects($this->once())->method('verify')->willReturn(true);
$oTotpMock->method('saveSecret')->willReturn(true);
$oTotpMock->method('saveSecret');
$oTotpMock->method('assign')->willReturn(true);
$oTotpMock->method('checkIfAlreadyExist')->willReturn(false);
/** @var d3user_totp|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3user_totp::class)
$oControllerMock = $this->d3getMockBuilder(d3user_totp::class)
->onlyMethods([
'getEditObjectId',
'getUserObject',
@ -363,6 +370,9 @@ class d3user_totpTest extends d3TotpUnitTestCase
$this->_oController = $oControllerMock;
$_GET['otp'] = '123456';
Registry::getSession()->setVariable(d3totp_conf::OTP_SESSION_VARNAME, $oTotpMock);
$this->callMethod($this->_oController, 'save');
}
@ -379,17 +389,17 @@ class d3user_totpTest extends d3TotpUnitTestCase
$_GET['editval'] = $aEditval;
/** @var d3backupcodelist|MockObject $oBackupCodeListMock */
$oBackupCodeListMock = $this->getMockBuilder(d3backupcodelist::class)
$oBackupCodeListMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods([
'save',
'generateBackupCodes',
])
->getMock();
$oBackupCodeListMock->expects($this->once())->method('save')->willReturn(true);
$oBackupCodeListMock->method('generateBackupCodes')->willReturn(true);
$oBackupCodeListMock->expects($this->once())->method('save');
$oBackupCodeListMock->method('generateBackupCodes');
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'load',
'save',
@ -403,12 +413,12 @@ class d3user_totpTest extends d3TotpUnitTestCase
$oTotpMock->expects($this->once())->method('load')->willReturn(true);
$oTotpMock->expects($this->once())->method('save')->willReturn(true);
$oTotpMock->expects($this->never())->method('verify')->willReturn(true);
$oTotpMock->method('saveSecret')->willReturn(true);
$oTotpMock->method('saveSecret');
$oTotpMock->method('assign')->willReturn(true);
$oTotpMock->method('checkIfAlreadyExist')->willReturn(false);
/** @var d3user_totp|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3user_totp::class)
$oControllerMock = $this->d3getMockBuilder(d3user_totp::class)
->onlyMethods([
'getEditObjectId',
'getUserObject',
@ -456,14 +466,14 @@ class d3user_totpTest extends d3TotpUnitTestCase
$_GET['editval'] = $editval;
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->disableOriginalConstructor()
->onlyMethods(['delete'])
->getMock();
$oTotpMock->expects($this->never())->method('delete');
/** @var d3user_totp|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3user_totp::class)
$oControllerMock = $this->d3getMockBuilder(d3user_totp::class)
->onlyMethods(['getTotpObject'])
->getMock();
$oControllerMock->expects($this->never())->method('getTotpObject')->willReturn($oTotpMock);
@ -486,7 +496,7 @@ class d3user_totpTest extends d3TotpUnitTestCase
$_GET['editval'] = $editval;
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->disableOriginalConstructor()
->onlyMethods([
'delete',
@ -497,7 +507,7 @@ class d3user_totpTest extends d3TotpUnitTestCase
$oTotpMock->method('load')->willReturn(true);
/** @var d3user_totp|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3user_totp::class)
$oControllerMock = $this->d3getMockBuilder(d3user_totp::class)
->onlyMethods(['getTotpObject'])
->getMock();
$oControllerMock->method('getTotpObject')->willReturn($oTotpMock);
@ -515,7 +525,7 @@ class d3user_totpTest extends d3TotpUnitTestCase
public function canGetAvailableBackupCodeCount()
{
/** @var d3backupcodelist|MockObject $oBackupCodeListMock */
$oBackupCodeListMock = $this->getMockBuilder(d3backupcodelist::class)
$oBackupCodeListMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods(['getAvailableCodeCount'])
->getMock();
$oBackupCodeListMock->method('getAvailableCodeCount')->willReturn(25);
@ -524,14 +534,16 @@ class d3user_totpTest extends d3TotpUnitTestCase
$oUser->setId('foo');
/** @var d3user_totp|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3user_totp::class)
$oControllerMock = $this->d3getMockBuilder(d3user_totp::class)
->onlyMethods([
'getBackupCodeListObject',
'getUser',
'getEditObjectId'
])
->getMock();
$oControllerMock->method('getBackupCodeListObject')->willReturn($oBackupCodeListMock);
$oControllerMock->method('getUser')->willReturn($oUser);
$oControllerMock->method('getEditObjectId')->willReturn('foo');
$this->_oController = $oControllerMock;

View File

@ -13,15 +13,17 @@
declare(strict_types=1);
namespace D3\Totp\tests\unit\Application\Controller;
namespace D3\Totp\Tests\Unit\Application\Controller;
use D3\TestingTools\Development\CanAccessRestricted;
use D3\Totp\Application\Controller\d3_account_totp;
use D3\Totp\Application\Model\d3backupcodelist;
use D3\Totp\Application\Model\d3totp;
use D3\Totp\tests\unit\d3TotpUnitTestCase;
use D3\Totp\Application\Model\d3totp_conf;
use D3\Totp\Tests\Unit\d3TotpUnitTestCase;
use Exception;
use OxidEsales\Eshop\Application\Model\User;
use OxidEsales\Eshop\Core\Registry;
use PHPUnit\Framework\MockObject\MockObject;
use ReflectionException;
@ -66,7 +68,7 @@ class d3_account_totpTest extends d3TotpUnitTestCase
);
/** @var d3_account_totp|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3_account_totp::class)
$oControllerMock = $this->d3getMockBuilder(d3_account_totp::class)
->onlyMethods(['getUser'])
->getMock();
$oControllerMock->method('getUser')->willReturn($oUser);
@ -76,7 +78,7 @@ class d3_account_totpTest extends d3TotpUnitTestCase
$sTpl = $this->callMethod($this->_oController, 'render');
$tplUser = $this->callMethod($this->_oController, 'getViewDataElement', ['user']);
$this->assertSame('d3_account_totp.tpl', $sTpl);
$this->assertSame('@d3totp/tpl/d3_account_totp', $sTpl);
$this->assertSame($tplUser, $oUser);
}
@ -91,7 +93,7 @@ class d3_account_totpTest extends d3TotpUnitTestCase
$oUser = null;
/** @var d3_account_totp|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3_account_totp::class)
$oControllerMock = $this->d3getMockBuilder(d3_account_totp::class)
->onlyMethods(['getUser'])
->getMock();
$oControllerMock->method('getUser')->willReturn($oUser);
@ -101,7 +103,7 @@ class d3_account_totpTest extends d3TotpUnitTestCase
$sTpl = $this->callMethod($this->_oController, 'render');
$tplUser = $this->callMethod($this->_oController, 'getViewDataElement', ['user']);
$this->assertSame('page/account/login.tpl', $sTpl);
$this->assertSame('page/account/login', $sTpl);
$this->assertNull($tplUser);
}
@ -149,7 +151,7 @@ class d3_account_totpTest extends d3TotpUnitTestCase
public function canGetAvailableBackupCodeCount()
{
/** @var d3backupcodelist|MockObject $oBackupCodeListMock */
$oBackupCodeListMock = $this->getMockBuilder(d3backupcodelist::class)
$oBackupCodeListMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods(['getAvailableCodeCount'])
->getMock();
$oBackupCodeListMock->method('getAvailableCodeCount')->willReturn(25);
@ -158,7 +160,7 @@ class d3_account_totpTest extends d3TotpUnitTestCase
$oUser->setId('foo');
/** @var d3_account_totp|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3_account_totp::class)
$oControllerMock = $this->d3getMockBuilder(d3_account_totp::class)
->onlyMethods([
'getBackupCodeListObject',
'getUser',
@ -184,11 +186,13 @@ class d3_account_totpTest extends d3TotpUnitTestCase
{
$_GET['totp_use'] = 0;
$totp = oxNew(d3totp::class);
/** @var d3_account_totp|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3_account_totp::class)
$oControllerMock = $this->d3getMockBuilder(d3_account_totp::class)
->onlyMethods(['getTotpObject'])
->getMock();
$oControllerMock->expects($this->never())->method('getTotpObject')->willReturn(true);
$oControllerMock->expects($this->never())->method('getTotpObject')->willReturn($totp);
$this->_oController = $oControllerMock;
@ -203,9 +207,10 @@ class d3_account_totpTest extends d3TotpUnitTestCase
public function cantCreateIfTotpNotVerfiable()
{
$_GET['totp_use'] = '1';
$_GET['otp'] = '123456';
/** @var d3backupcodelist|MockObject $oBackupCodeListMock */
$oBackupCodeListMock = $this->getMockBuilder(d3backupcodelist::class)
$oBackupCodeListMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods([
'generateBackupCodes',
'save',
@ -215,7 +220,7 @@ class d3_account_totpTest extends d3TotpUnitTestCase
$oBackupCodeListMock->expects($this->never())->method('save');
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->disableOriginalConstructor()
->onlyMethods([
'saveSecret',
@ -224,7 +229,7 @@ class d3_account_totpTest extends d3TotpUnitTestCase
'save',
])
->getMock();
$oTotpMock->method('saveSecret')->willReturn(true);
$oTotpMock->method('saveSecret');
$oTotpMock->method('assign')->willReturn(true);
$oTotpMock->expects($this->once())->method('verify')->willThrowException(new Exception('foo'));
$oTotpMock->expects($this->never())->method('save');
@ -233,16 +238,18 @@ class d3_account_totpTest extends d3TotpUnitTestCase
$oUser->setId('foo');
/** @var d3_account_totp|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3_account_totp::class)
$oControllerMock = $this->d3getMockBuilder(d3_account_totp::class)
->onlyMethods([
'getTotpObject',
'getUser',
'getBackupCodeListObject',
'getTotpObject'
])
->getMock();
$oControllerMock->method('getTotpObject')->willReturn($oTotpMock);
$oControllerMock->method('getUser')->willReturn($oUser);
$oControllerMock->method('getBackupCodeListObject')->willReturn($oBackupCodeListMock);
$oControllerMock->method('getTotpObject')->willReturn($oTotpMock);
Registry::getSession()->setVariable(d3totp_conf::OTP_SESSION_VARNAME, $oTotpMock);
$this->_oController = $oControllerMock;
@ -257,20 +264,21 @@ class d3_account_totpTest extends d3TotpUnitTestCase
public function canCreate()
{
$_GET['totp_use'] = '1';
$_GET['otp'] = '123456';
/** @var d3backupcodelist|MockObject $oBackupCodeListMock */
$oBackupCodeListMock = $this->getMockBuilder(d3backupcodelist::class)
$oBackupCodeListMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods([
'generateBackupCodes',
'save',
])
->getMock();
$oBackupCodeListMock->method('generateBackupCodes')->willReturn(['0123', '1234']);
$oBackupCodeListMock->expects($this->once())->method('save')->willReturn(true);
$oBackupCodeListMock->method('save')->willReturn(true);
$oBackupCodeListMock->method('generateBackupCodes');
$oBackupCodeListMock->expects($this->once())->method('save');
$oBackupCodeListMock->method('save');
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->disableOriginalConstructor()
->onlyMethods([
'saveSecret',
@ -280,7 +288,7 @@ class d3_account_totpTest extends d3TotpUnitTestCase
'setId',
])
->getMock();
$oTotpMock->method('saveSecret')->willReturn(true);
$oTotpMock->method('saveSecret');
$oTotpMock->method('assign')->willReturn(true);
$oTotpMock->method('verify')->willReturn(true);
$oTotpMock->method('setId')->willReturn(true);
@ -290,13 +298,14 @@ class d3_account_totpTest extends d3TotpUnitTestCase
$oUser->setId('foo');
/** @var d3_account_totp|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3_account_totp::class)
$oControllerMock = $this->d3getMockBuilder(d3_account_totp::class)
->onlyMethods([
'getTotpObject',
'getUser',
'getBackupCodeListObject',
'getTotpObject'
])
->getMock();
Registry::getSession()->setVariable(d3totp_conf::OTP_SESSION_VARNAME, $oTotpMock);
$oControllerMock->method('getTotpObject')->willReturn($oTotpMock);
$oControllerMock->method('getUser')->willReturn($oUser);
$oControllerMock->method('getBackupCodeListObject')->willReturn($oBackupCodeListMock);
@ -315,11 +324,13 @@ class d3_account_totpTest extends d3TotpUnitTestCase
{
$_GET['totp_use'] = '1';
$totpMock = oxNew(d3totp::class);
/** @var d3_account_totp|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3_account_totp::class)
$oControllerMock = $this->d3getMockBuilder(d3_account_totp::class)
->onlyMethods(['getTotpObject'])
->getMock();
$oControllerMock->expects($this->never())->method('getTotpObject')->willReturn(true);
$oControllerMock->expects($this->never())->method('getTotpObject')->willReturn($totpMock);
$this->_oController = $oControllerMock;
@ -336,14 +347,14 @@ class d3_account_totpTest extends d3TotpUnitTestCase
$_GET['totp_use'] = '0';
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->disableOriginalConstructor()
->onlyMethods(['delete'])
->getMock();
$oTotpMock->expects($this->never())->method('delete');
/** @var d3_account_totp|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3_account_totp::class)
$oControllerMock = $this->d3getMockBuilder(d3_account_totp::class)
->onlyMethods([
'getTotpObject',
'getUser',
@ -367,7 +378,7 @@ class d3_account_totpTest extends d3TotpUnitTestCase
$_GET['totp_use'] = '0';
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->disableOriginalConstructor()
->onlyMethods([
'delete',
@ -375,13 +386,13 @@ class d3_account_totpTest extends d3TotpUnitTestCase
])
->getMock();
$oTotpMock->expects($this->once())->method('delete')->willReturn(true);
$oTotpMock->method('loadByUserId')->willReturn(true);
$oTotpMock->method('loadByUserId');
$oUser = oxNew(User::class);
$oUser->setId('foo');
/** @var d3_account_totp|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3_account_totp::class)
$oControllerMock = $this->d3getMockBuilder(d3_account_totp::class)
->onlyMethods([
'getTotpObject',
'getUser',

View File

@ -13,13 +13,13 @@
declare(strict_types=1);
namespace D3\Totp\tests\unit\Application\Controller;
namespace D3\Totp\Tests\Unit\Application\Controller;
use D3\TestingTools\Development\CanAccessRestricted;
use D3\Totp\Application\Controller\d3totplogin;
use D3\Totp\Application\Model\d3backupcodelist;
use D3\Totp\Application\Model\d3totp_conf;
use D3\Totp\tests\unit\d3TotpUnitTestCase;
use D3\Totp\Tests\Unit\d3TotpUnitTestCase;
use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\Utils;
use PHPUnit\Framework\MockObject\MockObject;
@ -60,17 +60,19 @@ class d3totploginTest extends d3TotpUnitTestCase
public function renderRedirectIfNoTotp()
{
/** @var Utils|MockObject $oUtilsMock */
$oUtilsMock = $this->getMockBuilder(Utils::class)
$oUtilsMock = $this->d3getMockBuilder(Utils::class)
->onlyMethods(['redirect'])
->getMock();
$oUtilsMock->expects($this->once())->method('redirect')->willReturn(true);
/** @var d3totplogin|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3totplogin::class)
$oControllerMock = $this->d3getMockBuilder(d3totplogin::class)
->onlyMethods(['getUtils'])
->getMock();
$oControllerMock->method('getUtils')->willReturn($oUtilsMock);
Registry::getSession()->setVariable(d3totp_conf::SESSION_CURRENTCLASS, 'currentClass');
$this->_oController = $oControllerMock;
$this->callMethod($this->_oController, 'render');
@ -86,21 +88,23 @@ class d3totploginTest extends d3TotpUnitTestCase
Registry::getSession()->setVariable(d3totp_conf::SESSION_CURRENTUSER, 'foo');
/** @var Utils|MockObject $oUtilsMock */
$oUtilsMock = $this->getMockBuilder(Utils::class)
$oUtilsMock = $this->d3getMockBuilder(Utils::class)
->onlyMethods(['redirect'])
->getMock();
$oUtilsMock->expects($this->never())->method('redirect')->willReturn(true);
/** @var d3totplogin|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3totplogin::class)
$oControllerMock = $this->d3getMockBuilder(d3totplogin::class)
->onlyMethods(['getUtils'])
->getMock();
$oControllerMock->method('getUtils')->willReturn($oUtilsMock);
$this->_oController = $oControllerMock;
Registry::getSession()->setVariable(d3totp_conf::SESSION_CURRENTCLASS, 'currentClass');
$this->assertSame(
'd3totplogin.tpl',
'@d3totp/tpl/d3totplogin',
$this->callMethod($this->_oController, 'render')
);
}
@ -129,19 +133,21 @@ class d3totploginTest extends d3TotpUnitTestCase
public function getBackupCodeCountMessageReturnMessage()
{
/** @var d3backupcodelist|MockObject $oBackupCodesListMock */
$oBackupCodesListMock = $this->getMockBuilder(d3backupcodelist::class)
$oBackupCodesListMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods(['getAvailableCodeCount'])
->getMock();
$oBackupCodesListMock->method('getAvailableCodeCount')->willReturn(1);
/** @var d3totplogin|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3totplogin::class)
$oControllerMock = $this->d3getMockBuilder(d3totplogin::class)
->onlyMethods(['getBackupCodeListObject'])
->getMock();
$oControllerMock->method('getBackupCodeListObject')->willReturn($oBackupCodesListMock);
$this->_oController = $oControllerMock;
Registry::getSession()->setVariable(d3totp_conf::SESSION_CURRENTUSER, 'userId');
$this->assertGreaterThan(
0,
strpos(
@ -159,17 +165,19 @@ class d3totploginTest extends d3TotpUnitTestCase
public function getBackupCodeCountMessageReturnNoMessage()
{
/** @var d3backupcodelist|MockObject $oBackupCodesListMock */
$oBackupCodesListMock = $this->getMockBuilder(d3backupcodelist::class)
$oBackupCodesListMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods(['getAvailableCodeCount'])
->getMock();
$oBackupCodesListMock->method('getAvailableCodeCount')->willReturn(1234);
/** @var d3totplogin|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3totplogin::class)
$oControllerMock = $this->d3getMockBuilder(d3totplogin::class)
->onlyMethods(['getBackupCodeListObject'])
->getMock();
$oControllerMock->method('getBackupCodeListObject')->willReturn($oBackupCodesListMock);
Registry::getSession()->setVariable(d3totp_conf::SESSION_CURRENTUSER, 'userId');
$this->_oController = $oControllerMock;
$this->assertEmpty(
@ -228,7 +236,7 @@ class d3totploginTest extends d3TotpUnitTestCase
/**
* @return array[]
*/
public function classIsOrderStepDataProvider(): array
public static function classIsOrderStepDataProvider(): array
{
return [
'order step class' => ['order', true],
@ -262,7 +270,12 @@ class d3totploginTest extends d3TotpUnitTestCase
*/
public function canGetBreadCrumb()
{
$aBreadCrumb = $this->callMethod($this->_oController, 'getBreadCrumb');
$controllerMock = $this->d3getMockBuilder(d3totplogin::class)
->onlyMethods(['getLink'])
->getMock();
$controllerMock->method('getLink')->willReturn('linkFixture');
$aBreadCrumb = $this->callMethod($controllerMock, 'getBreadCrumb');
$this->assertIsString($aBreadCrumb[0]['title']);
$this->assertTrue(strlen($aBreadCrumb[0]['title']) > 1);

View File

@ -11,11 +11,11 @@
* @link https://www.oxidmodule.com
*/
namespace D3\Totp\tests\unit\Application\Factory;
namespace D3\Totp\Tests\Unit\Application\Factory;
use BaconQrCode\Renderer\ImageRenderer;
use D3\Totp\Application\Factory\BaconQrCodeFactory;
use D3\Totp\tests\unit\d3TotpUnitTestCase;
use D3\Totp\Tests\Unit\d3TotpUnitTestCase;
class BaconQrCodeFactoryTest extends d3TotpUnitTestCase
{

View File

@ -13,11 +13,11 @@
declare(strict_types=1);
namespace D3\Totp\tests\unit\Application\Model\Exceptions;
namespace D3\Totp\Tests\Unit\Application\Model\Exceptions;
use D3\TestingTools\Development\CanAccessRestricted;
use D3\Totp\Application\Model\Exceptions\d3totp_wrongOtpException;
use D3\Totp\tests\unit\d3TotpUnitTestCase;
use D3\Totp\Tests\Unit\d3TotpUnitTestCase;
use ReflectionException;
class d3totp_wrongOtpExceptionTest extends d3TotpUnitTestCase

View File

@ -13,11 +13,11 @@
declare(strict_types=1);
namespace D3\Totp\tests\unit\Application\Model;
namespace D3\Totp\Tests\Unit\Application\Model;
use D3\TestingTools\Development\CanAccessRestricted;
use D3\Totp\Application\Model\d3RandomGenerator;
use D3\Totp\tests\unit\d3TotpUnitTestCase;
use D3\Totp\Tests\Unit\d3TotpUnitTestCase;
use ReflectionException;
class d3RandomGeneratorTest extends d3TotpUnitTestCase
@ -25,7 +25,7 @@ class d3RandomGeneratorTest extends d3TotpUnitTestCase
use CanAccessRestricted;
/** @var d3RandomGenerator */
protected $_oModel;
protected d3RandomGenerator $_oModel;
/**
* setup basic requirements
@ -51,7 +51,7 @@ class d3RandomGeneratorTest extends d3TotpUnitTestCase
*/
public function getRandomTotpBackupCodeReturnsRightCode()
{
$this->assertRegExp(
$this->assertMatchesRegularExpression(
'@[0-9]{6}@',
$this->callMethod($this->_oModel, 'getRandomTotpBackupCode')
);

View File

@ -13,12 +13,12 @@
declare(strict_types=1);
namespace D3\Totp\tests\unit\Application\Model;
namespace D3\Totp\Tests\Unit\Application\Model;
use D3\TestingTools\Development\CanAccessRestricted;
use D3\Totp\Application\Model\d3backupcode;
use D3\Totp\Application\Model\d3totp_conf;
use D3\Totp\tests\unit\d3TotpUnitTestCase;
use D3\Totp\Tests\Unit\d3TotpUnitTestCase;
use OxidEsales\Eshop\Application\Model\User;
use OxidEsales\Eshop\Core\Registry;
use PHPUnit\Framework\MockObject\MockObject;
@ -59,7 +59,7 @@ class d3backupcodeTest extends d3TotpUnitTestCase
$sBackupCode = '123456';
/** @var d3backupcode|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3backupcode::class)
$oModelMock = $this->d3getMockBuilder(d3backupcode::class)
->onlyMethods([
'getRandomTotpBackupCode',
'd3EncodeBC',
@ -87,7 +87,7 @@ class d3backupcodeTest extends d3TotpUnitTestCase
*/
public function getRandomTotpBackupCodePass()
{
$this->assertRegExp(
$this->assertMatchesRegularExpression(
'@[0-9]{6}@',
$this->callMethod($this->_oModel, 'getRandomTotpBackupCode')
);
@ -101,9 +101,8 @@ class d3backupcodeTest extends d3TotpUnitTestCase
public function d3EncodeBCPass()
{
/** @var User|MockObject $oUserMock */
$oUserMock = $this->getMockBuilder(User::class)
$oUserMock = $this->d3getMockBuilder(User::class)
->onlyMethods(['load'])
->disableOriginalConstructor()
->getMock();
$oUserMock->method('load')->willReturn(true);
$oUserMock->assign(
@ -113,7 +112,7 @@ class d3backupcodeTest extends d3TotpUnitTestCase
);
/** @var d3backupcode|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3backupcode::class)
$oModelMock = $this->d3getMockBuilder(d3backupcode::class)
->onlyMethods(['d3TotpGetUserObject'])
->getMock();
$oModelMock->method('d3TotpGetUserObject')->willReturn($oUserMock);
@ -134,7 +133,7 @@ class d3backupcodeTest extends d3TotpUnitTestCase
public function d3GetUserReturnCachedUser()
{
/** @var User|MockObject $oUserMock */
$oUserMock = $this->getMockBuilder(User::class)
$oUserMock = $this->d3getMockBuilder(User::class)
->disableOriginalConstructor()
->getMock();
$oUserMock->assign(

View File

@ -13,17 +13,22 @@
declare(strict_types=1);
namespace D3\Totp\tests\unit\Application\Model;
namespace D3\Totp\Tests\Unit\Application\Model;
use D3\TestingTools\Development\CanAccessRestricted;
use D3\Totp\Application\Model\d3backupcode;
use D3\Totp\Application\Model\d3backupcodelist;
use D3\Totp\tests\unit\d3TotpUnitTestCase;
use D3\Totp\Tests\Unit\d3TotpUnitTestCase;
use Doctrine\DBAL\ForwardCompatibility\Result;
use Doctrine\DBAL\Query\QueryBuilder;
use OxidEsales\Eshop\Application\Controller\FrontendController;
use OxidEsales\Eshop\Application\Model\User;
use OxidEsales\Eshop\Core\Config;
use OxidEsales\Eshop\Core\Database\Adapter\Doctrine\Database;
use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory;
use OxidEsales\EshopCommunity\Internal\Framework\Database\ConnectionProviderInterface;
use PHPUnit\Framework\MockObject\MockObject;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use ReflectionException;
class d3backupcodelistTest extends d3TotpUnitTestCase
@ -31,7 +36,7 @@ class d3backupcodelistTest extends d3TotpUnitTestCase
use CanAccessRestricted;
/** @var d3backupcodelist */
protected $_oModel;
protected d3backupcodelist $_oModel;
/**
* setup basic requirements
@ -58,32 +63,32 @@ class d3backupcodelistTest extends d3TotpUnitTestCase
public function generateBackupCodes()
{
/** @var FrontendController|MockObject $oViewMock */
$oViewMock = $this->getMockBuilder(FrontendController::class)
$oViewMock = $this->d3getMockBuilder(FrontendController::class)
->addMethods(['setBackupCodes'])
->getMock();
$oViewMock->expects($this->once())->method('setBackupCodes')->willReturn(true);
/** @var Config|MockObject $oConfigMock */
$oConfigMock = $this->getMockBuilder(Config::class)
$oConfigMock = $this->d3getMockBuilder(Config::class)
->onlyMethods(['getActiveView'])
->getMock();
$oConfigMock->method('getActiveView')->willReturn($oViewMock);
/** @var d3backupcode|MockObject $oBackupCodeMock */
$oBackupCodeMock = $this->getMockBuilder(d3backupcode::class)
$oBackupCodeMock = $this->d3getMockBuilder(d3backupcode::class)
->onlyMethods(['generateCode'])
->getMock();
$oBackupCodeMock->expects($this->exactly(10))->method('generateCode');
/** @var d3backupcodelist|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3backupcodelist::class)
$oModelMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods([
'deleteAllFromUser',
'getD3BackupCodeObject',
'd3GetConfig',
])
->getMock();
$oModelMock->expects($this->once())->method('deleteAllFromUser')->willReturn(true);
$oModelMock->expects($this->once())->method('deleteAllFromUser');
$oModelMock->method('getD3BackupCodeObject')->willReturn($oBackupCodeMock);
$oModelMock->method('d3GetConfig')->willReturn($oConfigMock);
@ -126,7 +131,7 @@ class d3backupcodelistTest extends d3TotpUnitTestCase
public function savePass()
{
/** @var d3backupcode|MockObject $oBackupCodeMock */
$oBackupCodeMock = $this->getMockBuilder(d3backupcode::class)
$oBackupCodeMock = $this->d3getMockBuilder(d3backupcode::class)
->onlyMethods(['save'])
->getMock();
$oBackupCodeMock->expects($this->once())->method('save')->willReturn(true);
@ -136,7 +141,7 @@ class d3backupcodelistTest extends d3TotpUnitTestCase
];
/** @var d3backupcodelist|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3backupcodelist::class)
$oModelMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods(['getArray'])
->getMock();
$oModelMock->expects($this->once())->method('getArray')->willReturn($aBackupCodeArray);
@ -161,45 +166,48 @@ class d3backupcodelistTest extends d3TotpUnitTestCase
/**
* @test
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
* @throws ReflectionException
* @covers \D3\Totp\Application\Model\d3backupcodelist::verify
*/
public function verifyFoundTotp()
{
/** @var User|MockObject $oUserMock */
$oUserMock = $this->getMockBuilder(User::class)
$oUserMock = $this->d3getMockBuilder(User::class)
->onlyMethods(['getId'])
->getMock();
$oUserMock->method('getId')->willReturn('foobar');
$oUserMock->assign(['oxpasssalt' => '6162636465666768696A6B']);
/** @var d3backupcode|MockObject $oBackupCodeMock */
$oBackupCodeMock = $this->getMockBuilder(d3backupcode::class)
->onlyMethods(['delete'])
$oBackupCodeMock = $this->d3getMockBuilder(d3backupcode::class)
->onlyMethods(['delete', 'd3TotpGetUserObject'])
->getMock();
$oBackupCodeMock->expects($this->once())->method('delete')->willReturn(true);
$oBackupCodeMock->method('d3TotpGetUserObject')->willReturn($oUserMock);
/** @var Database|MockObject $oDbMock */
$oDbMock = $this->getMockBuilder(Database::class)
->onlyMethods([
'getOne',
'quoteIdentifier',
'quote',
])
$resultMock = $this->d3getMockBuilder(Result::class)
->disableOriginalConstructor()
->onlyMethods(['fetchOne'])
->getMock();
$oDbMock->expects($this->once())->method('getOne')->willReturn('foobar');
$oDbMock->method('quoteIdentifier')->willReturn(true);
$oDbMock->method('quote')->willReturn(true);
$resultMock->method('fetchOne')->willReturn('1');
$qbMock = $this->d3getMockBuilder(QueryBuilder::class)
->setConstructorArgs([ContainerFactory::getInstance()->getContainer()->get(ConnectionProviderInterface::class)->get()])
->onlyMethods(['execute'])
->getMock();
$qbMock->method('execute')->willReturn($resultMock);
/** @var d3backupcodelist|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3backupcodelist::class)
$oModelMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods([
'd3GetDb',
'getQueryBuilder',
'getBaseObject',
'd3GetUser',
])
->getMock();
$oModelMock->method('d3GetDb')->willReturn($oDbMock);
$oModelMock->method('getQueryBuilder')->willReturn($qbMock);
$oModelMock->method('getBaseObject')->willReturn($oBackupCodeMock);
$oModelMock->method('d3GetUser')->willReturn($oUserMock);
@ -212,45 +220,48 @@ class d3backupcodelistTest extends d3TotpUnitTestCase
/**
* @test
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
* @throws ReflectionException
* @covers \D3\Totp\Application\Model\d3backupcodelist::verify
*/
public function verifyNotFoundTotp()
{
/** @var User|MockObject $oUserMock */
$oUserMock = $this->getMockBuilder(User::class)
$oUserMock = $this->d3getMockBuilder(User::class)
->onlyMethods(['getId'])
->getMock();
$oUserMock->method('getId')->willReturn('foobar');
$oUserMock->assign(['oxpasssalt' => '6162636465666768696A6B']);
/** @var d3backupcode|MockObject $oBackupCodeMock */
$oBackupCodeMock = $this->getMockBuilder(d3backupcode::class)
->onlyMethods(['delete'])
$oBackupCodeMock = $this->d3getMockBuilder(d3backupcode::class)
->onlyMethods(['delete', 'd3TotpGetUserObject'])
->getMock();
$oBackupCodeMock->expects($this->never())->method('delete')->willReturn(true);
$oBackupCodeMock->method('d3TotpGetUserObject')->willReturn($oUserMock);
/** @var Database|MockObject $oDbMock */
$oDbMock = $this->getMockBuilder(Database::class)
->onlyMethods([
'getOne',
'quoteIdentifier',
'quote',
])
$resultMock = $this->d3getMockBuilder(Result::class)
->disableOriginalConstructor()
->onlyMethods(['fetchOne'])
->getMock();
$oDbMock->expects($this->once())->method('getOne')->willReturn(null);
$oDbMock->method('quoteIdentifier')->willReturn(true);
$oDbMock->method('quote')->willReturn(true);
$resultMock->method('fetchOne')->willReturn('');
$qbMock = $this->d3getMockBuilder(QueryBuilder::class)
->setConstructorArgs([ContainerFactory::getInstance()->getContainer()->get(ConnectionProviderInterface::class)->get()])
->onlyMethods(['execute'])
->getMock();
$qbMock->method('execute')->willReturn($resultMock);
/** @var d3backupcodelist|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3backupcodelist::class)
$oModelMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods([
'd3GetDb',
'getQueryBuilder',
'getBaseObject',
'd3GetUser',
])
->getMock();
$oModelMock->method('d3GetDb')->willReturn($oDbMock);
$oModelMock->method('getQueryBuilder')->willReturn($qbMock);
$oModelMock->method('getBaseObject')->willReturn($oBackupCodeMock);
$oModelMock->method('d3GetUser')->willReturn($oUserMock);
@ -264,36 +275,16 @@ class d3backupcodelistTest extends d3TotpUnitTestCase
/**
* @test
* @throws ReflectionException
* @covers \D3\Totp\Application\Model\d3backupcodelist::d3GetDb
*/
public function d3GetDbReturnsRightInstance()
{
$this->assertInstanceOf(
Database::class,
$this->callMethod($this->_oModel, 'd3GetDb')
);
}
/**
* @test
* @throws ReflectionException
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
* @covers \D3\Totp\Application\Model\d3backupcodelist::deleteAllFromUser
*/
public function deleteAllFromUserCodesFound()
{
/** @var Database|MockObject $oDbMock */
$oDbMock = $this->getMockBuilder(Database::class)
->disableOriginalConstructor()
->onlyMethods([
'quoteIdentifier',
'quote',
])
->getMock();
$oDbMock->method('quoteIdentifier')->willReturn(true);
$oDbMock->method('quote')->willReturn(true);
$qbMock = new QueryBuilder(ContainerFactory::getInstance()->getContainer()->get(ConnectionProviderInterface::class)->get());
/** @var d3backupcode|MockObject $oBackupCodeMock */
$oBackupCodeMock = $this->getMockBuilder(d3backupcode::class)
$oBackupCodeMock = $this->d3getMockBuilder(d3backupcode::class)
->onlyMethods(['delete'])
->getMock();
$oBackupCodeMock->expects($this->once())->method('delete')->willReturn(true);
@ -303,16 +294,16 @@ class d3backupcodelistTest extends d3TotpUnitTestCase
];
/** @var d3backupcodelist|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3backupcodelist::class)
$oModelMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods([
'getArray',
'selectString',
'd3GetDb',
'getQueryBuilder',
])
->getMock();
$oModelMock->expects($this->once())->method('getArray')->willReturn($aBackupCodeArray);
$oModelMock->expects($this->once())->method('selectString')->willReturn(true);
$oModelMock->method('d3GetDb')->willReturn($oDbMock);
$oModelMock->method('getQueryBuilder')->willReturn($qbMock);
$this->_oModel = $oModelMock;
@ -321,24 +312,17 @@ class d3backupcodelistTest extends d3TotpUnitTestCase
/**
* @test
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
* @throws ReflectionException
* @covers \D3\Totp\Application\Model\d3backupcodelist::deleteAllFromUser
*/
public function deleteAllFromUserNoCodesFound()
{
/** @var Database|MockObject $oDbMock */
$oDbMock = $this->getMockBuilder(Database::class)
->onlyMethods([
'quoteIdentifier',
'quote',
])
->disableOriginalConstructor()
->getMock();
$oDbMock->method('quoteIdentifier')->willReturn(true);
$oDbMock->method('quote')->willReturn(true);
$qbMock = new QueryBuilder(ContainerFactory::getInstance()->getContainer()->get(ConnectionProviderInterface::class)->get());
/** @var d3backupcode|MockObject $oBackupCodeMock */
$oBackupCodeMock = $this->getMockBuilder(d3backupcode::class)
$oBackupCodeMock = $this->d3getMockBuilder(d3backupcode::class)
->onlyMethods(['delete'])
->getMock();
$oBackupCodeMock->expects($this->never())->method('delete')->willReturn(true);
@ -346,16 +330,16 @@ class d3backupcodelistTest extends d3TotpUnitTestCase
$aBackupCodeArray = [];
/** @var d3backupcodelist|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3backupcodelist::class)
$oModelMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods([
'getArray',
'selectString',
'd3GetDb',
'getQueryBuilder',
])
->getMock();
$oModelMock->expects($this->once())->method('getArray')->willReturn($aBackupCodeArray);
$oModelMock->expects($this->once())->method('selectString')->willReturn(true);
$oModelMock->method('d3GetDb')->willReturn($oDbMock);
$oModelMock->method('getQueryBuilder')->willReturn($qbMock);
$this->_oModel = $oModelMock;
@ -364,29 +348,30 @@ class d3backupcodelistTest extends d3TotpUnitTestCase
/**
* @test
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
* @throws ReflectionException
* @covers \D3\Totp\Application\Model\d3backupcodelist::getAvailableCodeCount
*/
public function getAvailableCodeCountPass()
{
/** @var Database|MockObject $oDbMock */
$oDbMock = $this->getMockBuilder(Database::class)
->onlyMethods([
'getOne',
'quoteIdentifier',
'quote',
])
$resultMock = $this->d3getMockBuilder(Result::class)
->disableOriginalConstructor()
->onlyMethods(['fetchOne'])
->getMock();
$oDbMock->expects($this->once())->method('getOne')->willReturn('25');
$oDbMock->method('quoteIdentifier')->willReturn(true);
$oDbMock->method('quote')->willReturn(true);
$resultMock->method('fetchOne')->willReturn(25);
$qbMock = $this->d3getMockBuilder(QueryBuilder::class)
->setConstructorArgs([ContainerFactory::getInstance()->getContainer()->get(ConnectionProviderInterface::class)->get()])
->onlyMethods(['execute'])
->getMock();
$qbMock->method('execute')->willReturn($resultMock);
/** @var d3backupcodelist|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3backupcodelist::class)
->onlyMethods(['d3GetDb'])
$oModelMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods(['getQueryBuilder'])
->getMock();
$oModelMock->method('d3GetDb')->willReturn($oDbMock);
$oModelMock->method('getQueryBuilder')->willReturn($qbMock);
$this->_oModel = $oModelMock;

View File

@ -13,29 +13,34 @@
declare(strict_types=1);
namespace D3\Totp\tests\unit\Application\Model;
namespace D3\Totp\Tests\Unit\Application\Model;
use BaconQrCode\Writer;
use D3\TestingTools\Development\CanAccessRestricted;
use D3\Totp\Application\Factory\BaconQrCodeFactory;
use D3\Totp\Application\Model\d3backupcode;
use D3\Totp\Application\Model\d3backupcodelist;
use D3\Totp\Application\Model\d3totp;
use D3\Totp\Application\Model\Exceptions\d3totp_wrongOtpException;
use D3\Totp\tests\unit\d3TotpUnitTestCase;
use D3\Totp\Tests\Unit\d3TotpUnitTestCase;
use Doctrine\DBAL\ForwardCompatibility\Result;
use Doctrine\DBAL\Query\QueryBuilder;
use OTPHP\TOTP;
use OxidEsales\Eshop\Application\Model\User;
use OxidEsales\Eshop\Core\Database\Adapter\Doctrine\Database;
use OxidEsales\Eshop\Core\Registry;
use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory;
use OxidEsales\EshopCommunity\Internal\Framework\Database\ConnectionProviderInterface;
use PHPUnit\Framework\MockObject\MockObject;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use ReflectionException;
use stdClass;
class d3totpTest extends d3TotpUnitTestCase
{
use CanAccessRestricted;
/** @var d3totp */
protected $_oModel;
protected d3totp $_oModel;
/**
* setup basic requirements
@ -62,7 +67,7 @@ class d3totpTest extends d3TotpUnitTestCase
public function constructCallsInit()
{
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['init'])
->getMock();
$oModelMock->expects($this->once())->method('init');
@ -75,25 +80,32 @@ class d3totpTest extends d3TotpUnitTestCase
/**
* @test
* @throws ReflectionException
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
* @covers \D3\Totp\Application\Model\d3totp::loadByUserId
*/
public function loadByUserIdTableNotExist()
{
/** @var Database|MockObject $oDbMock */
$oDbMock = $this->getMockBuilder(Database::class)
$resultMock = $this->d3getMockBuilder(Result::class)
->disableOriginalConstructor()
->onlyMethods(['getOne'])
->onlyMethods(['fetchOne'])
->getMock();
$oDbMock->expects($this->once())->method('getOne')->willReturnOnConsecutiveCalls(false, true);
$resultMock->method('fetchOne')->willReturn('');
$qbMock = $this->d3getMockBuilder(QueryBuilder::class)
->setConstructorArgs([ContainerFactory::getInstance()->getContainer()->get(ConnectionProviderInterface::class)->get()])
->onlyMethods(['execute'])
->getMock();
$qbMock->method('execute')->willReturn($resultMock);
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'd3GetDb',
'getQueryBuilder',
'load',
])
->getMock();
$oModelMock->method('d3GetDb')->willReturn($oDbMock);
$oModelMock->method('getQueryBuilder')->willReturn($qbMock);
$oModelMock->expects($this->never())->method('load')->willReturn(true);
$this->_oModel = $oModelMock;
@ -103,29 +115,33 @@ class d3totpTest extends d3TotpUnitTestCase
/**
* @test
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
* @throws ReflectionException
* @covers \D3\Totp\Application\Model\d3totp::loadByUserId
*/
public function loadByUserIdTableExist()
{
/** @var Database|MockObject $oDbMock */
$oDbMock = $this->getMockBuilder(Database::class)
$resultMock = $this->d3getMockBuilder(Result::class)
->disableOriginalConstructor()
->onlyMethods([
'getOne',
'quote',
])->getMock();
$oDbMock->expects($this->exactly(2))->method('getOne')->willReturnOnConsecutiveCalls(true, true);
$oDbMock->method('quote')->willReturn(true);
->onlyMethods(['fetchOne'])
->getMock();
$resultMock->method('fetchOne')->willReturn('oxid');
$qbMock = $this->d3getMockBuilder(QueryBuilder::class)
->setConstructorArgs([ContainerFactory::getInstance()->getContainer()->get(ConnectionProviderInterface::class)->get()])
->onlyMethods(['execute'])
->getMock();
$qbMock->method('execute')->willReturn($resultMock);
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'd3GetDb',
'getQueryBuilder',
'load',
])
->getMock();
$oModelMock->method('d3GetDb')->willReturn($oDbMock);
$oModelMock->method('getQueryBuilder')->willReturn($qbMock);
$oModelMock->expects($this->once())->method('load')->willReturn(true);
$this->_oModel = $oModelMock;
@ -141,13 +157,13 @@ class d3totpTest extends d3TotpUnitTestCase
public function getUserFromMember()
{
/** @var User|MockObject $oUserMock */
$oUserMock = $this->getMockBuilder(User::class)
$oUserMock = $this->d3getMockBuilder(User::class)
->onlyMethods(['load'])
->getMock();
$oUserMock->method('load')->with('foobar')->willReturn(true);
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'd3GetUser',
'getFieldData',
@ -176,13 +192,13 @@ class d3totpTest extends d3TotpUnitTestCase
$this->setValue($this->_oModel, 'userId', null);
/** @var User|MockObject $oUserMock */
$oUserMock = $this->getMockBuilder(User::class)
$oUserMock = $this->d3getMockBuilder(User::class)
->onlyMethods(['load'])
->getMock();
$oUserMock->method('load')->with('barfoo')->willReturn(true);
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'd3GetUser',
'getFieldData',
@ -201,27 +217,30 @@ class d3totpTest extends d3TotpUnitTestCase
/**
* @test
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
* @throws ReflectionException
* @covers \D3\Totp\Application\Model\d3totp::checkIfAlreadyExist
*/
public function checkIfAlreadyExistPass()
{
/** @var Database|MockObject $oDbMock */
$oDbMock = $this->getMockBuilder(Database::class)
->onlyMethods([
'getOne',
'quote',
])
$resultMock = $this->d3getMockBuilder(Result::class)
->disableOriginalConstructor()
->onlyMethods(['fetchOne'])
->getMock();
$oDbMock->expects($this->once())->method('getOne')->willReturn(1);
$oDbMock->method('quote')->willReturn(true);
$resultMock->method('fetchOne')->willReturn(2);
$qbMock = $this->d3getMockBuilder(QueryBuilder::class)
->setConstructorArgs([ContainerFactory::getInstance()->getContainer()->get(ConnectionProviderInterface::class)->get()])
->onlyMethods(['execute'])
->getMock();
$qbMock->method('execute')->willReturn($resultMock);
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
->onlyMethods(['d3GetDb'])
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['getQueryBuilder'])
->getMock();
$oModelMock->method('d3GetDb')->willReturn($oDbMock);
$oModelMock->method('getQueryBuilder')->willReturn($qbMock);
$this->_oModel = $oModelMock;
@ -230,19 +249,6 @@ class d3totpTest extends d3TotpUnitTestCase
);
}
/**
* @test
* @throws ReflectionException
* @covers \D3\Totp\Application\Model\d3totp::d3GetDb
*/
public function d3GetDbReturnsRightInstance()
{
$this->assertInstanceOf(
Database::class,
$this->callMethod($this->_oModel, 'd3GetDb')
);
}
/**
* @test
* @throws ReflectionException
@ -266,7 +272,7 @@ class d3totpTest extends d3TotpUnitTestCase
Registry::getConfig()->setConfigParam('blDisableTotpGlobally', false);
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['UserUseTotp'])
->getMock();
$oModelMock->method('UserUseTotp')->willReturn(true);
@ -288,7 +294,7 @@ class d3totpTest extends d3TotpUnitTestCase
Registry::getConfig()->setConfigParam('blDisableTotpGlobally', false);
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['UserUseTotp'])
->getMock();
$oModelMock->method('UserUseTotp')->willReturn(false);
@ -310,7 +316,7 @@ class d3totpTest extends d3TotpUnitTestCase
Registry::getConfig()->setConfigParam('blDisableTotpGlobally', true);
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['UserUseTotp'])
->getMock();
$oModelMock->method('UserUseTotp')->willReturn(true);
@ -332,7 +338,7 @@ class d3totpTest extends d3TotpUnitTestCase
Registry::getConfig()->setConfigParam('blDisableTotpGlobally', true);
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['UserUseTotp'])
->getMock();
$oModelMock->method('UserUseTotp')->willReturn(false);
@ -352,7 +358,7 @@ class d3totpTest extends d3TotpUnitTestCase
public function UserUseTotpPass()
{
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['getFieldData'])
->getMock();
$oModelMock->method('getFieldData')->willReturnOnConsecutiveCalls(true, true);
@ -372,7 +378,7 @@ class d3totpTest extends d3TotpUnitTestCase
public function UserUseTotpNoTotp()
{
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['getFieldData'])
->getMock();
$oModelMock->method('getFieldData')->willReturnOnConsecutiveCalls(false, true);
@ -392,7 +398,7 @@ class d3totpTest extends d3TotpUnitTestCase
public function UserUseTotpNoSeed()
{
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['getFieldData'])
->getMock();
$oModelMock->method('getFieldData')->willReturnOnConsecutiveCalls(true, false);
@ -412,7 +418,7 @@ class d3totpTest extends d3TotpUnitTestCase
public function UserUseTotpNoTotpAndNoSeed()
{
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['getFieldData'])
->getMock();
$oModelMock->method('getFieldData')->willReturnOnConsecutiveCalls(false, false);
@ -432,7 +438,7 @@ class d3totpTest extends d3TotpUnitTestCase
public function getSavedSecretExistingSeed()
{
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'getFieldData',
'decrypt',
@ -457,7 +463,7 @@ class d3totpTest extends d3TotpUnitTestCase
public function getSavedSecretNoSeed()
{
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'getFieldData',
'decrypt',
@ -481,7 +487,7 @@ class d3totpTest extends d3TotpUnitTestCase
public function getSavedSecretCantDecrypt()
{
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'getFieldData',
'decrypt',
@ -504,15 +510,12 @@ class d3totpTest extends d3TotpUnitTestCase
*/
public function getTotpReturnsCachedObject()
{
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
->disableOriginalConstructor()
->getMock();
$otpMock = TOTP::createFromSecret('abc');
$this->setValue($this->_oModel, 'totp', $oTotpMock);
$this->setValue($this->_oModel, 'totp', $otpMock);
$this->assertSame(
$oTotpMock,
$otpMock,
$this->callMethod($this->_oModel, 'getTotp')
);
}
@ -525,13 +528,13 @@ class d3totpTest extends d3TotpUnitTestCase
public function getTotpReturnsNewObject()
{
/** @var User|MockObject $oUserMock */
$oUserMock = $this->getMockBuilder(User::class)
$oUserMock = $this->d3getMockBuilder(User::class)
->onlyMethods(['getFieldData'])
->getMock();
$oUserMock->method('getFieldData')->willReturn('username');
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'getUser',
'getSavedSecret',
@ -558,7 +561,7 @@ class d3totpTest extends d3TotpUnitTestCase
public function getTotpReturnsNewObjectNoUserGivenSeed()
{
/** @var User|MockObject $oUserMock */
$oUserMock = $this->getMockBuilder(User::class)
$oUserMock = $this->d3getMockBuilder(User::class)
->onlyMethods(['getFieldData'])
->getMock();
$oUserMock->method('getFieldData')->willReturnMap(
@ -566,7 +569,7 @@ class d3totpTest extends d3TotpUnitTestCase
);
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'getUser',
'getSavedSecret',
@ -594,18 +597,15 @@ class d3totpTest extends d3TotpUnitTestCase
{
BaconQrCodeFactory::renderer(200);
/** @var stdClass|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(stdClass::class)
->addMethods(['getProvisioningUri'])
->getMock();
$oTotpMock->method('getProvisioningUri')->willReturn('uri');
$otpMock = TOTP::createFromSecret('abc');
$otpMock->setLabel('label');
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['getTotp'])
->disableOriginalConstructor()
->getMock();
$oModelMock->method('getTotp')->willReturn($oTotpMock);
$oModelMock->method('getTotp')->willReturn($otpMock);
$this->_oModel = $oModelMock;
@ -636,17 +636,13 @@ class d3totpTest extends d3TotpUnitTestCase
*/
public function getSecretPass()
{
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
->onlyMethods(['getSecret'])
->getMock();
$oTotpMock->expects($this->once())->method('getSecret')->willReturn('fixture');
$otpMock = TOTP::createFromSecret('abc');
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['getTotp'])
->getMock();
$oModelMock->method('getTotp')->willReturn($oTotpMock);
$oModelMock->method('getTotp')->willReturn($otpMock);
$this->_oModel = $oModelMock;
@ -662,7 +658,7 @@ class d3totpTest extends d3TotpUnitTestCase
public function saveSecretPass()
{
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['encrypt'])
->getMock();
$oModelMock->method('encrypt')->willReturn('enc_secret');
@ -683,17 +679,30 @@ class d3totpTest extends d3TotpUnitTestCase
*/
public function verifyPass()
{
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
->onlyMethods(['verify'])
$otpMock = TOTP::createFromSecret('abc');
$userMock = oxNew(User::class);
$userMock->setId('foo');
$userMock->assign(['oxpasssalt' => '6162636465666768696A6B']);
$backupCodeMock = $this->d3getMockBuilder(d3backupcode::class)
->onlyMethods(['d3TotpGetUserObject'])
->getMock();
$oTotpMock->expects($this->once())->method('verify')->willReturn(true);
$backupCodeMock->method('d3TotpGetUserObject')->willReturn($userMock);
$backupCodeListMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods(['d3GetUser', 'getBaseObject', 'verify'])
->getMock();
$backupCodeListMock->method('d3GetUser')->willReturn($userMock);
$backupCodeListMock->method('getBaseObject')->willReturn($backupCodeMock);
$backupCodeListMock->method('verify')->willReturn(true);
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
->onlyMethods(['getTotp'])
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['getTotp', 'd3GetBackupCodeListObject'])
->getMock();
$oModelMock->method('getTotp')->willReturn($oTotpMock);
$oModelMock->method('getTotp')->willReturn($otpMock);
$oModelMock->method('d3GetBackupCodeListObject')->willReturn($backupCodeListMock);
$this->_oModel = $oModelMock;
@ -710,25 +719,21 @@ class d3totpTest extends d3TotpUnitTestCase
public function verifyBackupCodePass()
{
/** @var d3backupcodelist|MockObject $oBackupCodeListMock */
$oBackupCodeListMock = $this->getMockBuilder(d3backupcodelist::class)
$oBackupCodeListMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods(['verify'])
->getMock();
$oBackupCodeListMock->expects($this->once())->method('verify')->willReturn(true);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
->onlyMethods(['verify'])
->getMock();
$oTotpMock->expects($this->once())->method('verify')->willReturn(false);
$otpMock = TOTP::createFromSecret('abc');
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'getTotp',
'd3GetBackupCodeListObject',
])
->getMock();
$oModelMock->method('getTotp')->willReturn($oTotpMock);
$oModelMock->method('getTotp')->willReturn($otpMock);
$oModelMock->method('d3GetBackupCodeListObject')->willReturn($oBackupCodeListMock);
$this->_oModel = $oModelMock;
@ -748,25 +753,21 @@ class d3totpTest extends d3TotpUnitTestCase
$this->expectException(d3totp_wrongOtpException::class);
/** @var d3backupcodelist|MockObject $oBackupCodeListMock */
$oBackupCodeListMock = $this->getMockBuilder(d3backupcodelist::class)
$oBackupCodeListMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods(['verify'])
->getMock();
$oBackupCodeListMock->expects($this->once())->method('verify')->willReturn(false);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
->onlyMethods(['verify'])
->getMock();
$oTotpMock->expects($this->once())->method('verify')->willReturn(false);
$otpMock = TOTP::createFromSecret('abc');
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'getTotp',
'd3GetBackupCodeListObject',
])
->getMock();
$oModelMock->method('getTotp')->willReturn($oTotpMock);
$oModelMock->method('getTotp')->willReturn($otpMock);
$oModelMock->method('d3GetBackupCodeListObject')->willReturn($oBackupCodeListMock);
$this->_oModel = $oModelMock;
@ -784,25 +785,21 @@ class d3totpTest extends d3TotpUnitTestCase
$this->expectException(d3totp_wrongOtpException::class);
/** @var d3backupcodelist|MockObject $oBackupCodeListMock */
$oBackupCodeListMock = $this->getMockBuilder(d3backupcodelist::class)
$oBackupCodeListMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods(['verify'])
->getMock();
$oBackupCodeListMock->expects($this->never())->method('verify')->willReturn(false);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
->onlyMethods(['verify'])
->getMock();
$oTotpMock->expects($this->once())->method('verify')->willReturn(false);
$otpMock = TOTP::createFromSecret('abc');
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'getTotp',
'd3GetBackupCodeListObject',
])
->getMock();
$oModelMock->method('getTotp')->willReturn($oTotpMock);
$oModelMock->method('getTotp')->willReturn($otpMock);
$oModelMock->method('d3GetBackupCodeListObject')->willReturn($oBackupCodeListMock);
$this->_oModel = $oModelMock;
@ -863,7 +860,7 @@ class d3totpTest extends d3TotpUnitTestCase
public function decryptFailed()
{
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['d3Base64_decode'])
->getMock();
$oModelMock->method('d3Base64_decode')->willReturn(
@ -902,22 +899,20 @@ class d3totpTest extends d3TotpUnitTestCase
public function deletePass()
{
/** @var d3backupcodelist|MockObject $oBackupCodeListMock */
$oBackupCodeListMock = $this->getMockBuilder(d3backupcodelist::class)
$oBackupCodeListMock = $this->d3getMockBuilder(d3backupcodelist::class)
->onlyMethods(['deleteAllFromUser'])
->getMock();
$oBackupCodeListMock->expects($this->once())->method('deleteAllFromUser')->willReturn(true);
$oBackupCodeListMock->expects($this->once())->method('deleteAllFromUser');
/** @var d3totp|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(d3totp::class)
$oModelMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'd3GetBackupCodeListObject',
'getFieldData',
'canDelete',
])
->getMock();
$oModelMock->method('d3GetBackupCodeListObject')->willReturn($oBackupCodeListMock);
$oModelMock->method('getFieldData')->willReturn('newId');
$oModelMock->method('canDelete')->willReturn(false);
$this->_oModel = $oModelMock;

View File

@ -13,14 +13,14 @@
declare(strict_types=1);
namespace D3\Totp\tests\unit\Modules\Application\Component;
namespace D3\Totp\Tests\Unit\Modules\Application\Component;
use D3\TestingTools\Development\CanAccessRestricted;
use D3\Totp\Application\Model\d3totp;
use D3\Totp\Application\Model\d3totp_conf;
use D3\Totp\Application\Model\Exceptions\d3totp_wrongOtpException;
use D3\Totp\Modules\Application\Component\d3_totp_UserComponent;
use D3\Totp\tests\unit\d3TotpUnitTestCase;
use D3\Totp\Tests\Unit\d3TotpUnitTestCase;
use InvalidArgumentException;
use OxidEsales\Eshop\Application\Component\UserComponent;
use OxidEsales\Eshop\Application\Model\User;
@ -39,33 +39,33 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
/**
* @test
* @throws ReflectionException
* @covers \D3\Totp\Modules\Application\Component\d3_totp_UserComponent::_afterLogin
* @covers \D3\Totp\Modules\Application\Component\d3_totp_UserComponent::afterLogin
*/
public function afterLoginFailsIfNoUserLoggedIn()
{
$oUser = false;
/** @var Utils|MockObject $oUtilsMock */
$oUtilsMock = $this->getMockBuilder(Utils::class)
$oUtilsMock = $this->d3getMockBuilder(Utils::class)
->onlyMethods(['redirect'])
->getMock();
$oUtilsMock->expects($this->never())->method('redirect')->willReturn(true);
/** @var Session|MockObject $oSessionMock */
$oSessionMock = $this->getMockBuilder(Session::class)
$oSessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods(['setVariable'])
->getMock();
$oSessionMock->expects($this->never())->method('setVariable');
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['isActive'])
->disableOriginalConstructor()
->getMock();
$oTotpMock->expects($this->never())->method('isActive')->willReturn(false);
/** @var UserComponent|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(UserComponent::class)
$oControllerMock = $this->d3getMockBuilder(UserComponent::class)
->onlyMethods([
'd3GetTotpObject',
'd3TotpGetSession',
@ -79,19 +79,19 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
$this->expectException(InvalidArgumentException::class);
$this->callMethod($oControllerMock, '_afterLogin', [$oUser]);
$this->callMethod($oControllerMock, 'afterLogin', [$oUser]);
}
/**
* @test
* @throws ReflectionException
* @covers \D3\Totp\Modules\Application\Component\d3_totp_UserComponent::_afterLogin
* @covers \D3\Totp\Modules\Application\Component\d3_totp_UserComponent::afterLogin
* @dataProvider afterLoginFailTotpNotActiveOrAlreadyCheckedDataProvider
*/
public function afterLoginFailTotpNotActiveOrAlreadyChecked($isActive, $checked)
{
/** @var User|MockObject $oUserMock */
$oUserMock = $this->getMockBuilder(User::class)
$oUserMock = $this->d3getMockBuilder(User::class)
->onlyMethods([
'logout',
'getId',
@ -101,20 +101,20 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
$oUserMock->method('getId')->willReturn('foo');
/** @var Utils|MockObject $oUtilsMock */
$oUtilsMock = $this->getMockBuilder(Utils::class)
$oUtilsMock = $this->d3getMockBuilder(Utils::class)
->onlyMethods(['redirect'])
->getMock();
$oUtilsMock->expects($this->never())->method('redirect')->willReturn(true);
/** @var Session|MockObject $oSessionMock */
$oSessionMock = $this->getMockBuilder(Session::class)
$oSessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods(['setVariable', 'getVariable'])
->getMock();
$oSessionMock->expects($this->never())->method('setVariable');
$oSessionMock->method('getVariable')->willReturn($checked);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'isActive',
'loadByUserId',
@ -122,10 +122,10 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
->disableOriginalConstructor()
->getMock();
$oTotpMock->expects($this->once())->method('isActive')->willReturn($isActive);
$oTotpMock->method('loadByUserId')->willReturn(true);
$oTotpMock->method('loadByUserId');
/** @var UserComponent|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(UserComponent::class)
$oControllerMock = $this->d3getMockBuilder(UserComponent::class)
->onlyMethods([
'd3GetTotpObject',
'd3TotpGetSession',
@ -136,7 +136,7 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
$oControllerMock->method('d3TotpGetSession')->willReturn($oSessionMock);
$oControllerMock->method('d3TotpGetUtils')->willReturn($oUtilsMock);
$this->callMethod($oControllerMock, '_afterLogin', [$oUserMock]);
$this->callMethod($oControllerMock, 'afterLogin', [$oUserMock]);
}
/**
@ -154,12 +154,12 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
/**
* @test
* @throws ReflectionException
* @covers \D3\Totp\Modules\Application\Component\d3_totp_UserComponent::_afterLogin
* @covers \D3\Totp\Modules\Application\Component\d3_totp_UserComponent::afterLogin
*/
public function afterLoginPass()
{
/** @var User|MockObject $oUserMock */
$oUserMock = $this->getMockBuilder(User::class)
$oUserMock = $this->d3getMockBuilder(User::class)
->onlyMethods([
'logout',
'getId',
@ -169,26 +169,26 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
$oUserMock->method('getId')->willReturn('foo');
/** @var Utils|MockObject $oUtilsMock */
$oUtilsMock = $this->getMockBuilder(Utils::class)
$oUtilsMock = $this->d3getMockBuilder(Utils::class)
->onlyMethods(['redirect'])
->getMock();
$oUtilsMock->expects($this->once())->method('redirect')->willReturn(true);
/** @var Session|MockObject $oSessionMock */
$oSessionMock = $this->getMockBuilder(Session::class)
$oSessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods(['setVariable', 'getVariable'])
->getMock();
$oSessionMock->expects($this->atLeast(3))->method('setVariable');
$oSessionMock->method('getVariable')->willReturn(null);
/** @var BaseController|MockObject $oParentMock */
$oParentMock = $this->getMockBuilder(BaseController::class)
$oParentMock = $this->d3getMockBuilder(BaseController::class)
->onlyMethods(['getClassKey'])
->getMock();
$oParentMock->method('getClassKey')->willReturn('foo');
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'isActive',
'loadByUserId',
@ -196,10 +196,10 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
->disableOriginalConstructor()
->getMock();
$oTotpMock->expects($this->once())->method('isActive')->willReturn(true);
$oTotpMock->method('loadByUserId')->willReturn(true);
$oTotpMock->method('loadByUserId');
/** @var UserComponent|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(UserComponent::class)
$oControllerMock = $this->d3getMockBuilder(UserComponent::class)
->onlyMethods([
'd3GetTotpObject',
'd3TotpGetSession',
@ -212,7 +212,7 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
$oControllerMock->method('d3TotpGetSession')->willReturn($oSessionMock);
$oControllerMock->method('d3TotpGetUtils')->willReturn($oUtilsMock);
$this->callMethod($oControllerMock, '_afterLogin', [$oUserMock]);
$this->callMethod($oControllerMock, 'afterLogin', [$oUserMock]);
}
/**
@ -239,20 +239,20 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
public function checkTotploginNoTotpLogin()
{
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['loadByUserId'])
->disableOriginalConstructor()
->getMock();
$oTotpMock->method('loadByUserId')->willReturn(true);
$oTotpMock->method('loadByUserId');
/** @var Session|MockObject $oSessionMock */
$oSessionMock = $this->getMockBuilder(Session::class)
$oSessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods(['setVariable'])
->getMock();
$oSessionMock->expects($this->never())->method('setVariable');
/** @var UserComponent|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(UserComponent::class)
$oControllerMock = $this->d3getMockBuilder(UserComponent::class)
->onlyMethods([
'd3TotpIsNoTotpOrNoLogin',
'd3TotpHasValidTotp',
@ -265,6 +265,8 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
$oControllerMock->method('d3GetTotpObject')->willReturn($oTotpMock);
$oControllerMock->method('d3TotpGetSession')->willReturn($oSessionMock);
Registry::getSession()->setVariable(d3totp_conf::SESSION_CURRENTUSER, 'oxid');
$this->assertSame(
'd3totplogin',
$this->callMethod($oControllerMock, 'd3TotpCheckTotpLogin')
@ -279,31 +281,31 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
public function checkTotploginUnvalidTotp()
{
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['loadByUserId'])
->disableOriginalConstructor()
->getMock();
$oTotpMock->method('loadByUserId')->willReturn(true);
$oTotpMock->method('loadByUserId');
/** @var Session|MockObject $oSessionMock */
$oSessionMock = $this->getMockBuilder(Session::class)
$oSessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods(['setVariable'])
->getMock();
$oSessionMock->expects($this->never())->method('setVariable');
/** @var d3totp_wrongOtpException|MockObject $oTotpExceptionMock */
$oTotpExceptionMock = $this->getMockBuilder(d3totp_wrongOtpException::class)
$oTotpExceptionMock = $this->d3getMockBuilder(d3totp_wrongOtpException::class)
->disableOriginalConstructor()
->getMock();
/** @var UtilsView|MockObject $oUtilsViewMock */
$oUtilsViewMock = $this->getMockBuilder(UtilsView::class)
$oUtilsViewMock = $this->d3getMockBuilder(UtilsView::class)
->onlyMethods(['addErrorToDisplay'])
->getMock();
$oUtilsViewMock->expects($this->atLeast(1))->method('addErrorToDisplay')->willReturn(true);
/** @var UserComponent|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(UserComponent::class)
$oControllerMock = $this->d3getMockBuilder(UserComponent::class)
->onlyMethods([
'd3TotpIsNoTotpOrNoLogin',
'd3TotpHasValidTotp',
@ -318,6 +320,8 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
$oControllerMock->method('d3GetTotpObject')->willReturn($oTotpMock);
$oControllerMock->method('d3TotpGetSession')->willReturn($oSessionMock);
Registry::getSession()->setVariable(d3totp_conf::SESSION_CURRENTUSER, 'oxid');
$this->assertSame(
'd3totplogin',
$this->callMethod($oControllerMock, 'd3TotpCheckTotpLogin')
@ -332,26 +336,26 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
public function checkTotploginValidTotp()
{
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['loadByUserId'])
->disableOriginalConstructor()
->getMock();
$oTotpMock->method('loadByUserId')->willReturn(true);
$oTotpMock->method('loadByUserId');
/** @var Session|MockObject $oSessionMock */
$oSessionMock = $this->getMockBuilder(Session::class)
$oSessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods(['setVariable'])
->getMock();
$oSessionMock->expects($this->atLeast(2))->method('setVariable');
/** @var UtilsView|MockObject $oUtilsViewMock */
$oUtilsViewMock = $this->getMockBuilder(UtilsView::class)
$oUtilsViewMock = $this->d3getMockBuilder(UtilsView::class)
->onlyMethods(['addErrorToDisplay'])
->getMock();
$oUtilsViewMock->expects($this->never())->method('addErrorToDisplay')->willReturn(true);
/** @var UserComponent|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(UserComponent::class)
$oControllerMock = $this->d3getMockBuilder(UserComponent::class)
->onlyMethods([
'd3TotpIsNoTotpOrNoLogin',
'd3TotpHasValidTotp',
@ -370,6 +374,8 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
$this->identicalTo(USER_LOGIN_SUCCESS)
);
Registry::getSession()->setVariable(d3totp_conf::SESSION_CURRENTUSER, 'oxid');
$this->assertFalse(
$this->callMethod($oControllerMock, 'd3TotpCheckTotpLogin')
);
@ -415,10 +421,10 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
public function canCancelTotpLogin()
{
/** @var UserComponent|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(UserComponent::class)
$oControllerMock = $this->d3getMockBuilder(UserComponent::class)
->onlyMethods(['d3TotpClearSessionVariables'])
->getMock();
$oControllerMock->expects($this->once())->method('d3TotpClearSessionVariables')->willReturn(false);
$oControllerMock->expects($this->once())->method('d3TotpClearSessionVariables');
$this->callMethod($oControllerMock, 'd3TotpCancelTotpLogin');
}
@ -433,7 +439,7 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
Registry::getSession()->setVariable(d3totp_conf::SESSION_CURRENTUSER, false);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['isActive'])
->disableOriginalConstructor()
->getMock();
@ -457,7 +463,7 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
Registry::getSession()->setVariable(d3totp_conf::SESSION_CURRENTUSER, true);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['isActive'])
->disableOriginalConstructor()
->getMock();
@ -481,7 +487,7 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
Registry::getSession()->setVariable(d3totp_conf::SESSION_CURRENTUSER, true);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['isActive'])
->disableOriginalConstructor()
->getMock();
@ -505,7 +511,7 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
Registry::getSession()->setVariable(d3totp_conf::SESSION_AUTH, true);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['verify'])
->disableOriginalConstructor()
->getMock();
@ -529,7 +535,7 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
Registry::getSession()->setVariable(d3totp_conf::SESSION_AUTH, false);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['verify'])
->disableOriginalConstructor()
->getMock();
@ -553,7 +559,7 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
Registry::getSession()->setVariable(d3totp_conf::SESSION_AUTH, false);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['verify'])
->disableOriginalConstructor()
->getMock();
@ -563,7 +569,7 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
$oController = oxNew(UserComponent::class);
$this->expectException(d3totp_wrongOtpException::class);
$this->callMethod($oController, 'd3TotpHasValidTotp', [null, $oTotpMock]);
$this->callMethod($oController, 'd3TotpHasValidTotp', ['', $oTotpMock]);
}
/**
@ -576,7 +582,7 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
Registry::getSession()->setVariable(d3totp_conf::SESSION_AUTH, false);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['verify'])
->disableOriginalConstructor()
->getMock();
@ -598,13 +604,13 @@ class d3_totp_UserComponentTest extends d3TotpUnitTestCase
public function d3TotpClearSessionVariablesPass()
{
/** @var Session|MockObject $oSessionMock */
$oSessionMock = $this->getMockBuilder(Session::class)
$oSessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods(['deleteVariable'])
->getMock();
$oSessionMock->expects($this->atLeast(3))->method('deleteVariable')->willReturn(false);
/** @var UserComponent|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(UserComponent::class)
$oControllerMock = $this->d3getMockBuilder(UserComponent::class)
->onlyMethods(['d3TotpGetSession'])
->getMock();
$oControllerMock->method('d3TotpGetSession')->willReturn($oSessionMock);

View File

@ -13,14 +13,14 @@
declare(strict_types=1);
namespace D3\Totp\tests\unit\Modules\Application\Controller\Admin;
namespace D3\Totp\Tests\Unit\Modules\Application\Controller\Admin;
use D3\TestingTools\Development\CanAccessRestricted;
use D3\Totp\Application\Model\d3totp;
use D3\Totp\Application\Model\d3totp_conf;
use D3\Totp\Modules\Application\Controller\Admin\d3_totp_LoginController;
use D3\Totp\Modules\Application\Model\d3_totp_user;
use D3\Totp\tests\unit\d3TotpUnitTestCase;
use D3\Totp\Tests\Unit\d3TotpUnitTestCase;
use OxidEsales\Eshop\Application\Controller\Admin\LoginController;
use OxidEsales\Eshop\Application\Model\User;
use OxidEsales\Eshop\Core\Language;
@ -89,7 +89,7 @@ class d3_totp_LoginControllerTest extends d3TotpUnitTestCase
$fixture = 'returnString';
/** @var d3_totp_LoginController|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3_totp_LoginController::class)
$oControllerMock = $this->d3getMockBuilder(d3_totp_LoginController::class)
->onlyMethods(['d3CallMockableFunction'])
->getMock();
$oControllerMock->method('d3CallMockableFunction')->willReturn($fixture);
@ -120,7 +120,7 @@ class d3_totp_LoginControllerTest extends d3TotpUnitTestCase
public function canRunTotpAfterLogin($selectedProfile, $setCookie, $expectedCookie, $setSession)
{
/** @var Session|MockObject $sessionMock */
$sessionMock = $this->getMockBuilder(Session::class)
$sessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods(['getVariable', 'setVariable'])
->getMock();
$variableMap = [
@ -135,7 +135,7 @@ class d3_totp_LoginControllerTest extends d3TotpUnitTestCase
$sessionMock->expects($setSession)->method('setVariable')->willReturnMap($variableMap);
/** @var UtilsServer|MockObject $utilsServerMock */
$utilsServerMock = $this->getMockBuilder(UtilsServer::class)
$utilsServerMock = $this->d3getMockBuilder(UtilsServer::class)
->onlyMethods(['setOxCookie'])
->getMock();
$utilsServerMock->expects($setCookie)->method('setOxCookie')->with(
@ -144,12 +144,12 @@ class d3_totp_LoginControllerTest extends d3TotpUnitTestCase
);
/** @var d3_totp_LoginController|MockObject $sut */
$sut = $this->getMockBuilder(LoginController::class)
$sut = $this->d3getMockBuilder(LoginController::class)
->onlyMethods(['d3TotpGetUtilsServer', 'd3TotpGetSession', 'd3totpAfterLoginSetLanguage'])
->getMock();
$sut->method('d3TotpGetUtilsServer')->willReturn($utilsServerMock);
$sut->method('d3TotpGetSession')->willReturn($sessionMock);
$sut->expects($this->once())->method('d3totpAfterLoginSetLanguage')->willReturn($sessionMock);
$sut->expects($this->once())->method('d3totpAfterLoginSetLanguage');
$this->callMethod(
$sut,
@ -178,25 +178,25 @@ class d3_totp_LoginControllerTest extends d3TotpUnitTestCase
public function canRunTotpAfterLoginSetLanguage($languageId)
{
/** @var Session|MockObject $sessionMock */
$sessionMock = $this->getMockBuilder(Session::class)
$sessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods(['getVariable'])
->getMock();
$sessionMock->method('getVariable')->willReturn($languageId);
/** @var UtilsServer|MockObject $utilsServerMock */
$utilsServerMock = $this->getMockBuilder(UtilsServer::class)
$utilsServerMock = $this->d3getMockBuilder(UtilsServer::class)
->onlyMethods(['setOxCookie'])
->getMock();
$utilsServerMock->expects($this->once())->method('setOxCookie');
/** @var Language|MockObject $langMock */
$langMock = $this->getMockBuilder(Language::class)
$langMock = $this->d3getMockBuilder(Language::class)
->onlyMethods(['setTplLanguage'])
->getMock();
$langMock->expects($this->once())->method('setTplLanguage');
/** @var d3_totp_LoginController|MockObject $sut */
$sut = $this->getMockBuilder(LoginController::class)
$sut = $this->d3getMockBuilder(LoginController::class)
->onlyMethods(['d3TotpGetUtilsServer', 'd3TotpGetSession', 'd3TotpGetLangObject'])
->getMock();
$sut->method('d3TotpGetUtilsServer')->willReturn($utilsServerMock);
@ -233,20 +233,20 @@ class d3_totp_LoginControllerTest extends d3TotpUnitTestCase
public function d3TotpLoginMissingTest($totpActive, $loggedin, $expected)
{
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->disableOriginalConstructor()
->onlyMethods(['isActive'])
->getMock();
$oTotpMock->method('isActive')->willReturn($totpActive);
/** @var Session|MockObject $oSessionMock */
$oSessionMock = $this->getMockBuilder(Session::class)
$oSessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods(['getVariable'])
->getMock();
$oSessionMock->method('getVariable')->with(d3totp_conf::SESSION_ADMIN_AUTH)->willReturn($loggedin);
/** @var d3_totp_LoginController|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder(d3_totp_LoginController::class)
$oControllerMock = $this->d3getMockBuilder(d3_totp_LoginController::class)
->onlyMethods([
'd3TotpGetSession',
])

View File

@ -13,11 +13,11 @@
declare(strict_types=1);
namespace D3\Totp\tests\unit\Modules\Application\Controller;
namespace D3\Totp\Tests\Unit\Modules\Application\Controller;
use D3\Totp\Modules\Application\Controller\d3_totp_OrderController;
use D3\Totp\Modules\Application\Controller\d3_totp_OrderController_parent;
use D3\Totp\tests\unit\d3TotpUnitTestCase;
use D3\Totp\Tests\Unit\d3TotpUnitTestCase;
use OxidEsales\Eshop\Application\Controller\OrderController;
use PHPUnit\Framework\MockObject\MockObject;

View File

@ -13,10 +13,10 @@
declare(strict_types=1);
namespace D3\Totp\tests\unit\Modules\Application\Controller;
namespace D3\Totp\Tests\Unit\Modules\Application\Controller;
use D3\Totp\Modules\Application\Controller\d3_totp_PaymentController;
use D3\Totp\tests\unit\d3TotpUnitTestCase;
use D3\Totp\Tests\Unit\d3TotpUnitTestCase;
use OxidEsales\Eshop\Application\Controller\PaymentController;
class d3_totp_PaymentControllerTest extends d3TotpUnitTestCase

View File

@ -13,10 +13,10 @@
declare(strict_types=1);
namespace D3\Totp\tests\unit\Modules\Application\Controller;
namespace D3\Totp\Tests\Unit\Modules\Application\Controller;
use D3\Totp\Modules\Application\Controller\d3_totp_UserController;
use D3\Totp\tests\unit\d3TotpUnitTestCase;
use D3\Totp\Tests\Unit\d3TotpUnitTestCase;
use OxidEsales\Eshop\Application\Controller\UserController;
class d3_totp_UserControllerTest extends d3TotpUnitTestCase

View File

@ -13,7 +13,7 @@
declare(strict_types=1);
namespace D3\Totp\tests\unit\Modules\Application\Controller;
namespace D3\Totp\Tests\Unit\Modules\Application\Controller;
use D3\TestingTools\Development\CanAccessRestricted;
use D3\Totp\Application\Model\d3totp;
@ -29,20 +29,24 @@ trait d3_totp_getUserTestTrait
{
use CanAccessRestricted;
protected $userFixtureId = 'userIdFixture1';
protected string $userFixtureId = 'userIdFixture1';
/** @var User */
protected $userFixture;
protected User $userFixture;
public function setUp(): void
{
$this->userFixture = oxNew(User::class);
$this->userFixture->setId($this->userFixtureId);
$this->userFixture->assign(['oxlname' => __METHOD__]);
$this->userFixture->assign(['oxlname' => __METHOD__, 'oxusername' => __METHOD__, 'oxpassword' => __METHOD__]);
$this->userFixture->save();
$this->userFixture->load($this->userFixtureId);
}
/**
* @return void
* @throws \Exception
*/
public function tearDown(): void
{
$this->userFixture->delete($this->userFixtureId);
@ -55,13 +59,14 @@ trait d3_totp_getUserTestTrait
* @covers \D3\Totp\Modules\Application\Controller\d3_totp_PaymentController::getUser
* @covers \D3\Totp\Modules\Application\Controller\d3_totp_UserController::getUser
*/
public function getUserHasNoUser()
public function getUserHasNoUser(): void
{
/** @var d3_totp_orderController|d3_totp_UserController|d3_totp_PaymentController|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder($this->sControllerClass)
->onlyMethods(['d3GetTotpObject'])
$oControllerMock = $this->d3getMockBuilder($this->sControllerClass)
->onlyMethods(['d3GetTotpObject', 'd3CallMockableFunction'])
->getMock();
$oControllerMock->expects($this->never())->method('d3GetTotpObject');
$oControllerMock->method('d3CallMockableFunction')->willReturn(false);
$this->assertFalse(
$this->callMethod($oControllerMock, 'getUser')
@ -75,16 +80,16 @@ trait d3_totp_getUserTestTrait
* @covers \D3\Totp\Modules\Application\Controller\d3_totp_PaymentController::getUser
* @covers \D3\Totp\Modules\Application\Controller\d3_totp_UserController::getUser
*/
public function getUserTotpNotActive()
public function getUserTotpNotActive(): void
{
/** @var Session|MockObject $oSessionMock */
$oSessionMock = $this->getMockBuilder(Session::class)
$oSessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods(['getVariable'])
->getMock();
$oSessionMock->method('getVariable')->willReturn(true);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->disableOriginalConstructor()
->onlyMethods([
'isActive',
@ -92,10 +97,10 @@ trait d3_totp_getUserTestTrait
])
->getMock();
$oTotpMock->method('isActive')->willReturn(false);
$oTotpMock->method('loadByUserId')->willReturn(true);
$oTotpMock->method('loadByUserId');
/** @var d3_totp_orderController|d3_totp_UserController|d3_totp_PaymentController|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder($this->sControllerClass)
$oControllerMock = $this->d3getMockBuilder($this->sControllerClass)
->onlyMethods([
'd3GetTotpObject',
'd3TotpGetSessionObject',
@ -120,26 +125,26 @@ trait d3_totp_getUserTestTrait
* @covers \D3\Totp\Modules\Application\Controller\d3_totp_PaymentController::getUser
* @covers \D3\Totp\Modules\Application\Controller\d3_totp_UserController::getUser
*/
public function getUserTotpFinished()
public function getUserTotpFinished(): void
{
/** @var Session|MockObject $oSessionMock */
$oSessionMock = $this->getMockBuilder(Session::class)
$oSessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods(['getVariable'])
->getMock();
$oSessionMock->method('getVariable')->willReturn(true);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'isActive',
'loadByUserId',
])
->getMock();
$oTotpMock->method('isActive')->willReturn(true);
$oTotpMock->method('loadByUserId')->willReturn(true);
$oTotpMock->method('loadByUserId');
/** @var d3_totp_orderController|d3_totp_UserController|d3_totp_PaymentController|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder($this->sControllerClass)
$oControllerMock = $this->d3getMockBuilder($this->sControllerClass)
->onlyMethods([
'd3GetTotpObject',
'd3TotpGetSessionObject',
@ -164,16 +169,16 @@ trait d3_totp_getUserTestTrait
* @covers \D3\Totp\Modules\Application\Controller\d3_totp_PaymentController::getUser
* @covers \D3\Totp\Modules\Application\Controller\d3_totp_UserController::getUser
*/
public function getUserTotpNotFinished()
public function getUserTotpNotFinished(): void
{
/** @var Session|MockObject $oSessionMock */
$oSessionMock = $this->getMockBuilder(Session::class)
$oSessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods(['getVariable'])
->getMock();
$oSessionMock->method('getVariable')->willReturn(false);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->disableOriginalConstructor()
->onlyMethods([
'isActive',
@ -181,10 +186,10 @@ trait d3_totp_getUserTestTrait
])
->getMock();
$oTotpMock->method('isActive')->willReturn(true);
$oTotpMock->method('loadByUserId')->willReturn(true);
$oTotpMock->method('loadByUserId');
/** @var d3_totp_orderController|d3_totp_UserController|d3_totp_PaymentController|MockObject $oControllerMock */
$oControllerMock = $this->getMockBuilder($this->sControllerClass)
$oControllerMock = $this->d3getMockBuilder($this->sControllerClass)
->onlyMethods([
'd3GetTotpObject',
'd3TotpGetSessionObject',
@ -208,7 +213,7 @@ trait d3_totp_getUserTestTrait
* @covers \D3\Totp\Modules\Application\Controller\d3_totp_PaymentController::d3GetTotpObject
* @covers \D3\Totp\Modules\Application\Controller\d3_totp_UserController::d3GetTotpObject
*/
public function d3GetTotpObjectReturnsRightObject()
public function d3GetTotpObjectReturnsRightObject(): void
{
/** @var d3_totp_UserController|d3_totp_PaymentController|d3_totp_OrderController $oController */
$oController = oxNew($this->sControllerClass);
@ -226,7 +231,7 @@ trait d3_totp_getUserTestTrait
* @covers \D3\Totp\Modules\Application\Controller\d3_totp_PaymentController::d3TotpGetSessionObject
* @covers \D3\Totp\Modules\Application\Controller\d3_totp_UserController::d3TotpGetSessionObject
*/
public function d3GetSessionObjectReturnsRightObject()
public function d3GetSessionObjectReturnsRightObject(): void
{
/** @var d3_totp_UserController|d3_totp_PaymentController|d3_totp_OrderController $oController */
$oController = oxNew($this->sControllerClass);

View File

@ -13,13 +13,13 @@
declare(strict_types=1);
namespace D3\Totp\tests\unit\Modules\Application\Model;
namespace D3\Totp\Tests\Unit\Modules\Application\Model;
use D3\TestingTools\Development\CanAccessRestricted;
use D3\Totp\Application\Model\d3totp;
use D3\Totp\Application\Model\d3totp_conf;
use D3\Totp\Modules\Application\Model\d3_totp_user;
use D3\Totp\tests\unit\d3TotpUnitTestCase;
use D3\Totp\Tests\Unit\d3TotpUnitTestCase;
use OxidEsales\Eshop\Application\Model\User;
use OxidEsales\Eshop\Core\Session;
use PHPUnit\Framework\MockObject\MockObject;
@ -37,13 +37,13 @@ class d3_totp_userTest extends d3TotpUnitTestCase
public function logout()
{
/** @var Session|MockObject $oSessionMock */
$oSessionMock = $this->getMockBuilder(Session::class)
$oSessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods(['deleteVariable'])
->getMock();
$oSessionMock->expects($this->atLeast(2))->method('deleteVariable')->willReturn(true);
/** @var d3_totp_user|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(User::class)
$oModelMock = $this->d3getMockBuilder(User::class)
->onlyMethods(['d3TotpGetSession'])
->getMock();
$oModelMock->method('d3TotpGetSession')->willReturn($oSessionMock);
@ -109,7 +109,7 @@ class d3_totp_userTest extends d3TotpUnitTestCase
public function d3TotpGetCurrentUserTest($currentUser, $isAdmin, $adminAuth, $frontendAuth, $expected)
{
/** @var Session|MockObject $oSessionMock */
$oSessionMock = $this->getMockBuilder(Session::class)
$oSessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods(['hasVariable', 'getVariable'])
->getMock();
$oSessionMock->expects($this->once())->method('hasVariable')->willReturn((bool) $currentUser);
@ -122,7 +122,7 @@ class d3_totp_userTest extends d3TotpUnitTestCase
$oSessionMock->method('getVariable')->willReturnMap($getVariableMap);
/** @var d3_totp_user|MockObject $oModelMock */
$oModelMock = $this->getMockBuilder(User::class)
$oModelMock = $this->d3getMockBuilder(User::class)
->onlyMethods(['d3TotpGetSession', 'isAdmin'])
->getMock();
$oModelMock->method('d3TotpGetSession')->willReturn($oSessionMock);

View File

@ -13,17 +13,19 @@
declare(strict_types=1);
namespace D3\Totp\tests\unit\Modules\Core;
namespace D3\Totp\Tests\Unit\Modules\Core;
use D3\TestingTools\Development\CanAccessRestricted;
use D3\Totp\Application\Model\d3totp;
use D3\Totp\Application\Model\d3totp_conf;
use D3\Totp\Modules\Core\d3_totp_utils;
use D3\Totp\tests\unit\d3TotpUnitTestCase;
use D3\Totp\Tests\Unit\d3TotpUnitTestCase;
use OxidEsales\Eshop\Core\Config;
use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\Session;
use OxidEsales\Eshop\Core\Utils;
use OxidEsales\EshopCommunity\Internal\Framework\Module\Configuration\DataObject\ModuleConfiguration;
use OxidEsales\EshopCommunity\Internal\Framework\Module\Setting\Setting;
use PHPUnit\Framework\MockObject\MockObject;
use ReflectionException;
@ -61,24 +63,26 @@ class d3_totp_utilsTest extends d3TotpUnitTestCase
Registry::getSession()->setVariable(d3totp_conf::OXID_ADMIN_AUTH, false);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'loadByUserId',
'isActive',
])
->disableOriginalConstructor()
->getMock();
$oTotpMock->method('loadByUserId')->willReturn(true);
$oTotpMock->method('loadByUserId');
$oTotpMock->method('isActive')->willReturn(false);
/** @var d3_totp_utils|MockObject $oCoreMock */
$oCoreMock = $this->getMockBuilder(Utils::class)
$oCoreMock = $this->d3getMockBuilder(Utils::class)
->onlyMethods(['d3GetTotpObject'])
->getMock();
$oCoreMock->method('d3GetTotpObject')->willReturn($oTotpMock);
$this->_oCoreClass = $oCoreMock;
Registry::getSession()->setVariable(d3totp_conf::OXID_ADMIN_AUTH, 'oxid');
$this->assertFalse(
$this->callMethod($this->_oCoreClass, 'checkAccessRights')
);
@ -94,18 +98,18 @@ class d3_totp_utilsTest extends d3TotpUnitTestCase
Registry::getSession()->setVariable(d3totp_conf::OXID_ADMIN_AUTH, false);
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'loadByUserId',
'isActive',
])
->disableOriginalConstructor()
->getMock();
$oTotpMock->method('loadByUserId')->willReturn(true);
$oTotpMock->method('loadByUserId');
$oTotpMock->method('isActive')->willReturn(false);
/** @var d3_totp_utils|MockObject $oCoreMock */
$oCoreMock = $this->getMockBuilder(Utils::class)
$oCoreMock = $this->d3getMockBuilder(Utils::class)
->onlyMethods(['d3GetTotpObject', 'd3AuthHook', 'redirect', 'd3IsAdminForce2FA'])
->getMock();
$oCoreMock->method('d3GetTotpObject')->willReturn($oTotpMock);
@ -116,6 +120,8 @@ class d3_totp_utilsTest extends d3TotpUnitTestCase
$this->_oCoreClass = $oCoreMock;
Registry::getSession()->setVariable(d3totp_conf::OXID_ADMIN_AUTH, 'oxid');
$this->assertTrue(
$this->callMethod($this->_oCoreClass, 'checkAccessRights')
);
@ -131,18 +137,18 @@ class d3_totp_utilsTest extends d3TotpUnitTestCase
Registry::getSession()->setVariable(d3totp_conf::OXID_ADMIN_AUTH, 'foo');
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'loadByUserId',
'isActive',
])
->disableOriginalConstructor()
->getMock();
$oTotpMock->method('loadByUserId')->willReturn(true);
$oTotpMock->method('loadByUserId');
$oTotpMock->method('isActive')->willReturn(false);
/** @var d3_totp_utils|MockObject $oCoreMock */
$oCoreMock = $this->getMockBuilder(Utils::class)
$oCoreMock = $this->d3getMockBuilder(Utils::class)
->onlyMethods([
'd3GetTotpObject',
'fetchRightsForUser',
@ -168,24 +174,24 @@ class d3_totp_utilsTest extends d3TotpUnitTestCase
Registry::getSession()->setVariable(d3totp_conf::OXID_ADMIN_AUTH, 'foo');
/** @var Session|MockObject $oSessionMock */
$oSessionMock = $this->getMockBuilder(Session::class)
$oSessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods(['getVariable'])
->getMock();
$oSessionMock->method('getVariable')->will($this->onConsecutiveCalls('foo', true));
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'loadByUserId',
'isActive',
])
->disableOriginalConstructor()
->getMock();
$oTotpMock->method('loadByUserId')->willReturn(true);
$oTotpMock->method('loadByUserId');
$oTotpMock->method('isActive')->willReturn(true);
/** @var d3_totp_utils|MockObject $oCoreMock */
$oCoreMock = $this->getMockBuilder(Utils::class)
$oCoreMock = $this->d3getMockBuilder(Utils::class)
->onlyMethods([
'd3GetTotpObject',
'd3TotpGetSessionObject',
@ -215,30 +221,30 @@ class d3_totp_utilsTest extends d3TotpUnitTestCase
Registry::getSession()->setVariable(d3totp_conf::OXID_ADMIN_AUTH, 'foo');
/** @var Session|MockObject $oSessionMock */
$oSessionMock = $this->getMockBuilder(Session::class)
$oSessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods(['getVariable'])
->getMock();
$oSessionMock->method('getVariable')->will($this->onConsecutiveCalls('foo', false));
/** @var Session|MockObject $oSessionMock */
$oSessionMock = $this->getMockBuilder(Session::class)
$oSessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods(['getVariable'])
->getMock();
$oSessionMock->method('getVariable')->will($this->onConsecutiveCalls('foo', false));
/** @var d3totp|MockObject $oTotpMock */
$oTotpMock = $this->getMockBuilder(d3totp::class)
$oTotpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods([
'loadByUserId',
'isActive',
])
->disableOriginalConstructor()
->getMock();
$oTotpMock->method('loadByUserId')->willReturn(true);
$oTotpMock->method('loadByUserId');
$oTotpMock->method('isActive')->willReturn(true);
/** @var d3_totp_utils|MockObject $oCoreMock */
$oCoreMock = $this->getMockBuilder(Utils::class)
$oCoreMock = $this->d3getMockBuilder(Utils::class)
->onlyMethods([
'd3GetTotpObject',
'd3TotpGetSessionObject',
@ -309,18 +315,29 @@ class d3_totp_utilsTest extends d3TotpUnitTestCase
public function d3IsAdminForce2FA($isAdmin, $hasConfig, $expected)
{
/** @var Config|MockObject $configMock */
$configMock = $this->getMockBuilder(Config::class)
$configMock = $this->d3getMockBuilder(Config::class)
->disableOriginalConstructor()
->onlyMethods(['getConfigParam'])
->getMock();
$configMock->method('getConfigParam')->with($this->equalTo('D3_TOTP_ADMIN_FORCE_2FA'))->willReturn($hasConfig);
$settingMock = $this->d3getMockBuilder(Setting::class)
->onlyMethods(['getValue'])
->getMock();
$settingMock->method('getValue')->willReturn($hasConfig);
$moduleConfigurationMock = $this->d3getMockBuilder(ModuleConfiguration::class)
->onlyMethods(['getModuleSetting'])
->getMock();
$moduleConfigurationMock->method('getModuleSetting')->willReturn($settingMock);
/** @var d3_totp_utils|MockObject $oCoreMock */
$oCoreMock = $this->getMockBuilder(Utils::class)
->onlyMethods(['isAdmin', 'd3GetConfig'])
$oCoreMock = $this->d3getMockBuilder(Utils::class)
->onlyMethods(['isAdmin', 'd3GetConfig', 'getModuleConfiguration'])
->getMock();
$oCoreMock->method('isAdmin')->willReturn($isAdmin);
$oCoreMock->method('d3GetConfig')->willReturn($configMock);
$oCoreMock->method('getModuleConfiguration')->willReturn($moduleConfigurationMock);
$this->_oCoreClass = $oCoreMock;
@ -339,9 +356,9 @@ class d3_totp_utilsTest extends d3TotpUnitTestCase
public function d3IsAdminForce2FADataProvider(): array
{
return [
//'noAdmin, noConfig' => [false, false, false],
//'noAdmin' => [false, true, false],
//'noConfig' => [true, false, false],
'noAdmin, noConfig' => [false, false, false],
'noAdmin' => [false, true, false],
'noConfig' => [true, false, false],
'passed' => [true, true, true],
];
}

View File

@ -19,15 +19,16 @@ use D3\TestingTools\Development\CanAccessRestricted;
use D3\Totp\Application\Model\d3totp;
use D3\Totp\Modules\Application\Model\d3_totp_user;
use D3\Totp\Modules\Core\totpSystemEventHandler;
use D3\Totp\Tests\Unit\d3TotpUnitTestCase;
use OxidEsales\Eshop\Application\Model\User;
use OxidEsales\Eshop\Core\Session;
use OxidEsales\Eshop\Core\SystemEventHandler;
use OxidEsales\Eshop\Core\Utils;
use OxidEsales\TestingLibrary\UnitTestCase;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use ReflectionException;
class totpSystemEventHandlerTest extends UnitTestCase
class totpSystemEventHandlerTest extends d3TotpUnitTestCase
{
use CanAccessRestricted;
@ -40,12 +41,12 @@ class totpSystemEventHandlerTest extends UnitTestCase
public function runOnAdminLogin()
{
/** @var totpSystemEventHandler|MockObject $sut */
$sut = $this->getMockBuilder(SystemEventHandler::class)
$sut = $this->d3getMockBuilder(SystemEventHandler::class)
->onlyMethods(['d3CallMockableFunction', 'd3requestTotp'])
->getMock();
$sut->method('d3CallMockableFunction')->willReturn(true);
$sut->expects($this->once())->method('d3requestTotp')->willReturn(true);
$sut->expects($this->once())->method('d3requestTotp');
$this->callMethod(
$sut,
@ -68,31 +69,31 @@ class totpSystemEventHandlerTest extends UnitTestCase
public function canRequestTotp($totpMissing, $doLogout, $doRedirect)
{
/** @var Session|MockObject $sessionMock */
$sessionMock = $this->getMockBuilder(Session::class)
$sessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods(['getVariable'])
->getMock();
$sessionMock->method('getVariable')->willReturn('myUserId');
/** @var d3_totp_user|MockObject $userMock */
$userMock = $this->getMockBuilder(User::class)
$userMock = $this->d3getMockBuilder(User::class)
->onlyMethods(['logout'])
->getMock();
$userMock->expects($doLogout)->method('logout')->willReturn(true);
/** @var Utils|MockObject $utilsMock */
$utilsMock = $this->getMockBuilder(Utils::class)
$utilsMock = $this->d3getMockBuilder(Utils::class)
->onlyMethods(['redirect'])
->getMock();
$utilsMock->expects($doRedirect)->method('redirect')->willReturn(true);
/** @var d3totp|MockObject $totpMock */
$totpMock = $this->getMockBuilder(d3totp::class)
$totpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['loadByUserId'])
->getMock();
$totpMock->expects($this->atLeastOnce())->method('loadByUserId')->with('myUserId')->willReturn(1);
$totpMock->expects($this->atLeastOnce())->method('loadByUserId')->with('myUserId');
/** @var totpSystemEventHandler|MockObject $sut */
$sut = $this->getMockBuilder(SystemEventHandler::class)
$sut = $this->d3getMockBuilder(SystemEventHandler::class)
->onlyMethods(['d3GetTotpObject', 'd3TotpGetSession', 'd3TotpLoginMissing',
'd3TotpGetUserObject', 'getUtilsObject', ])
->getMock();
@ -212,19 +213,19 @@ class totpSystemEventHandlerTest extends UnitTestCase
public function checkTotpLoginMissing($isActive, $hasTotpAuth, $expected)
{
/** @var Session|MockObject $sessionMock */
$sessionMock = $this->getMockBuilder(Session::class)
$sessionMock = $this->d3getMockBuilder(Session::class)
->onlyMethods(['getVariable'])
->getMock();
$sessionMock->method('getVariable')->willReturn($hasTotpAuth);
/** @var d3totp|MockObject $totpMock */
$totpMock = $this->getMockBuilder(d3totp::class)
$totpMock = $this->d3getMockBuilder(d3totp::class)
->onlyMethods(['isActive'])
->getMock();
$totpMock->method('isActive')->willReturn($isActive);
/** @var totpSystemEventHandler|MockObject $sut */
$sut = $this->getMockBuilder(SystemEventHandler::class)
$sut = $this->d3getMockBuilder(SystemEventHandler::class)
->onlyMethods(['d3TotpGetSession'])
->getMock();
$sut->method('d3TotpGetSession')->willReturn($sessionMock);

View File

@ -0,0 +1,33 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*
* https://www.d3data.de
*
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
* @link https://www.oxidmodule.com
*/
declare(strict_types=1);
namespace D3\Totp\Tests\Unit;
use OxidEsales\Eshop\Core\Registry as RegistryAlias;
use PHPUnit\Framework\MockObject\MockBuilder;
use PHPUnit\Framework\TestCase;
abstract class d3TotpUnitTestCase extends TestCase
{
public function d3getMockBuilder($className): MockBuilder
{
if (strpos($className, '\\') === false) {
$className = strtolower($className);
}
$editionClassName = RegistryAlias::getUtilsObject()->getClassName($className);
return parent::getMockBuilder($editionClassName);
}
}

View File

@ -1,29 +1,30 @@
<phpunit backupGlobals="true"
<?xml version="1.0"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
backupGlobals="true"
bootstrap="../../../../source/bootstrap.php"
colors="true"
backupStaticAttributes="false"
cacheTokens="true"
colors="false"
convertErrorsToExceptions="true"
convertNoticesToExceptions="false"
convertWarningsToExceptions="true"
convertWarningsToExceptions="false"
forceCoversAnnotation="false"
processIsolation="false"
stopOnError="false"
stopOnFailure="false"
stopOnIncomplete="false"
stopOnSkipped="false"
verbose="false">
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">../Application</directory>
<directory suffix=".php">../Modules</directory>
<directory suffix=".php">../Setup</directory>
<exclude>
<directory suffix=".php">../Application/views</directory>
<directory suffix=".php">../Application/translations</directory>
</exclude>
</whitelist>
</filter>
<logging>
<log type="junit" target="reports/logfile.xml"/>
</logging>
beStrictAboutTestsThatDoNotTestAnything="false"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.6/phpunit.xsd">
<testsuites>
<testsuite name="Unit">
<directory>Unit/</directory>
</testsuite>
<!-- <testsuite name="Integration">-->
<!-- <directory>integration/</directory>-->
<!-- </testsuite>-->
</testsuites>
<coverage includeUncoveredFiles="true" />
<php>
<const name="OXID_PHP_UNIT" value="true"/>
</php>
</phpunit>

View File

@ -1,22 +0,0 @@
<?php
/**
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*
* https://www.d3data.de
*
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
* @author D3 Data Development - Daniel Seifert <info@shopmodule.com>
* @link https://www.oxidmodule.com
*/
declare(strict_types=1);
namespace D3\Totp\tests\unit;
use OxidEsales\TestingLibrary\UnitTestCase;
abstract class d3TotpUnitTestCase extends UnitTestCase
{
}

View File

@ -49,7 +49,7 @@
"beberlei/assert": "^v3.3.2"
},
"require-dev": {
"phpunit/phpunit" : "^10.5",
"phpunit/phpunit" : "^9.6",
"friendsofphp/php-cs-fixer": "^3.9",
"phpstan/phpstan": "^1.8",
"boxblinkracer/phpunuhi": "^1.12"
@ -61,13 +61,14 @@
},
"autoload-dev": {
"psr-4": {
"D3\\Totp\\tests\\": "Tests"
"D3\\Totp\\Tests\\": "Tests"
}
},
"scripts": {
"php-cs-fixer": "./vendor/bin/php-cs-fixer fix --config=vendor/d3/oxid-twofactor-onetimepassword/.php-cs-fixer.php",
"phpstan": "./vendor/bin/phpstan --configuration=./vendor/d3/oxid-twofactor-onetimepassword/phpstan.neon",
"phpunuhi": "./vendor/bin/phpunuhi --configuration=vendor/d3/oxid-twofactor-onetimepassword/phpunuhi.xml validate"
"php-cs-fixer": "./vendor/bin/php-cs-fixer fix --config=vendor/d3/oxid-twofactor-onetimepassword/.php-cs-fixer.php",
"phpstan": "./vendor/bin/phpstan --configuration=./vendor/d3/oxid-twofactor-onetimepassword/phpstan.neon",
"phpunit": "XDEBUG_MODE=off vendor/bin/phpunit --config=vendor/d3/oxid-twofactor-onetimepassword/Tests/",
"phpunuhi": "./vendor/bin/phpunuhi --configuration=vendor/d3/oxid-twofactor-onetimepassword/phpunuhi.xml validate"
},
"suggest": {
"d3/oxid-twofactor-passwordless": "Passwordless login with FIDO2 hardware token."