diff --git a/composer.json b/composer.json index 20b946d..1cd85dc 100644 --- a/composer.json +++ b/composer.json @@ -25,14 +25,14 @@ "workerman/workerman": "^4.2.1" }, "require-dev": { - "blackfire/php-sdk": "^2.5.4", + "blackfire/php-sdk": "^2.5.7", "chubbyphp/chubbyphp-dev-helper": "dev-master", - "chubbyphp/chubbyphp-mock": "^1.8", - "infection/infection": "^0.29.8", + "chubbyphp/chubbyphp-mock": "^2.0@dev", + "infection/infection": "^0.29.12", "php-coveralls/php-coveralls": "^2.7", "phpstan/extension-installer": "^1.4.3", - "phpstan/phpstan": "^2.0.3", - "phpunit/phpunit": "^11.5.0" + "phpstan/phpstan": "^2.1.6", + "phpunit/phpunit": "^11.5.9" }, "autoload": { "psr-4": { "Chubbyphp\\WorkermanRequestHandler\\": "src/" } diff --git a/tests/Unit/Adapter/BlackfireOnMessageAdapterTest.php b/tests/Unit/Adapter/BlackfireOnMessageAdapterTest.php index bd2a91a..467bb2d 100644 --- a/tests/Unit/Adapter/BlackfireOnMessageAdapterTest.php +++ b/tests/Unit/Adapter/BlackfireOnMessageAdapterTest.php @@ -8,12 +8,14 @@ use Blackfire\Exception\LogicException; use Blackfire\Probe; use Blackfire\Profile\Configuration; -use Chubbyphp\Mock\Argument\ArgumentInstanceOf; -use Chubbyphp\Mock\Call; -use Chubbyphp\Mock\MockByCallsTrait; +use Chubbyphp\Mock\MockMethod\WithCallback; +use Chubbyphp\Mock\MockMethod\WithException; +use Chubbyphp\Mock\MockMethod\WithoutReturn; +use Chubbyphp\Mock\MockMethod\WithReturn; +use Chubbyphp\Mock\MockObjectBuilder; use Chubbyphp\WorkermanRequestHandler\Adapter\BlackfireOnMessageAdapter; use Chubbyphp\WorkermanRequestHandler\OnMessageInterface; -use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\Attributes\DoesNotPerformAssertions; use PHPUnit\Framework\TestCase; use Psr\Log\LoggerInterface; use Workerman\Connection\TcpConnection as WorkermanTcpConnection; @@ -26,25 +28,26 @@ */ final class BlackfireOnMessageAdapterTest extends TestCase { - use MockByCallsTrait; - + #[DoesNotPerformAssertions] public function testInvokeWithoutHeaderWithoutConfigAndWithoutLogger(): void { - /** @var MockObject|WorkermanTcpConnection $workermanTcpConnection */ - $workermanTcpConnection = $this->getMockByCalls(WorkermanTcpConnection::class); + $builder = new MockObjectBuilder(); + + /** @var WorkermanTcpConnection $workermanTcpConnection */ + $workermanTcpConnection = $builder->create(WorkermanTcpConnection::class, []); - /** @var MockObject|WorkermanRequest $workermanRequest */ - $workermanRequest = $this->getMockByCalls(WorkermanRequest::class, [ - Call::create('header')->with('x-blackfire-query', null)->willReturn(null), + /** @var WorkermanRequest $workermanRequest */ + $workermanRequest = $builder->create(WorkermanRequest::class, [ + new WithReturn('header', ['x-blackfire-query', null], null), ]); - /** @var MockObject|OnMessageInterface $onMessage */ - $onMessage = $this->getMockByCalls(OnMessageInterface::class, [ - Call::create('__invoke')->with($workermanTcpConnection, $workermanRequest), + /** @var OnMessageInterface $onMessage */ + $onMessage = $builder->create(OnMessageInterface::class, [ + new WithoutReturn('__invoke', [$workermanTcpConnection, $workermanRequest]), ]); - /** @var Client|MockObject $client */ - $client = $this->getMockByCalls(Client::class); + /** @var Client $client */ + $client = $builder->create(Client::class, []); $adapter = new BlackfireOnMessageAdapter($onMessage, $client); $adapter($workermanTcpConnection, $workermanRequest); @@ -52,132 +55,147 @@ public function testInvokeWithoutHeaderWithoutConfigAndWithoutLogger(): void public function testInvokeWithoutConfigAndWithoutLogger(): void { - /** @var MockObject|WorkermanTcpConnection $workermanTcpConnection */ - $workermanTcpConnection = $this->getMockByCalls(WorkermanTcpConnection::class); + $builder = new MockObjectBuilder(); - /** @var MockObject|WorkermanRequest $workermanRequest */ - $workermanRequest = $this->getMockByCalls(WorkermanRequest::class, [ - Call::create('header')->with('x-blackfire-query', null)->willReturn('workerman'), + /** @var WorkermanTcpConnection $workermanTcpConnection */ + $workermanTcpConnection = $builder->create(WorkermanTcpConnection::class, []); + + /** @var WorkermanRequest $workermanRequest */ + $workermanRequest = $builder->create(WorkermanRequest::class, [ + new WithReturn('header', ['x-blackfire-query', null], 'workerman'), ]); - /** @var MockObject|OnMessageInterface $onMessage */ - $onMessage = $this->getMockByCalls(OnMessageInterface::class, [ - Call::create('__invoke')->with($workermanTcpConnection, $workermanRequest), + /** @var OnMessageInterface $onMessage */ + $onMessage = $builder->create(OnMessageInterface::class, [ + new WithoutReturn('__invoke', [$workermanTcpConnection, $workermanRequest]), ]); - /** @var MockObject|Probe $probe */ - $probe = $this->getMockByCalls(Probe::class); + /** @var Probe $probe */ + $probe = $builder->create(Probe::class, []); + + /** @var Client $client */ + $client = $builder->create(Client::class, [ + new WithCallback('createProbe', static function (Configuration $configuration, bool $enabled) use ($probe): Probe { + self::assertTrue($enabled); - /** @var Client|MockObject $client */ - $client = $this->getMockByCalls(Client::class, [ - Call::create('createProbe')->with(new ArgumentInstanceOf(Configuration::class), true)->willReturn($probe), - Call::create('endProbe')->with($probe), + return $probe; + }), + new WithoutReturn('endProbe', [$probe]), ]); $adapter = new BlackfireOnMessageAdapter($onMessage, $client); $adapter($workermanTcpConnection, $workermanRequest); } + #[DoesNotPerformAssertions] public function testInvokeWithConfigAndWithLogger(): void { - /** @var MockObject|WorkermanTcpConnection $workermanTcpConnection */ - $workermanTcpConnection = $this->getMockByCalls(WorkermanTcpConnection::class); + $builder = new MockObjectBuilder(); - /** @var MockObject|WorkermanRequest $workermanRequest */ - $workermanRequest = $this->getMockByCalls(WorkermanRequest::class, [ - Call::create('header')->with('x-blackfire-query', null)->willReturn('workerman'), + /** @var WorkermanTcpConnection $workermanTcpConnection */ + $workermanTcpConnection = $builder->create(WorkermanTcpConnection::class, []); + + /** @var WorkermanRequest $workermanRequest */ + $workermanRequest = $builder->create(WorkermanRequest::class, [ + new WithReturn('header', ['x-blackfire-query', null], 'workerman'), ]); - /** @var MockObject|OnMessageInterface $onMessage */ - $onMessage = $this->getMockByCalls(OnMessageInterface::class, [ - Call::create('__invoke')->with($workermanTcpConnection, $workermanRequest), + /** @var OnMessageInterface $onMessage */ + $onMessage = $builder->create(OnMessageInterface::class, [ + new WithoutReturn('__invoke', [$workermanTcpConnection, $workermanRequest]), ]); - /** @var Configuration|MockObject $config */ - $config = $this->getMockByCalls(Configuration::class); + /** @var Configuration $config */ + $config = $builder->create(Configuration::class, []); - /** @var MockObject|Probe $probe */ - $probe = $this->getMockByCalls(Probe::class); + /** @var Probe $probe */ + $probe = $builder->create(Probe::class, []); - /** @var Client|MockObject $client */ - $client = $this->getMockByCalls(Client::class, [ - Call::create('createProbe')->with($config, true)->willReturn($probe), - Call::create('endProbe')->with($probe), + /** @var Client $client */ + $client = $builder->create(Client::class, [ + new WithReturn('createProbe', [$config, true], $probe), + new WithoutReturn('endProbe', [$probe]), ]); - /** @var LoggerInterface|MockObject $logger */ - $logger = $this->getMockByCalls(LoggerInterface::class); + /** @var LoggerInterface $logger */ + $logger = $builder->create(LoggerInterface::class, []); $adapter = new BlackfireOnMessageAdapter($onMessage, $client, $config, $logger); $adapter($workermanTcpConnection, $workermanRequest); } + #[DoesNotPerformAssertions] public function testInvokeWithExceptionOnCreateProbe(): void { - /** @var MockObject|WorkermanTcpConnection $workermanTcpConnection */ - $workermanTcpConnection = $this->getMockByCalls(WorkermanTcpConnection::class); + $builder = new MockObjectBuilder(); + + /** @var WorkermanTcpConnection $workermanTcpConnection */ + $workermanTcpConnection = $builder->create(WorkermanTcpConnection::class, []); - /** @var MockObject|WorkermanRequest $workermanRequest */ - $workermanRequest = $this->getMockByCalls(WorkermanRequest::class, [ - Call::create('header')->with('x-blackfire-query', null)->willReturn('workerman'), + /** @var WorkermanRequest $workermanRequest */ + $workermanRequest = $builder->create(WorkermanRequest::class, [ + new WithReturn('header', ['x-blackfire-query', null], 'workerman'), ]); - /** @var MockObject|OnMessageInterface $onMessage */ - $onMessage = $this->getMockByCalls(OnMessageInterface::class, [ - Call::create('__invoke')->with($workermanTcpConnection, $workermanRequest), + /** @var OnMessageInterface $onMessage */ + $onMessage = $builder->create(OnMessageInterface::class, [ + new WithoutReturn('__invoke', [$workermanTcpConnection, $workermanRequest]), ]); - /** @var Configuration|MockObject $config */ - $config = $this->getMockByCalls(Configuration::class); + /** @var Configuration $config */ + $config = $builder->create(Configuration::class, []); $exception = new LogicException('Something went wrong'); - /** @var Client|MockObject $client */ - $client = $this->getMockByCalls(Client::class, [ - Call::create('createProbe')->with($config, true)->willThrowException($exception), + /** @var Client $client */ + $client = $builder->create(Client::class, [ + new WithException('createProbe', [$config, true], $exception), ]); - /** @var LoggerInterface|MockObject $logger */ - $logger = $this->getMockByCalls(LoggerInterface::class, [ - Call::create('error')->with('Blackfire exception: Something went wrong', []), + /** @var LoggerInterface $logger */ + $logger = $builder->create(LoggerInterface::class, [ + new WithoutReturn('error', ['Blackfire exception: Something went wrong', []]), ]); $adapter = new BlackfireOnMessageAdapter($onMessage, $client, $config, $logger); $adapter($workermanTcpConnection, $workermanRequest); } + #[DoesNotPerformAssertions] public function testInvokeWithExceptionOnProbeEnd(): void { - /** @var MockObject|WorkermanTcpConnection $workermanTcpConnection */ - $workermanTcpConnection = $this->getMockByCalls(WorkermanTcpConnection::class); + $builder = new MockObjectBuilder(); + + /** @var WorkermanTcpConnection $workermanTcpConnection */ + $workermanTcpConnection = $builder->create(WorkermanTcpConnection::class, []); - /** @var MockObject|WorkermanRequest $workermanRequest */ - $workermanRequest = $this->getMockByCalls(WorkermanRequest::class, [ - Call::create('header')->with('x-blackfire-query', null)->willReturn('workerman'), + /** @var WorkermanRequest $workermanRequest */ + $workermanRequest = $builder->create(WorkermanRequest::class, [ + new WithReturn('header', ['x-blackfire-query', null], 'workerman'), ]); - /** @var MockObject|OnMessageInterface $onMessage */ - $onMessage = $this->getMockByCalls(OnMessageInterface::class, [ - Call::create('__invoke')->with($workermanTcpConnection, $workermanRequest), + /** @var OnMessageInterface $onMessage */ + $onMessage = $builder->create(OnMessageInterface::class, [ + new WithoutReturn('__invoke', [$workermanTcpConnection, $workermanRequest]), ]); - /** @var Configuration|MockObject $config */ - $config = $this->getMockByCalls(Configuration::class); + /** @var Configuration $config */ + $config = $builder->create(Configuration::class, []); - /** @var MockObject|Probe $probe */ - $probe = $this->getMockByCalls(Probe::class); + /** @var Probe $probe */ + $probe = $builder->create(Probe::class, []); $exception = new LogicException('Something went wrong'); - /** @var Client|MockObject $client */ - $client = $this->getMockByCalls(Client::class, [ - Call::create('createProbe')->with($config, true)->willReturn($probe), - Call::create('endProbe')->with($probe)->willThrowException($exception), + /** @var Client $client */ + $client = $builder->create(Client::class, [ + new WithReturn('createProbe', [$config, true], $probe), + new WithException('endProbe', [$probe], $exception), ]); - /** @var LoggerInterface|MockObject $logger */ - $logger = $this->getMockByCalls(LoggerInterface::class, [ - Call::create('error')->with('Blackfire exception: Something went wrong', []), + /** @var LoggerInterface $logger */ + $logger = $builder->create(LoggerInterface::class, [ + new WithoutReturn('error', ['Blackfire exception: Something went wrong', []]), ]); $adapter = new BlackfireOnMessageAdapter($onMessage, $client, $config, $logger); diff --git a/tests/Unit/Adapter/NewRelicOnMessageAdapterTest.php b/tests/Unit/Adapter/NewRelicOnMessageAdapterTest.php index 7e8f260..54684ab 100644 --- a/tests/Unit/Adapter/NewRelicOnMessageAdapterTest.php +++ b/tests/Unit/Adapter/NewRelicOnMessageAdapterTest.php @@ -69,14 +69,13 @@ function newrelic_end_transaction(bool $ignore = false): void namespace Chubbyphp\Tests\WorkermanRequestHandler\Unit\Adapter { - use Chubbyphp\Mock\Call; - use Chubbyphp\Mock\MockByCallsTrait; + use Chubbyphp\Mock\MockMethod\WithoutReturn; + use Chubbyphp\Mock\MockObjectBuilder; use Chubbyphp\WorkermanRequestHandler\Adapter\NewRelicOnMessageAdapter; use Chubbyphp\WorkermanRequestHandler\Adapter\TestNewRelicEndTransaction; use Chubbyphp\WorkermanRequestHandler\Adapter\TestNewRelicStartTransaction; use Chubbyphp\WorkermanRequestHandler\OnMessageInterface; use PHPUnit\Framework\TestCase; - use PHPUnit\WorkermanRequestHandler\MockObject\MockObject; use Workerman\Connection\TcpConnection as WorkermanTcpConnection; use Workerman\Protocols\Http\Request as WorkermanRequest; @@ -87,22 +86,22 @@ function newrelic_end_transaction(bool $ignore = false): void */ final class NewRelicOnMessageAdapterTest extends TestCase { - use MockByCallsTrait; - public function testInvoke(): void { TestNewRelicStartTransaction::reset(); TestNewRelicEndTransaction::reset(); - /** @var MockObject|WorkermanTcpConnection $workermanTcpConnection */ - $workermanTcpConnection = $this->getMockByCalls(WorkermanTcpConnection::class); + $builder = new MockObjectBuilder(); + + /** @var WorkermanTcpConnection $workermanTcpConnection */ + $workermanTcpConnection = $builder->create(WorkermanTcpConnection::class, []); - /** @var MockObject|WorkermanRequest $workermanRequest */ - $workermanRequest = $this->getMockByCalls(WorkermanRequest::class); + /** @var WorkermanRequest $workermanRequest */ + $workermanRequest = $builder->create(WorkermanRequest::class, []); - /** @var MockObject|OnMessageInterface $onMessage */ - $onMessage = $this->getMockByCalls(OnMessageInterface::class, [ - Call::create('__invoke')->with($workermanTcpConnection, $workermanRequest), + /** @var OnMessageInterface $onMessage */ + $onMessage = $builder->create(OnMessageInterface::class, [ + new WithoutReturn('__invoke', [$workermanTcpConnection, $workermanRequest]), ]); $adapter = new NewRelicOnMessageAdapter($onMessage, 'myapp'); diff --git a/tests/Unit/OnMessageTest.php b/tests/Unit/OnMessageTest.php index f0e638e..c0e6e9d 100644 --- a/tests/Unit/OnMessageTest.php +++ b/tests/Unit/OnMessageTest.php @@ -4,12 +4,13 @@ namespace Chubbyphp\Tests\WorkermanRequestHandler\Unit; -use Chubbyphp\Mock\Call; -use Chubbyphp\Mock\MockByCallsTrait; +use Chubbyphp\Mock\MockMethod\WithoutReturn; +use Chubbyphp\Mock\MockMethod\WithReturn; +use Chubbyphp\Mock\MockObjectBuilder; use Chubbyphp\WorkermanRequestHandler\OnMessage; use Chubbyphp\WorkermanRequestHandler\PsrRequestFactoryInterface; use Chubbyphp\WorkermanRequestHandler\WorkermanResponseEmitterInterface; -use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\Attributes\DoesNotPerformAssertions; use PHPUnit\Framework\TestCase; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; @@ -24,35 +25,36 @@ */ final class OnMessageTest extends TestCase { - use MockByCallsTrait; - + #[DoesNotPerformAssertions] public function testInvoke(): void { - /** @var MockObject|WorkermanTcpConnection $workermanTcpConnection */ - $workermanTcpConnection = $this->getMockByCalls(WorkermanTcpConnection::class); + $builder = new MockObjectBuilder(); + + /** @var WorkermanTcpConnection $workermanTcpConnection */ + $workermanTcpConnection = $builder->create(WorkermanTcpConnection::class, []); - /** @var MockObject|WorkermanRequest $workermanRequest */ - $workermanRequest = $this->getMockByCalls(WorkermanRequest::class); + /** @var WorkermanRequest $workermanRequest */ + $workermanRequest = $builder->create(WorkermanRequest::class, []); - /** @var MockObject|ServerRequestInterface $request */ - $request = $this->getMockByCalls(ServerRequestInterface::class); + /** @var ServerRequestInterface $request */ + $request = $builder->create(ServerRequestInterface::class, []); - /** @var MockObject|ResponseInterface $response */ - $response = $this->getMockByCalls(ResponseInterface::class); + /** @var ResponseInterface $response */ + $response = $builder->create(ResponseInterface::class, []); - /** @var MockObject|PsrRequestFactoryInterface $psrRequestFactory */ - $psrRequestFactory = $this->getMockByCalls(PsrRequestFactoryInterface::class, [ - Call::create('create')->with($workermanTcpConnection, $workermanRequest)->willReturn($request), + /** @var PsrRequestFactoryInterface $psrRequestFactory */ + $psrRequestFactory = $builder->create(PsrRequestFactoryInterface::class, [ + new WithReturn('create', [$workermanTcpConnection, $workermanRequest], $request), ]); - /** @var MockObject|WorkermanResponseEmitterInterface $workermanResponseEmitter */ - $workermanResponseEmitter = $this->getMockByCalls(WorkermanResponseEmitterInterface::class, [ - Call::create('emit')->with($response, $workermanTcpConnection), + /** @var WorkermanResponseEmitterInterface $workermanResponseEmitter */ + $workermanResponseEmitter = $builder->create(WorkermanResponseEmitterInterface::class, [ + new WithoutReturn('emit', [$response, $workermanTcpConnection]), ]); - /** @var MockObject|RequestHandlerInterface $workermanRequestHandler */ - $workermanRequestHandler = $this->getMockByCalls(RequestHandlerInterface::class, [ - Call::create('handle')->with($request)->willReturn($response), + /** @var RequestHandlerInterface $workermanRequestHandler */ + $workermanRequestHandler = $builder->create(RequestHandlerInterface::class, [ + new WithReturn('handle', [$request], $response), ]); $onMessage = new OnMessage($psrRequestFactory, $workermanResponseEmitter, $workermanRequestHandler); diff --git a/tests/Unit/PsrRequestFactoryTest.php b/tests/Unit/PsrRequestFactoryTest.php index c95208c..298354e 100644 --- a/tests/Unit/PsrRequestFactoryTest.php +++ b/tests/Unit/PsrRequestFactoryTest.php @@ -4,11 +4,13 @@ namespace Chubbyphp\Tests\WorkermanRequestHandler\Unit; -use Chubbyphp\Mock\Argument\ArgumentCallback; -use Chubbyphp\Mock\Call; -use Chubbyphp\Mock\MockByCallsTrait; +use Chubbyphp\Mock\MockMethod\WithCallback; +use Chubbyphp\Mock\MockMethod\WithException; +use Chubbyphp\Mock\MockMethod\WithReturn; +use Chubbyphp\Mock\MockMethod\WithReturnSelf; +use Chubbyphp\Mock\MockObjectBuilder; use Chubbyphp\WorkermanRequestHandler\PsrRequestFactory; -use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\Assert; use PHPUnit\Framework\TestCase; use Psr\Http\Message\ServerRequestFactoryInterface; use Psr\Http\Message\ServerRequestInterface; @@ -26,26 +28,26 @@ */ final class PsrRequestFactoryTest extends TestCase { - use MockByCallsTrait; - public function testInvoke(): void { + $builder = new MockObjectBuilder(); $bodyString = 'This is the body.'; - /** @var MockObject|WorkermanRequest $workermanRequest */ - $workermanRequest = $this->getMockByCalls(WorkermanRequest::class, [ - Call::create('method')->with()->willReturn('POST'), - Call::create('uri')->with()->willReturn('/application'), - Call::create('header')->with(null, null)->willReturn(['Content-Type' => 'multipart/form-data']), - Call::create('cookie')->with(null, null)->willReturn(['PHPSESSID' => '537cd1fa-f6c1-41ee-85b2-1abcfd6eafb7']), - Call::create('get')->with(null, null)->willReturn(['trackingId' => '82fa3d6a-3255-4716-8ea0-ed7bd19b7241']), - Call::create('post')->with(null, null)->willReturn([ + // WorkermanRequest-Mock + /** @var WorkermanRequest $workermanRequest */ + $workermanRequest = $builder->create(WorkermanRequest::class, [ + new WithReturn('method', [], 'POST'), + new WithReturn('uri', [], '/application'), + new WithReturn('header', [null, null], ['Content-Type' => 'multipart/form-data']), + new WithReturn('cookie', [null, null], ['PHPSESSID' => '537cd1fa-f6c1-41ee-85b2-1abcfd6eafb7']), + new WithReturn('get', [null, null], ['trackingId' => '82fa3d6a-3255-4716-8ea0-ed7bd19b7241']), + new WithReturn('post', [null, null], [ 'firstName' => 'John', 'lastName' => 'Doe', 'email' => 'john.doe@gmail.com', 'lastOccupation' => 'PHP Developer', ]), - Call::create('file')->with(null)->willReturn([ + new WithReturn('file', [null], [ 'cv' => [ 'name' => 'CV.pdf', 'type' => 'application/pdf', @@ -70,104 +72,108 @@ public function testInvoke(): void ], ], ]), - Call::create('rawBody')->with()->willReturn('This is the body.'), + new WithReturn('rawBody', [], $bodyString), ]); - /** @var MockObject|WorkermanTcpConnection $workermanTcpConnection */ - $workermanTcpConnection = $this->getMockByCalls(WorkermanTcpConnection::class, [ - Call::create('getRemoteIp')->with()->willReturn('172.16.89.64'), - Call::create('getRemotePort')->with()->willReturn(10817), + // WorkermanTcpConnection-Mock + /** @var WorkermanTcpConnection $workermanTcpConnection */ + $workermanTcpConnection = $builder->create(WorkermanTcpConnection::class, [ + new WithReturn('getRemoteIp', [], '172.16.89.64'), + new WithReturn('getRemotePort', [], 10817), ]); - /** @var MockObject|StreamInterface $requestBody */ - $requestBody = $this->getMockByCalls(StreamInterface::class, [ - Call::create('write')->with($bodyString)->willReturn(\strlen($bodyString)), + // RequestBody-Mock + /** @var StreamInterface $requestBody */ + $requestBody = $builder->create(StreamInterface::class, [ + new WithReturn('write', [$bodyString], \strlen($bodyString)), ]); - /** @var MockObject|StreamInterface $uploadedFileStream1 */ - $uploadedFileStream1 = $this->getMockByCalls(StreamInterface::class); + // UploadedFile Stream-Mocks + /** @var StreamInterface $uploadedFileStream1 */ + $uploadedFileStream1 = $builder->create(StreamInterface::class, []); - /** @var MockObject|StreamInterface $uploadedFileStream2 */ - $uploadedFileStream2 = $this->getMockByCalls(StreamInterface::class); + /** @var StreamInterface $uploadedFileStream2 */ + $uploadedFileStream2 = $builder->create(StreamInterface::class, []); - /** @var MockObject|StreamInterface $uploadedFileStream3 */ - $uploadedFileStream3 = $this->getMockByCalls(StreamInterface::class); + /** @var StreamInterface $uploadedFileStream3 */ + $uploadedFileStream3 = $builder->create(StreamInterface::class, []); $uploadedFileException = new \RuntimeException('test'); - /** @var MockObject|StreamFactoryInterface $streamFactory */ - $streamFactory = $this->getMockByCalls(StreamFactoryInterface::class, [ - Call::create('createStreamFromFile')->with('/tmp/php9875842a', 'r')->willReturn($uploadedFileStream1), - Call::create('createStreamFromFile')->with('/tmp/php8d5f55ce', 'r')->willReturn($uploadedFileStream2), - Call::create('createStreamFromFile') - ->with('/tmp/php123a6bf6', 'r') - ->willThrowException($uploadedFileException), - Call::create('createStream')->with('')->willReturn($uploadedFileStream3), + // StreamFactory-Mock + /** @var StreamFactoryInterface $streamFactory */ + $streamFactory = $builder->create(StreamFactoryInterface::class, [ + new WithReturn('createStreamFromFile', ['/tmp/php9875842a', 'r'], $uploadedFileStream1), + new WithReturn('createStreamFromFile', ['/tmp/php8d5f55ce', 'r'], $uploadedFileStream2), + new WithException('createStreamFromFile', ['/tmp/php123a6bf6', 'r'], $uploadedFileException), + new WithReturn('createStream', [''], $uploadedFileStream3), ]); - /** @var MockObject|UploadedFileInterface $uploadedFile1 */ - $uploadedFile1 = $this->getMockByCalls(UploadedFileInterface::class); - - /** @var MockObject|UploadedFileInterface $uploadedFile2 */ - $uploadedFile2 = $this->getMockByCalls(UploadedFileInterface::class); - - /** @var MockObject|UploadedFileInterface $uploadedFile3 */ - $uploadedFile3 = $this->getMockByCalls(UploadedFileInterface::class); - - /** @var MockObject|UploadedFileFactoryInterface $uploadedFileFactory */ - $uploadedFileFactory = $this->getMockByCalls(UploadedFileFactoryInterface::class, [ - Call::create('createUploadedFile') - ->with($uploadedFileStream1, 1_048_576, 0, 'CV.pdf', 'application/pdf') - ->willReturn($uploadedFile1), - Call::create('createUploadedFile') - ->with($uploadedFileStream2, 389120, 0, 'Advanced PHP 2017.pdf', 'application/pdf') - ->willReturn($uploadedFile2), - Call::create('createUploadedFile') - ->with($uploadedFileStream3, 524288, 0, 'Advanced Achitecture 2018.pdf', 'application/pdf') - ->willReturn($uploadedFile3), + // UploadedFile Mocks + /** @var UploadedFileInterface $uploadedFile1 */ + $uploadedFile1 = $builder->create(UploadedFileInterface::class, []); + + /** @var UploadedFileInterface $uploadedFile2 */ + $uploadedFile2 = $builder->create(UploadedFileInterface::class, []); + + /** @var UploadedFileInterface $uploadedFile3 */ + $uploadedFile3 = $builder->create(UploadedFileInterface::class, []); + + // UploadedFileFactory-Mock + /** @var UploadedFileFactoryInterface $uploadedFileFactory */ + $uploadedFileFactory = $builder->create(UploadedFileFactoryInterface::class, [ + new WithReturn( + 'createUploadedFile', + [$uploadedFileStream1, 1048576, 0, 'CV.pdf', 'application/pdf'], + $uploadedFile1 + ), + new WithReturn( + 'createUploadedFile', + [$uploadedFileStream2, 389120, 0, 'Advanced PHP 2017.pdf', 'application/pdf'], + $uploadedFile2 + ), + new WithReturn( + 'createUploadedFile', + [$uploadedFileStream3, 524288, 0, 'Advanced Achitecture 2018.pdf', 'application/pdf'], + $uploadedFile3 + ), ]); - /** @var MockObject|ServerRequestInterface $request */ - $request = $this->getMockByCalls(ServerRequestInterface::class, [ - Call::create('withHeader')->with('Content-Type', 'multipart/form-data')->willReturnSelf(), - Call::create('withCookieParams') - ->with(['PHPSESSID' => '537cd1fa-f6c1-41ee-85b2-1abcfd6eafb7']) - ->willReturnSelf(), - Call::create('withQueryParams') - ->with(['trackingId' => '82fa3d6a-3255-4716-8ea0-ed7bd19b7241']) - ->willReturnSelf(), - Call::create('withParsedBody') - ->with([ - 'firstName' => 'John', - 'lastName' => 'Doe', - 'email' => 'john.doe@gmail.com', - 'lastOccupation' => 'PHP Developer', - ]) - ->willReturnSelf(), - Call::create('withUploadedFiles') - ->with(new ArgumentCallback( - static function (array $uploadedFiles) use ($uploadedFile1, $uploadedFile2, $uploadedFile3): void { - self::assertArrayHasKey('cv', $uploadedFiles); - - self::assertSame($uploadedFile1, $uploadedFiles['cv']); - - self::assertArrayHasKey('certificates', $uploadedFiles); - - self::assertCount(2, $uploadedFiles['certificates']); - - self::assertSame($uploadedFile2, $uploadedFiles['certificates'][0]); - self::assertSame($uploadedFile3, $uploadedFiles['certificates'][1]); - } - )) - ->willReturnSelf(), - Call::create('getBody')->with()->willReturn($requestBody), + // ServerRequest-Mock + $request = null; + + /** @var ServerRequestInterface $request */ + $request = $builder->create(ServerRequestInterface::class, [ + new WithReturnSelf('withHeader', ['Content-Type', 'multipart/form-data']), + new WithReturnSelf('withCookieParams', [['PHPSESSID' => '537cd1fa-f6c1-41ee-85b2-1abcfd6eafb7']]), + new WithReturnSelf('withQueryParams', [['trackingId' => '82fa3d6a-3255-4716-8ea0-ed7bd19b7241']]), + new WithReturnSelf('withParsedBody', [[ + 'firstName' => 'John', + 'lastName' => 'Doe', + 'email' => 'john.doe@gmail.com', + 'lastOccupation' => 'PHP Developer', + ]]), + new WithCallback('withUploadedFiles', static function (array $uploadedFiles) use ($uploadedFile1, $uploadedFile2, $uploadedFile3, &$request): ServerRequestInterface { + Assert::assertArrayHasKey('cv', $uploadedFiles); + Assert::assertSame($uploadedFile1, $uploadedFiles['cv']); + Assert::assertArrayHasKey('certificates', $uploadedFiles); + Assert::assertCount(2, $uploadedFiles['certificates']); + Assert::assertSame($uploadedFile2, $uploadedFiles['certificates'][0]); + Assert::assertSame($uploadedFile3, $uploadedFiles['certificates'][1]); + + return $request; + }), + new WithReturn('getBody', [], $requestBody), ]); - /** @var MockObject|ServerRequestFactoryInterface $serverRequestFactory */ - $serverRequestFactory = $this->getMockByCalls(ServerRequestFactoryInterface::class, [ - Call::create('createServerRequest') - ->with('POST', '/application', ['REMOTE_ADDR' => '172.16.89.64', 'REMOTE_PORT' => '10817']) - ->willReturn($request), + // ServerRequestFactory-Mock + /** @var ServerRequestFactoryInterface $serverRequestFactory */ + $serverRequestFactory = $builder->create(ServerRequestFactoryInterface::class, [ + new WithReturn( + 'createServerRequest', + ['POST', '/application', ['REMOTE_ADDR' => '172.16.89.64', 'REMOTE_PORT' => '10817']], + $request + ), ]); $psrRequestFactory = new PsrRequestFactory($serverRequestFactory, $streamFactory, $uploadedFileFactory); diff --git a/tests/Unit/WorkermanResponseEmitterTest.php b/tests/Unit/WorkermanResponseEmitterTest.php index b401ad1..c1c3a30 100644 --- a/tests/Unit/WorkermanResponseEmitterTest.php +++ b/tests/Unit/WorkermanResponseEmitterTest.php @@ -4,11 +4,10 @@ namespace Chubbyphp\Tests\WorkermanRequestHandler\Unit; -use Chubbyphp\Mock\Argument\ArgumentCallback; -use Chubbyphp\Mock\Call; -use Chubbyphp\Mock\MockByCallsTrait; +use Chubbyphp\Mock\MockMethod\WithCallback; +use Chubbyphp\Mock\MockMethod\WithReturn; +use Chubbyphp\Mock\MockObjectBuilder; use Chubbyphp\WorkermanRequestHandler\WorkermanResponseEmitter; -use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\StreamInterface; @@ -22,47 +21,44 @@ */ final class WorkermanResponseEmitterTest extends TestCase { - use MockByCallsTrait; - public function testInvoke(): void { + $builder = new MockObjectBuilder(); + $headers = [ 'Set-Cookies' => ['id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly; SameSite=strict'], 'Content-Type' => ['application/json'], ]; - /** @var MockObject|StreamInterface $responseBody */ - $responseBody = $this->getMockByCalls(StreamInterface::class, [ - Call::create('__toString')->with()->willReturn('This is the body.'), + /** @var StreamInterface $responseBody */ + $responseBody = $builder->create(StreamInterface::class, [ + new WithReturn('__toString', [], 'This is the body.'), ]); - /** @var MockObject|ResponseInterface $response */ - $response = $this->getMockByCalls(ResponseInterface::class, [ - Call::create('getStatusCode')->with()->willReturn(200), - Call::create('getReasonPhrase')->with()->willReturn('OK'), - Call::create('getHeaders')->with()->willReturn($headers), - Call::create('getBody')->with()->willReturn($responseBody), + /** @var ResponseInterface $response */ + $response = $builder->create(ResponseInterface::class, [ + new WithReturn('getStatusCode', [], 200), + new WithReturn('getReasonPhrase', [], 'OK'), + new WithReturn('getHeaders', [], $headers), + new WithReturn('getBody', [], $responseBody), ]); - /** @var MockObject|WorkermanTcpConnection $workermanTcpConnection */ - $workermanTcpConnection = $this->getMockByCalls(WorkermanTcpConnection::class, [ - Call::create('send') - ->with( - new ArgumentCallback(function (WorkermanResponse $workermanResponse) use ($headers): void { - self::assertSame(200, $this->getWorkermanResponseProperty($workermanResponse, '_status')); - self::assertSame('OK', $this->getWorkermanResponseProperty($workermanResponse, '_reason')); - self::assertSame($headers, $this->getWorkermanResponseProperty($workermanResponse, '_header')); - self::assertSame('This is the body.', $this->getWorkermanResponseProperty($workermanResponse, '_body')); - }), - false - ), + /** @var WorkermanTcpConnection $workermanTcpConnection */ + $workermanTcpConnection = $builder->create(WorkermanTcpConnection::class, [ + new WithCallback('send', static function (WorkermanResponse $workermanResponse, $flag) use ($headers): void { + self::assertSame(200, self::getWorkermanResponseProperty($workermanResponse, '_status')); + self::assertSame('OK', self::getWorkermanResponseProperty($workermanResponse, '_reason')); + self::assertSame($headers, self::getWorkermanResponseProperty($workermanResponse, '_header')); + self::assertSame('This is the body.', self::getWorkermanResponseProperty($workermanResponse, '_body')); + self::assertFalse($flag); + }), ]); $workermanResponseEmitter = new WorkermanResponseEmitter(); $workermanResponseEmitter->emit($response, $workermanTcpConnection); } - private function getWorkermanResponseProperty(WorkermanResponse $workermanResponse, string $property) + private static function getWorkermanResponseProperty(WorkermanResponse $workermanResponse, string $property) { $reflectionProperty = new \ReflectionProperty($workermanResponse, $property); $reflectionProperty->setAccessible(true);