* @link https://www.oxidmodule.com */ declare(strict_types=1); namespace D3\Webauthn\tests\unit\Application\Model\Exceptions; use D3\TestingTools\Development\CanAccessRestricted; use D3\Webauthn\Application\Model\Exceptions\WebauthnException; use D3\Webauthn\Application\Model\WebauthnErrors; use D3\Webauthn\tests\unit\WAUnitTestCase; use Exception; use PHPUnit\Framework\MockObject\MockObject; use ReflectionException; class WebauthnExceptionTest extends WAUnitTestCase { use CanAccessRestricted; /** * @test * @return void * @throws ReflectionException * @covers \D3\Webauthn\Application\Model\Exceptions\WebauthnException::__construct */ public function canConstruct() { /** @var Exception|MockObject $previousMock */ $previousMock = $this->getMockBuilder(Exception::class) ->getMock(); /** @var WebauthnErrors|MockObject $translatorMock */ $translatorMock = $this->getMockBuilder(WebauthnErrors::class) ->onlyMethods(['translateError']) ->getMock(); $translatorMock->method('translateError')->willReturn('translatedError'); /** @var WebauthnException|MockObject $sut */ $sut = $this->getMockBuilder(WebauthnException::class) ->onlyMethods(['setDetailedErrorMessage', 'getErrorMessageTranslator', 'getRequestType', 'd3CallMockableFunction', ]) ->disableOriginalConstructor() ->getMock(); $sut->expects($this->once())->method('setDetailedErrorMessage'); $sut->method('getErrorMessageTranslator')->willReturn($translatorMock); $sut->method('getRequestType')->willReturn('requestType'); $sut->expects($this->once())->method('d3CallMockableFunction')->with( $this->anything(), $this->identicalTo(['translatedError', 255, $previousMock]) ); $this->callMethod( $sut, '__construct', ['myMessage', 255, $previousMock] ); } /** * @test * @return void * @throws ReflectionException * @covers \D3\Webauthn\Application\Model\Exceptions\WebauthnException::getErrorMessageTranslator */ public function canGetErrorMessageTranslator() { /** @var WebauthnException|MockObject $sut */ $sut = $this->getMockBuilder(WebauthnException::class) ->disableOriginalConstructor() ->getMock(); $this->assertInstanceOf( WebauthnErrors::class, $this->callMethod( $sut, 'getErrorMessageTranslator' ) ); } /** * @test * @return void * @throws ReflectionException * @covers \D3\Webauthn\Application\Model\Exceptions\WebauthnException::getRequestType */ public function canGetRequestType() { /** @var WebauthnException|MockObject $sut */ $sut = $this->getMockBuilder(WebauthnException::class) ->onlyMethods(['getErrorMessageTranslator']) ->getMock(); $sut->method('getErrorMessageTranslator'); $this->assertNull( $this->callMethod( $sut, 'getRequestType' ) ); } /** * @test * @param $messageFixture * @return void * @throws ReflectionException * @dataProvider canSetAndGetDetailedErrorMessageDataProvider * @covers \D3\Webauthn\Application\Model\Exceptions\WebauthnException::setDetailedErrorMessage * @covers \D3\Webauthn\Application\Model\Exceptions\WebauthnException::getDetailedErrorMessage */ public function canSetAndGetDetailedErrorMessage($messageFixture) { /** @var WebauthnException|MockObject $sut */ $sut = $this->getMockBuilder(WebauthnException::class) ->disableOriginalConstructor() ->onlyMethods(['getRequestType']) ->getMock(); $sut->method('getRequestType'); $this->callMethod( $sut, 'setDetailedErrorMessage', [$messageFixture] ); $this->assertSame( 'Webauthn: '.$messageFixture, $this->callMethod( $sut, 'getDetailedErrorMessage' ) ); } /** * @return array */ public function canSetAndGetDetailedErrorMessageDataProvider(): array { return [ 'message is string' => ['errorMessageFixture'], 'message is null' => [null], ]; } }