diff --git a/src/Application/Controller/Admin/d3user_webauthn.php b/src/Application/Controller/Admin/d3user_webauthn.php index 65a0e50..df35cd0 100755 --- a/src/Application/Controller/Admin/d3user_webauthn.php +++ b/src/Application/Controller/Admin/d3user_webauthn.php @@ -48,7 +48,7 @@ class d3user_webauthn extends AdminDetailsController { $this->addTplParam('readonly', !$this->d3GetMockableOxNewObject(Webauthn::class)->isAvailable()); - $this->d3CallMockableParent('render'); + $this->d3CallMockableFunction([AdminDetailsController::class, 'render']); $soxId = $this->getEditObjectId(); diff --git a/src/Application/Controller/Admin/d3webauthnadminlogin.php b/src/Application/Controller/Admin/d3webauthnadminlogin.php index 54eebac..466fcec 100755 --- a/src/Application/Controller/Admin/d3webauthnadminlogin.php +++ b/src/Application/Controller/Admin/d3webauthnadminlogin.php @@ -81,7 +81,7 @@ class d3webauthnadminlogin extends AdminController $afterLogin = $this->d3GetMockableOxNewObject(WebauthnAfterLogin::class); $afterLogin->changeLanguage(); - return $this->d3CallMockableParent('render'); + return $this->d3CallMockableFunction([AdminController::class, 'render']); } /** diff --git a/src/Application/Controller/Traits/checkoutGetUserTrait.php b/src/Application/Controller/Traits/checkoutGetUserTrait.php index bb6aa52..9298dc7 100755 --- a/src/Application/Controller/Traits/checkoutGetUserTrait.php +++ b/src/Application/Controller/Traits/checkoutGetUserTrait.php @@ -38,9 +38,10 @@ trait checkoutGetUserTrait */ public function getUser() { - $user = $this->d3CallMockableParent('getUser'); + /** @var User|null $user */ + $user = $this->d3CallMockableFunction([$this->parentClass, 'getUser']); - if ($user && $user->getId()) { + if ($user && $user->isLoaded() && $user->getId()) { $webauthn = $this->d3GetMockableOxNewObject(Webauthn::class); if ($webauthn->isActive($user->getId()) diff --git a/src/Application/Controller/d3webauthnlogin.php b/src/Application/Controller/d3webauthnlogin.php index 71a9248..23f7d2c 100755 --- a/src/Application/Controller/d3webauthnlogin.php +++ b/src/Application/Controller/d3webauthnlogin.php @@ -45,7 +45,7 @@ class d3webauthnlogin extends FrontendController ); return array_merge( - $this->d3CallMockableParent('getNavigationParams'), + $this->d3CallMockableFunction([FrontendController::class, 'getNavigationParams']), $navparams, ['cl' => $navparams['actcontrol']] ); @@ -73,7 +73,7 @@ class d3webauthnlogin extends FrontendController $this->addTplParam('navFormParams', $this->d3GetMockableRegistryObject(Session::class) ->getVariable(WebauthnConf::WEBAUTHN_SESSION_NAVFORMPARAMS)); - return $this->d3CallMockableParent('render'); + return $this->d3CallMockableFunction([FrontendController::class, 'render']); } /** diff --git a/src/Application/Model/Credential/PublicKeyCredentialList.php b/src/Application/Model/Credential/PublicKeyCredentialList.php index e400983..5b92b5e 100755 --- a/src/Application/Model/Credential/PublicKeyCredentialList.php +++ b/src/Application/Model/Credential/PublicKeyCredentialList.php @@ -38,7 +38,7 @@ class PublicKeyCredentialList extends ListModel implements PublicKeyCredentialSo public function __construct() { - $this->d3CallMockableParent('__construct', [PublicKeyCredential::class]); + $this->d3CallMockableFunction([ListModel::class, '__construct'], [PublicKeyCredential::class]); } /** diff --git a/src/Application/Model/Exceptions/WebauthnException.php b/src/Application/Model/Exceptions/WebauthnException.php index 5826b6b..236d1e7 100644 --- a/src/Application/Model/Exceptions/WebauthnException.php +++ b/src/Application/Model/Exceptions/WebauthnException.php @@ -30,8 +30,11 @@ class WebauthnException extends StandardException { $this->setDetailedErrorMessage($sMessage); - $this->d3CallMockableParent( - '__construct', + $this->d3CallMockableFunction( + [ + StandardException::class, + '__construct' + ], [ $this->getErrorMessageTranslator()->translateError($sMessage, $this->getRequestType()), $iCode, diff --git a/src/Application/Model/RelyingPartyEntity.php b/src/Application/Model/RelyingPartyEntity.php index 763711c..167e416 100755 --- a/src/Application/Model/RelyingPartyEntity.php +++ b/src/Application/Model/RelyingPartyEntity.php @@ -26,8 +26,11 @@ class RelyingPartyEntity extends PublicKeyCredentialRpEntity public function __construct() { - $this->d3CallMockableParent( - '__construct', + $this->d3CallMockableFunction( + [ + PublicKeyCredentialRpEntity::class, + '__construct' + ], [ $this->getActiveShop()->getFieldData('oxname'), $this->getRPShopUrl() diff --git a/src/Application/Model/UserEntity.php b/src/Application/Model/UserEntity.php index 2702f40..517bead 100755 --- a/src/Application/Model/UserEntity.php +++ b/src/Application/Model/UserEntity.php @@ -36,8 +36,11 @@ class UserEntity extends PublicKeyCredentialUserEntity throw $e; } - $this->d3CallMockableParent( - '__construct', + $this->d3CallMockableFunction( + [ + PublicKeyCredentialUserEntity::class, + '__construct' + ], [ strtolower($user->getFieldData('oxusername')), $user->getId(), diff --git a/src/Modules/Application/Controller/Admin/d3_LoginController_Webauthn.php b/src/Modules/Application/Controller/Admin/d3_LoginController_Webauthn.php index 2d9191e..fbfe111 100755 --- a/src/Modules/Application/Controller/Admin/d3_LoginController_Webauthn.php +++ b/src/Modules/Application/Controller/Admin/d3_LoginController_Webauthn.php @@ -78,7 +78,7 @@ class d3_LoginController_Webauthn extends d3_LoginController_Webauthn_parent } } - return $this->d3CallMockableParent('checklogin'); + return $this->d3CallMockableFunction([d3_LoginController_Webauthn_parent::class, 'checklogin']); } /** diff --git a/src/Modules/Application/Controller/d3_webauthn_OrderController.php b/src/Modules/Application/Controller/d3_webauthn_OrderController.php index 0d95f08..342435f 100755 --- a/src/Modules/Application/Controller/d3_webauthn_OrderController.php +++ b/src/Modules/Application/Controller/d3_webauthn_OrderController.php @@ -20,4 +20,6 @@ use D3\Webauthn\Application\Controller\Traits\checkoutGetUserTrait; class d3_webauthn_OrderController extends d3_webauthn_OrderController_parent { use checkoutGetUserTrait; + + private $parentClass = d3_webauthn_OrderController_parent::class; } \ No newline at end of file diff --git a/src/Modules/Application/Controller/d3_webauthn_PaymentController.php b/src/Modules/Application/Controller/d3_webauthn_PaymentController.php index 7bf1e15..93c7ff7 100755 --- a/src/Modules/Application/Controller/d3_webauthn_PaymentController.php +++ b/src/Modules/Application/Controller/d3_webauthn_PaymentController.php @@ -20,4 +20,6 @@ use D3\Webauthn\Application\Controller\Traits\checkoutGetUserTrait; class d3_webauthn_PaymentController extends d3_webauthn_PaymentController_parent { use checkoutGetUserTrait; + + private $parentClass = d3_webauthn_PaymentController_parent::class; } \ No newline at end of file diff --git a/src/Modules/Application/Controller/d3_webauthn_UserController.php b/src/Modules/Application/Controller/d3_webauthn_UserController.php index 4448b1f..f01a970 100755 --- a/src/Modules/Application/Controller/d3_webauthn_UserController.php +++ b/src/Modules/Application/Controller/d3_webauthn_UserController.php @@ -20,4 +20,6 @@ use D3\Webauthn\Application\Controller\Traits\checkoutGetUserTrait; class d3_webauthn_UserController extends d3_webauthn_UserController_parent { use checkoutGetUserTrait; + + private $parentClass = d3_webauthn_UserController_parent::class; } \ No newline at end of file diff --git a/src/Modules/Application/Model/d3_User_Webauthn.php b/src/Modules/Application/Model/d3_User_Webauthn.php index 053c409..279bde4 100755 --- a/src/Modules/Application/Model/d3_User_Webauthn.php +++ b/src/Modules/Application/Model/d3_User_Webauthn.php @@ -36,7 +36,7 @@ class d3_User_Webauthn extends d3_User_Webauthn_parent public function logout() { - $return = $this->d3CallMockableParent('logout'); + $return = $this->d3CallMockableFunction([d3_User_Webauthn_parent::class, 'logout']); $session = $this->d3GetMockableRegistryObject(Session::class); $session->deleteVariable(WebauthnConf::WEBAUTHN_SESSION_AUTH); diff --git a/src/tests/unit/Application/Controller/Admin/d3user_webauthnTest.php b/src/tests/unit/Application/Controller/Admin/d3user_webauthnTest.php index 5da6a8b..d0b950b 100644 --- a/src/tests/unit/Application/Controller/Admin/d3user_webauthnTest.php +++ b/src/tests/unit/Application/Controller/Admin/d3user_webauthnTest.php @@ -68,12 +68,12 @@ class d3user_webauthnTest extends TestCase /** @var d3user_webauthn|MockObject $sutMock */ $sutMock = $this->getMockBuilder(d3user_webauthn::class) ->onlyMethods([ - 'd3CallMockableParent', + 'd3CallMockableFunction', 'getEditObjectId', 'd3GetMockableOxNewObject' ]) ->getMock(); - $sutMock->method('d3CallMockableParent')->willReturn(true); + $sutMock->method('d3CallMockableFunction')->willReturn(true); $sutMock->method('getEditObjectId')->willReturn('editObjectId'); $sutMock->method('d3GetMockableOxNewObject')->willReturnCallback( function () use ($userMock, $webauthnMock) { diff --git a/src/tests/unit/Application/Controller/Admin/d3webauthnadminloginTest.php b/src/tests/unit/Application/Controller/Admin/d3webauthnadminloginTest.php index aae9249..ba5e592 100644 --- a/src/tests/unit/Application/Controller/Admin/d3webauthnadminloginTest.php +++ b/src/tests/unit/Application/Controller/Admin/d3webauthnadminloginTest.php @@ -96,7 +96,7 @@ class d3webauthnadminloginTest extends d3webauthnloginTest /** @var d3webauthnlogin|MockObject $sut */ $sut = $this->getMockBuilder($this->sutClassName) - ->onlyMethods(['d3GetMockableRegistryObject', 'd3CallMockableParent', 'd3GetMockableOxNewObject', + ->onlyMethods(['d3GetMockableRegistryObject', 'd3CallMockableFunction', 'd3GetMockableOxNewObject', 'generateCredentialRequest', 'addTplParam']) ->getMock(); $sut->method('d3GetMockableRegistryObject')->willReturnCallback( @@ -112,7 +112,7 @@ class d3webauthnadminloginTest extends d3webauthnloginTest } } ); - $sut->method('d3CallMockableParent')->willReturn('myTemplate.tpl'); + $sut->method('d3CallMockableFunction')->willReturn('myTemplate.tpl'); // "any" because redirect doesn't stop execution $sut->expects($startRedirect ? $this->any() : $this->atLeastOnce()) ->method('generateCredentialRequest'); diff --git a/src/tests/unit/Application/Controller/d3webauthnloginTest.php b/src/tests/unit/Application/Controller/d3webauthnloginTest.php index 5d85b00..69f871d 100644 --- a/src/tests/unit/Application/Controller/d3webauthnloginTest.php +++ b/src/tests/unit/Application/Controller/d3webauthnloginTest.php @@ -52,7 +52,7 @@ class d3webauthnloginTest extends UnitTestCase /** @var d3webauthnlogin|MockObject $sut */ $sut = $this->getMockBuilder($this->sutClassName) - ->onlyMethods(['d3GetMockableRegistryObject', 'd3CallMockableParent']) + ->onlyMethods(['d3GetMockableRegistryObject', 'd3CallMockableFunction']) ->getMock(); $sut->method('d3GetMockableRegistryObject')->willReturnCallback( function () use ($sessionMock) { @@ -65,7 +65,7 @@ class d3webauthnloginTest extends UnitTestCase } } ); - $sut->method('d3CallMockableParent')->willReturn(['defKey1' => 'devValues1']); + $sut->method('d3CallMockableFunction')->willReturn(['defKey1' => 'devValues1']); $this->assertSame( [ @@ -111,7 +111,7 @@ class d3webauthnloginTest extends UnitTestCase /** @var d3webauthnlogin|MockObject $sut */ $sut = $this->getMockBuilder($this->sutClassName) - ->onlyMethods(['d3GetMockableRegistryObject', 'd3CallMockableParent', + ->onlyMethods(['d3GetMockableRegistryObject', 'd3CallMockableFunction', 'generateCredentialRequest', 'addTplParam']) ->getMock(); $sut->method('d3GetMockableRegistryObject')->willReturnCallback( @@ -127,7 +127,7 @@ class d3webauthnloginTest extends UnitTestCase } } ); - $sut->method('d3CallMockableParent')->willReturn('myTemplate.tpl'); + $sut->method('d3CallMockableFunction')->willReturn('myTemplate.tpl'); $sut->expects($startRedirect ? $this->any() : $this->atLeastOnce()) ->method('generateCredentialRequest'); $sut->expects($startRedirect ? $this->any() : $this->atLeastOnce()) diff --git a/src/tests/unit/Application/Model/Credential/PublicKeyCredentialListTest.php b/src/tests/unit/Application/Model/Credential/PublicKeyCredentialListTest.php index fe7244c..5755e93 100644 --- a/src/tests/unit/Application/Model/Credential/PublicKeyCredentialListTest.php +++ b/src/tests/unit/Application/Model/Credential/PublicKeyCredentialListTest.php @@ -42,9 +42,9 @@ class PublicKeyCredentialListTest extends UnitTestCase /** @var PublicKeyCredentialList|MockObject $sut */ $sut = $this->getMockBuilder(PublicKeyCredentialList::class) ->disableOriginalConstructor() - ->onlyMethods(['d3CallMockableParent']) + ->onlyMethods(['d3CallMockableFunction']) ->getMock(); - $sut->expects($this->once())->method('d3CallMockableParent')->with( + $sut->expects($this->once())->method('d3CallMockableFunction')->with( $this->anything(), $this->containsIdentical(PublicKeyCredential::class) ); diff --git a/src/tests/unit/Application/Model/Exceptions/WebauthnExceptionTest.php b/src/tests/unit/Application/Model/Exceptions/WebauthnExceptionTest.php index fd34a1f..fbecfba 100644 --- a/src/tests/unit/Application/Model/Exceptions/WebauthnExceptionTest.php +++ b/src/tests/unit/Application/Model/Exceptions/WebauthnExceptionTest.php @@ -47,13 +47,13 @@ class WebauthnExceptionTest extends UnitTestCase /** @var WebauthnException|MockObject $sut */ $sut = $this->getMockBuilder(WebauthnException::class) ->onlyMethods(['setDetailedErrorMessage', 'getErrorMessageTranslator', 'getRequestType', - 'd3CallMockableParent']) + 'd3CallMockableFunction']) ->disableOriginalConstructor() ->getMock(); $sut->expects($this->once())->method('setDetailedErrorMessage'); $sut->method('getErrorMessageTranslator')->willReturn($translatorMock); $sut->method('getRequestType')->willReturn('requestType'); - $sut->expects($this->once())->method('d3CallMockableParent')->with( + $sut->expects($this->once())->method('d3CallMockableFunction')->with( $this->anything(), $this->identicalTo(['translatedError', 255, $previousMock]) ); diff --git a/src/tests/unit/Application/Model/RelyingPartyEntityTest.php b/src/tests/unit/Application/Model/RelyingPartyEntityTest.php index 29e768d..f298e80 100644 --- a/src/tests/unit/Application/Model/RelyingPartyEntityTest.php +++ b/src/tests/unit/Application/Model/RelyingPartyEntityTest.php @@ -45,9 +45,9 @@ class RelyingPartyEntityTest extends TestCase /** @var RelyingPartyEntity|MockObject $sut */ $sut = $this->getMockBuilder(RelyingPartyEntity::class) ->disableOriginalConstructor() - ->onlyMethods(['d3CallMockableParent', 'getActiveShop', 'getRPShopUrl']) + ->onlyMethods(['d3CallMockableFunction', 'getActiveShop', 'getRPShopUrl']) ->getMock(); - $sut->expects($this->once())->method('d3CallMockableParent')->with( + $sut->expects($this->once())->method('d3CallMockableFunction')->with( $this->anything(), $this->identicalTo(['myShopName', 'myShopUrl']) ); @@ -156,9 +156,9 @@ class RelyingPartyEntityTest extends TestCase /** @var RelyingPartyEntity|MockObject $sut */ $sut = $this->getMockBuilder(RelyingPartyEntity::class) - ->onlyMethods(['d3CallMockableParent']) // must mock, because can't disable constructor + ->onlyMethods(['d3CallMockableFunction']) // must mock, because can't disable constructor ->getMock(); - $sut->method('d3CallMockableParent')->willReturn(true); + $sut->method('d3CallMockableFunction')->willReturn(true); $this->assertSame( $expected, diff --git a/src/tests/unit/Application/Model/UserEntityTest.php b/src/tests/unit/Application/Model/UserEntityTest.php index af3cf1e..ea26c8c 100644 --- a/src/tests/unit/Application/Model/UserEntityTest.php +++ b/src/tests/unit/Application/Model/UserEntityTest.php @@ -52,9 +52,9 @@ class UserEntityTest extends UnitTestCase /** @var UserEntity|MockObject $sut */ $sut = $this->getMockBuilder(UserEntity::class) ->disableOriginalConstructor() - ->onlyMethods(['d3CallMockableParent']) + ->onlyMethods(['d3CallMockableFunction']) ->getMock(); - $sut->expects($runParent ? $this->once() : $this->never())->method('d3CallMockableParent')->with( + $sut->expects($runParent ? $this->once() : $this->never())->method('d3CallMockableFunction')->with( $this->anything(), $this->identicalTo([ 'usernamefixture', diff --git a/src/tests/unit/Modules/Application/Controller/Admin/LoginControllerWebauthnTest.php b/src/tests/unit/Modules/Application/Controller/Admin/LoginControllerWebauthnTest.php index 7ab0f81..edf360c 100644 --- a/src/tests/unit/Modules/Application/Controller/Admin/LoginControllerWebauthnTest.php +++ b/src/tests/unit/Modules/Application/Controller/Admin/LoginControllerWebauthnTest.php @@ -247,12 +247,12 @@ class LoginControllerWebauthnTest extends UnitTestCase /** @var LoginController|MockObject $sut */ $sut = $this->getMockBuilder(LoginController::class) - ->onlyMethods(['d3CanUseWebauthn', 'd3CallMockableParent', 'hasWebauthnButNotLoggedin', + ->onlyMethods(['d3CanUseWebauthn', 'd3CallMockableFunction', 'hasWebauthnButNotLoggedin', 'd3GetMockableOxNewObject', 'd3GetMockableRegistryObject' ]) ->getMock(); $sut->method('d3CanUseWebauthn')->willReturn($canUseWebauthn); - $sut->method('d3CallMockableParent')->willReturn('parentReturn'); + $sut->method('d3CallMockableFunction')->willReturn('parentReturn'); $sut->method('hasWebauthnButNotLoggedin')->willReturn($loggedin); $sut->method('d3GetMockableOxNewObject')->willReturnCallback( function () use ($userMock) { diff --git a/src/tests/unit/Modules/Application/Controller/CheckoutTestTrait.php b/src/tests/unit/Modules/Application/Controller/CheckoutTestTrait.php index 1b3ad04..9b22375 100644 --- a/src/tests/unit/Modules/Application/Controller/CheckoutTestTrait.php +++ b/src/tests/unit/Modules/Application/Controller/CheckoutTestTrait.php @@ -31,6 +31,25 @@ trait CheckoutTestTrait { use CanAccessRestricted; + protected $userFixtureId = 'userIdFixture1'; + + /** @var User */ + protected $userFixture; + + public function setUp(): void + { + $this->userFixture = oxNew(User::class); + $this->userFixture->setId($this->userFixtureId); + $this->userFixture->assign(['oxlname' => __METHOD__]); + $this->userFixture->save(); + $this->userFixture->load($this->userFixtureId); + } + + public function tearDown(): void + { + $this->userFixture->delete($this->userFixtureId); + } + /** * @test * @param $hasUser @@ -46,18 +65,8 @@ trait CheckoutTestTrait * @covers \D3\Webauthn\Modules\Application\Controller\d3_webauthn_OrderController::getUser * @covers \D3\Webauthn\Modules\Application\Controller\d3_webauthn_UserController::getUser */ - public function canGetUser($hasUser, $userId, $isActive, $sessionAuth, $expected) + public function canGetUser($hasUser, $isActive, $sessionAuth, $expected) { - if ($hasUser) { - /** @var User|MockObject $userMock */ - $userMock = $this->getMockBuilder(User::class) - ->onlyMethods(['getId']) - ->getMock(); - $userMock->method('getId')->willReturn($userId); - } else { - $userMock = false; - } - /** @var Session|MockObject $sessionMock */ $sessionMock = $this->getMockBuilder(Session::class) ->onlyMethods(['getVariable']) @@ -73,7 +82,7 @@ trait CheckoutTestTrait /** @var PaymentController|OrderController|UserController|MockObject $sut */ $sut = $this->getMockBuilder($this->sutClass) - ->onlyMethods(['d3GetMockableOxNewObject', 'd3GetMockableRegistryObject', 'd3CallMockableParent']) + ->onlyMethods(['d3GetMockableOxNewObject', 'd3GetMockableRegistryObject']) ->getMock(); $sut->method('d3GetMockableOxNewObject')->willReturnCallback( function () use ($webauthnMock) { @@ -97,15 +106,19 @@ trait CheckoutTestTrait } } ); - $sut->method('d3CallMockableParent')->willReturn($userMock); + if ($hasUser) { + $sut->setUser($this->userFixture); + } $return = $this->callMethod( $sut, 'getUser' ); + $sut->setUser(null); + if ($expected === 'parent') { - $this->assertSame($return, $userMock); + $this->assertSame($return, $hasUser ? $this->userFixture : false); } else { $this->assertSame($return, $expected); } @@ -117,11 +130,10 @@ trait CheckoutTestTrait public function canGetUserDataProvider(): array { return [ - 'no user' => [false, null, false, null, 'parent'], - 'no user id' => [true, 'null', false, null, 'parent'], - 'webauthn not active' => [true, 'userIdFixture', false, null, 'parent'], - 'has webauthn auth' => [true, 'userIdFixture', true, 'userIdFixture', 'parent'], - 'no webauthn auth' => [true, 'userIdFixture', true, null, false], + 'no (valid) user' => [false, false, null, 'parent'], + 'webauthn not active' => [true, false, null, 'parent'], + 'has webauthn auth' => [true, true, 'userIdFixture', 'parent'], + 'no webauthn auth' => [true, true, null, false], ]; } } \ No newline at end of file diff --git a/src/tests/unit/Modules/Application/Model/UserWebauthnTest.php b/src/tests/unit/Modules/Application/Model/UserWebauthnTest.php index 8f94e1a..08b5471 100644 --- a/src/tests/unit/Modules/Application/Model/UserWebauthnTest.php +++ b/src/tests/unit/Modules/Application/Model/UserWebauthnTest.php @@ -43,9 +43,9 @@ class UserWebauthnTest extends UnitTestCase /** @var User|MockObject $sut */ $sut = $this->getMockBuilder(User::class) - ->onlyMethods(['d3CallMockableParent', 'd3GetMockableRegistryObject']) + ->onlyMethods(['d3CallMockableFunction', 'd3GetMockableRegistryObject']) ->getMock(); - $sut->method('d3CallMockableParent')->willReturn(true); + $sut->method('d3CallMockableFunction')->willReturn(true); $sut->method('d3GetMockableRegistryObject')->willReturnCallback( function () use ($sessionMock) { $args = func_get_args();