From 5e764acfcd136355332edb63ee21c8f14353fad9 Mon Sep 17 00:00:00 2001 From: Andrea De Pirro Date: Fri, 25 Oct 2019 10:54:41 +0200 Subject: [PATCH] Add support for Laravel 6 (#8) --- .travis.yml | 2 - composer.json | 12 ++-- database/factories/DomainEventFactory.php | 2 +- docker-compose.yml | 4 +- src/Contracts/EventMessageContract.php | 7 ++- .../EventStoreMiddlewareContract.php | 2 +- src/EventStoreMiddlewares/AmqpMiddleware.php | 12 ++-- .../AsyncAmqpMiddleware.php | 5 +- .../DatabaseMiddleware.php | 3 +- src/Exceptions/EventStoreFailedException.php | 4 +- src/Factories/AmqpMessageFactory.php | 5 +- src/Jobs/SendDomainEvents.php | 6 +- src/Observers/ModelObserver.php | 19 +++--- src/ValueObjects/EventMessage.php | 8 +-- tests/Console/Commands/EmitAllEventsTest.php | 1 - .../AmqpMiddlewareTest.php | 27 +++++---- .../AsyncAmqpMiddlewareTest.php | 12 ++-- tests/Factories/AmqpMessageFactoryTest.php | 19 +++--- tests/Jobs/SendDomainEventsTest.php | 6 +- tests/Observers/ModelObserverTest.php | 60 +++++++++---------- tests/TestCase.php | 5 +- 21 files changed, 116 insertions(+), 105 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5bcf651..9096869 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,8 +4,6 @@ sudo: false matrix: include: - - php: 7.1 - env: STATIC_ANALYSIS=true VALIDATE_CODING_STYLE=true - php: 7.2 env: COLLECT_COVERAGE=true VALIDATE_CODING_STYLE=true - php: 7.3 diff --git a/composer.json b/composer.json index 441b465..3de2587 100644 --- a/composer.json +++ b/composer.json @@ -11,14 +11,14 @@ "require": { "php": ">=7.2", "bschmitt/laravel-amqp": "^2.0", - "laravel/framework": "5.8.*" + "laravel/framework": "^5.8 || ^6.0" }, "require-dev": { - "phpunit/phpunit": "^7.0", + "phpunit/phpunit": "^8.0", "friendsofphp/php-cs-fixer": "^2.15", - "mockery/mockery": "^1", - "orchestra/testbench": "^3.8", - "orchestra/database": "^3.8", + "mockery/mockery": "^1.2", + "orchestra/testbench": "^4.0", + "orchestra/database": "^4.0", "php-mock/php-mock-mockery": "^1.3" }, "autoload": { @@ -32,7 +32,7 @@ } }, "scripts": { - "test": "phpunit --coverage-text; php-cs-fixer fix -v --diff --dry-run --allow-risky=yes;", + "tests": "phpunit --coverage-text; php-cs-fixer fix -v --diff --dry-run --allow-risky=yes;", "phpunit": "phpunit --coverage-text", "phpcs": "php-cs-fixer fix -v --diff --dry-run --allow-risky=yes;", "fix-cs": "php-cs-fixer fix -v --diff --allow-risky=yes;" diff --git a/database/factories/DomainEventFactory.php b/database/factories/DomainEventFactory.php index 630a57f..6e70179 100644 --- a/database/factories/DomainEventFactory.php +++ b/database/factories/DomainEventFactory.php @@ -1,7 +1,7 @@ define(DomainEvent::class, function () { diff --git a/docker-compose.yml b/docker-compose.yml index cacf061..1e26ed7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,7 @@ services: volumes: - ./:/app image: ricc/composer-prestissimo:latest - command: composer run test + command: composer run tests fixcs: volumes: @@ -28,4 +28,4 @@ services: volumes: - ./:/app image: ricc/composer-prestissimo:latest - command: composer phpunit \ No newline at end of file + command: composer phpunit diff --git a/src/Contracts/EventMessageContract.php b/src/Contracts/EventMessageContract.php index bbf4a67..446a3ce 100644 --- a/src/Contracts/EventMessageContract.php +++ b/src/Contracts/EventMessageContract.php @@ -3,19 +3,20 @@ namespace Softonic\TransactionalEventPublisher\Contracts; use Illuminate\Database\Eloquent\Model; +use JsonSerializable; /** * Interface EventMessageContract * * @package Softonic\TransactionalEventPublisher\Contracts */ -interface EventMessageContract extends \JsonSerializable +interface EventMessageContract extends JsonSerializable { /** * EventMessageContract constructor. * - * @param \Illuminate\Database\Eloquent\Model $model - * @param $eventType + * @param Model $model + * @param $eventType */ public function __construct(Model $model, $eventType); diff --git a/src/Contracts/EventStoreMiddlewareContract.php b/src/Contracts/EventStoreMiddlewareContract.php index 98e399b..32f407f 100644 --- a/src/Contracts/EventStoreMiddlewareContract.php +++ b/src/Contracts/EventStoreMiddlewareContract.php @@ -12,7 +12,7 @@ interface EventStoreMiddlewareContract /** * Stores in the message-oriented middleware. * - * @param \Softonic\TransactionalEventPublisher\Contracts\EventMessageContract $message + * @param EventMessageContract $message * * @return mixed */ diff --git a/src/EventStoreMiddlewares/AmqpMiddleware.php b/src/EventStoreMiddlewares/AmqpMiddleware.php index 9d1a01a..31f5284 100644 --- a/src/EventStoreMiddlewares/AmqpMiddleware.php +++ b/src/EventStoreMiddlewares/AmqpMiddleware.php @@ -3,6 +3,7 @@ namespace Softonic\TransactionalEventPublisher\EventStoreMiddlewares; use Bschmitt\Amqp\Amqp; +use Exception; use Psr\Log\LoggerInterface; use Softonic\TransactionalEventPublisher\Contracts\EventMessageContract; use Softonic\TransactionalEventPublisher\Contracts\EventStoreMiddlewareContract; @@ -29,10 +30,10 @@ class AmqpMiddleware implements EventStoreMiddlewareContract /** * AmqpMiddleware constructor. * - * @param \Softonic\TransactionalEventPublisher\Factories\AmqpMessageFactory $messageFactory - * @param \Bschmitt\Amqp\Amqp $amqp - * @param array $properties - * @param LoggerInterface $logger + * @param AmqpMessageFactory $messageFactory + * @param Amqp $amqp + * @param array $properties + * @param LoggerInterface $logger */ public function __construct( AmqpMessageFactory $messageFactory, @@ -63,8 +64,9 @@ public function store(EventMessageContract $message) ); return true; - } catch (\Exception $e) { + } catch (Exception $e) { $this->logger->error($e->getMessage()); + return false; } } diff --git a/src/EventStoreMiddlewares/AsyncAmqpMiddleware.php b/src/EventStoreMiddlewares/AsyncAmqpMiddleware.php index c2a1746..00e7df7 100644 --- a/src/EventStoreMiddlewares/AsyncAmqpMiddleware.php +++ b/src/EventStoreMiddlewares/AsyncAmqpMiddleware.php @@ -2,6 +2,7 @@ namespace Softonic\TransactionalEventPublisher\EventStoreMiddlewares; +use Exception; use Illuminate\Contracts\Bus\Dispatcher; use Softonic\TransactionalEventPublisher\Contracts\EventMessageContract; use Softonic\TransactionalEventPublisher\Contracts\EventStoreMiddlewareContract; @@ -22,7 +23,7 @@ public function __construct(Dispatcher $dispatcher) /** * Stores in the message-oriented middleware. * - * @param \Softonic\TransactionalEventPublisher\Contracts\EventMessageContract $message + * @param EventMessageContract $message * * @return mixed */ @@ -34,7 +35,7 @@ public function store(EventMessageContract $message) $this->dispatcher->dispatch($job); return true; - } catch (\Exception $e) { + } catch (Exception $e) { return false; } } diff --git a/src/EventStoreMiddlewares/DatabaseMiddleware.php b/src/EventStoreMiddlewares/DatabaseMiddleware.php index 8586017..f074c38 100644 --- a/src/EventStoreMiddlewares/DatabaseMiddleware.php +++ b/src/EventStoreMiddlewares/DatabaseMiddleware.php @@ -2,6 +2,7 @@ namespace Softonic\TransactionalEventPublisher\EventStoreMiddlewares; +use Exception; use Softonic\TransactionalEventPublisher\Contracts\EventMessageContract; use Softonic\TransactionalEventPublisher\Contracts\EventStoreMiddlewareContract; use Softonic\TransactionalEventPublisher\Model\DomainEvent; @@ -26,7 +27,7 @@ public function store(EventMessageContract $message) DomainEvent::create(compact('message')); return true; - } catch (\Exception $e) { + } catch (Exception $e) { return false; } } diff --git a/src/Exceptions/EventStoreFailedException.php b/src/Exceptions/EventStoreFailedException.php index 2955ad9..8a89324 100644 --- a/src/Exceptions/EventStoreFailedException.php +++ b/src/Exceptions/EventStoreFailedException.php @@ -2,11 +2,13 @@ namespace Softonic\TransactionalEventPublisher\Exceptions; +use RuntimeException; + /** * Class EventStoreFailedException * * @package Softonic\TransactionalEventPublisher\Exceptions */ -class EventStoreFailedException extends \RuntimeException +class EventStoreFailedException extends RuntimeException { } diff --git a/src/Factories/AmqpMessageFactory.php b/src/Factories/AmqpMessageFactory.php index 5849ce8..ad17fc4 100644 --- a/src/Factories/AmqpMessageFactory.php +++ b/src/Factories/AmqpMessageFactory.php @@ -2,6 +2,7 @@ namespace Softonic\TransactionalEventPublisher\Factories; +use LogicException; use PhpAmqpLib\Message\AMQPMessage; use Softonic\TransactionalEventPublisher\Contracts\EventMessageContract; @@ -18,7 +19,7 @@ class AmqpMessageFactory * @param EventMessageContract $eventMessage * @param array $properties * - * @return \PhpAmqpLib\Message\AMQPMessage + * @return AMQPMessage */ public function make(EventMessageContract $eventMessage, array $properties = null) { @@ -30,7 +31,7 @@ public function make(EventMessageContract $eventMessage, array $properties = nul private function checkMessage(array $message) { if (empty(array_filter($message))) { - throw new \LogicException('No message provided'); + throw new LogicException('No message provided'); } } } diff --git a/src/Jobs/SendDomainEvents.php b/src/Jobs/SendDomainEvents.php index 1c631a6..3072154 100644 --- a/src/Jobs/SendDomainEvents.php +++ b/src/Jobs/SendDomainEvents.php @@ -2,6 +2,7 @@ namespace Softonic\TransactionalEventPublisher\Jobs; +use Exception; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Bus\Dispatcher; use Illuminate\Contracts\Queue\ShouldQueue; @@ -9,6 +10,7 @@ use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; use Psr\Log\LoggerInterface; +use RuntimeException; use Softonic\TransactionalEventPublisher\Contracts\EventMessageContract; use Softonic\TransactionalEventPublisher\EventStoreMiddlewares\AmqpMiddleware; @@ -57,7 +59,7 @@ public function handle(AmqpMiddleware $amqpMiddleware, Dispatcher $dispatcher, L try { $this->sendEvent(); - } catch (\Exception $e) { + } catch (Exception $e) { $this->waitExponentialBackOff(); $this->retry(); } @@ -69,7 +71,7 @@ protected function sendEvent(): void $errorMessage = "The event could't be sent. Retrying message: " . json_encode($this->eventMessage); $this->logger->alert($errorMessage); - throw new \RuntimeException($errorMessage); + throw new RuntimeException($errorMessage); } } diff --git a/src/Observers/ModelObserver.php b/src/Observers/ModelObserver.php index f14e575..989af80 100644 --- a/src/Observers/ModelObserver.php +++ b/src/Observers/ModelObserver.php @@ -2,6 +2,7 @@ namespace Softonic\TransactionalEventPublisher\Observers; +use Exception; use Illuminate\Database\Eloquent\Model; use Softonic\TransactionalEventPublisher\Contracts\EventStoreMiddlewareContract; use Softonic\TransactionalEventPublisher\Exceptions\EventStoreFailedException; @@ -34,9 +35,9 @@ public function __construct( /** * Handles the model creating event. * - * @param \Illuminate\Database\Eloquent\Model $model + * @param Model $model * - * @throws \Exception + * @throws Exception */ public function creating(Model $model) { @@ -46,7 +47,7 @@ public function creating(Model $model) /** * Handles the model created event. * - * @param \Illuminate\Database\Eloquent\Model $model + * @param Model $model * * @return bool */ @@ -60,9 +61,9 @@ public function created(Model $model) /** * Handles the model updating event. * - * @param \Illuminate\Database\Eloquent\Model $model + * @param Model $model * - * @throws \Exception + * @throws Exception */ public function updating(Model $model) { @@ -72,7 +73,7 @@ public function updating(Model $model) /** * Handles the model updated event. * - * @param \Illuminate\Database\Eloquent\Model $model + * @param Model $model * * @return bool */ @@ -86,9 +87,9 @@ public function updated(Model $model) /** * Handles the model deleting event. * - * @param \Illuminate\Database\Eloquent\Model $model + * @param Model $model * - * @throws \Exception + * @throws Exception */ public function deleting(Model $model) { @@ -98,7 +99,7 @@ public function deleting(Model $model) /** * Handles the model deleted event. * - * @param \Illuminate\Database\Eloquent\Model $model + * @param Model $model * * @return bool */ diff --git a/src/ValueObjects/EventMessage.php b/src/ValueObjects/EventMessage.php index 566cd35..bfb9c81 100644 --- a/src/ValueObjects/EventMessage.php +++ b/src/ValueObjects/EventMessage.php @@ -21,11 +21,11 @@ class EventMessage implements EventMessageContract public function __construct(Model $model, $eventType) { - $this->service = config('transactional-event-publisher.service'); + $this->service = config('transactional-event-publisher.service'); $this->eventType = $eventType; $this->modelName = class_basename($model); $this->eventName = $this->buildEventName($this->modelName, $eventType); - $this->payload = $model->toArray(); + $this->payload = $model->toArray(); $this->createdAt = date('Y-m-d H:i:s'); } @@ -53,10 +53,10 @@ public function jsonSerialize() public function toArray() { return [ - 'service' => $this->service, + 'service' => $this->service, 'eventName' => $this->eventName, 'createdAt' => $this->createdAt, - 'payload' => $this->payload, + 'payload' => $this->payload, ]; } } diff --git a/tests/Console/Commands/EmitAllEventsTest.php b/tests/Console/Commands/EmitAllEventsTest.php index a9a444a..cd010ea 100644 --- a/tests/Console/Commands/EmitAllEventsTest.php +++ b/tests/Console/Commands/EmitAllEventsTest.php @@ -5,7 +5,6 @@ use Illuminate\Foundation\Testing\DatabaseTransactions; use Softonic\TransactionalEventPublisher\Jobs\SendDomainEvents; use Softonic\TransactionalEventPublisher\Model\DomainEvent; - use Softonic\TransactionalEventPublisher\TestCase; class EmitAllEventsTest extends TestCase diff --git a/tests/EventStoreMiddlewares/AmqpMiddlewareTest.php b/tests/EventStoreMiddlewares/AmqpMiddlewareTest.php index 14887db..2ce03b9 100644 --- a/tests/EventStoreMiddlewares/AmqpMiddlewareTest.php +++ b/tests/EventStoreMiddlewares/AmqpMiddlewareTest.php @@ -3,6 +3,7 @@ namespace Softonic\TransactionalEventPublisher\Tests\EventStoreMiddlewares; use Bschmitt\Amqp\Amqp; +use Mockery; use PhpAmqpLib\Message\AMQPMessage; use Psr\Log\LoggerInterface; use Softonic\TransactionalEventPublisher\EventStoreMiddlewares\AmqpMiddleware; @@ -14,21 +15,21 @@ class AmqpMiddlewareTest extends TestCase { public function testWhenStoringAMessageThrowAnExceptionAmqpMiddlewareShouldReturnFalse() { - $message = \Mockery::mock(EventMessage::class); + $message = Mockery::mock(EventMessage::class); $amqpMessage = new AMQPMessage(); $properties = ['AMQP properties']; - $logger = \Mockery::mock(LoggerInterface::class); + $logger = Mockery::mock(LoggerInterface::class); $logger->shouldReceive('error') ->once(); - $amqpMessageFactory = \Mockery::mock(AmqpMessageFactory::class); + $amqpMessageFactory = Mockery::mock(AmqpMessageFactory::class); $amqpMessageFactory ->shouldReceive('make') ->once() ->andReturn($amqpMessage); - $amqpMock = \Mockery::mock(Amqp::class); + $amqpMock = Mockery::mock(Amqp::class); $amqpMock ->shouldReceive('publish') ->once() @@ -46,21 +47,21 @@ public function testWhenStoringAMessageThrowAnExceptionAmqpMiddlewareShouldRetur public function testWhenStoringAMessageShouldReturnTrue() { - $message = \Mockery::mock(EventMessage::class); + $message = Mockery::mock(EventMessage::class); $properties = ['AMQP properties']; - $logger = \Mockery::mock(LoggerInterface::class); + $logger = Mockery::mock(LoggerInterface::class); $message->service = 'service'; $message->eventType = 'created'; $message->modelName = 'Model'; $amqpMessage = new AMQPMessage(); - $amqpMock = \Mockery::mock(Amqp::class); + $amqpMock = Mockery::mock(Amqp::class); $amqpMock ->shouldReceive('publish') ->once() ->with('service.created.model', $amqpMessage, $properties); - $amqpMessageFactory = \Mockery::mock(AmqpMessageFactory::class); + $amqpMessageFactory = Mockery::mock(AmqpMessageFactory::class); $amqpMessageFactory ->shouldReceive('make') ->once() @@ -73,24 +74,24 @@ public function testWhenStoringAMessageShouldReturnTrue() public function testConfigurableRoutingKey() { - $message = \Mockery::mock(EventMessage::class); + $message = Mockery::mock(EventMessage::class); $properties = [ - 'routing_key_fields' => ['site', 'service', 'eventType', 'modelName'], + 'routing_key_fields' => ['site', 'service', 'eventType', 'modelName'], ]; - $logger = \Mockery::mock(LoggerInterface::class); + $logger = Mockery::mock(LoggerInterface::class); $message->site = 'softonic'; $message->service = 'service'; $message->eventType = 'created'; $message->modelName = 'Model'; $amqpMessage = new AMQPMessage(); - $amqpMock = \Mockery::mock(Amqp::class); + $amqpMock = Mockery::mock(Amqp::class); $amqpMock ->shouldReceive('publish') ->once() ->with('softonic.service.created.model', $amqpMessage, $properties); - $amqpMessageFactory = \Mockery::mock(AmqpMessageFactory::class); + $amqpMessageFactory = Mockery::mock(AmqpMessageFactory::class); $amqpMessageFactory ->shouldReceive('make') ->once() diff --git a/tests/EventStoreMiddlewares/AsyncAmqpMiddlewareTest.php b/tests/EventStoreMiddlewares/AsyncAmqpMiddlewareTest.php index 78e8c91..efb4384 100644 --- a/tests/EventStoreMiddlewares/AsyncAmqpMiddlewareTest.php +++ b/tests/EventStoreMiddlewares/AsyncAmqpMiddlewareTest.php @@ -2,7 +2,9 @@ namespace Softonic\TransactionalEventPublisher\EventStoreMiddlewares; +use Exception; use Illuminate\Contracts\Bus\Dispatcher; +use Mockery; use Softonic\TransactionalEventPublisher\Contracts\EventMessageContract; use Softonic\TransactionalEventPublisher\Jobs\SendDomainEvents; use Softonic\TransactionalEventPublisher\TestCase; @@ -14,13 +16,13 @@ class AsyncAmqpMiddlewareTest extends TestCase */ public function whenStoreDomainEventFailsItShouldReturnFalse() { - $eventMessage = \Mockery::mock(EventMessageContract::class); - $commandBus = \Mockery::mock(Dispatcher::class); + $eventMessage = Mockery::mock(EventMessageContract::class); + $commandBus = Mockery::mock(Dispatcher::class); $asyncAmqpMiddleware = new AsyncAmqpMiddleware($commandBus); $commandBus->shouldReceive('dispatch') ->once() - ->andThrow(\Exception::class); + ->andThrow(Exception::class); $this->assertFalse($asyncAmqpMiddleware->store($eventMessage)); } @@ -30,8 +32,8 @@ public function whenStoreDomainEventFailsItShouldReturnFalse() */ public function whenStoreEventAndSendJobItShouldReturnTrue() { - $eventMessage = \Mockery::mock(EventMessageContract::class); - $commandBus = \Mockery::mock(Dispatcher::class); + $eventMessage = Mockery::mock(EventMessageContract::class); + $commandBus = Mockery::mock(Dispatcher::class); $asyncAmqpMiddleware = new AsyncAmqpMiddleware($commandBus); $commandBus->shouldReceive('dispatch') diff --git a/tests/Factories/AmqpMessageFactoryTest.php b/tests/Factories/AmqpMessageFactoryTest.php index 9a30513..e9c6ffb 100644 --- a/tests/Factories/AmqpMessageFactoryTest.php +++ b/tests/Factories/AmqpMessageFactoryTest.php @@ -2,6 +2,8 @@ namespace Softonic\TransactionalEventPublisher\Factories; +use LogicException; +use Mockery; use PhpAmqpLib\Message\AMQPMessage; use phpmock\mockery\PHPMockery; use Softonic\TransactionalEventPublisher\TestCase; @@ -9,15 +11,14 @@ class AmqpMessageFactoryTest extends TestCase { - /** - * @expectedException \LogicException - * @expectedExceptionMessage No message provided - */ public function testWhenNoMessageShouldThrowALogicException() { + $this->expectException(LogicException::class); + $this->expectExceptionMessage('No message provided'); + $factory = new AmqpMessageFactory(); - $eventMessageMock = \Mockery::mock(EventMessage::class); + $eventMessageMock = Mockery::mock(EventMessage::class); $eventMessageMock->shouldReceive('toArray')->once()->andReturn([]); $factory->make($eventMessageMock); @@ -25,8 +26,8 @@ public function testWhenNoMessageShouldThrowALogicException() public function testWhenRoutingKeyProvidedAndMessageShouldCreateAnAMQPMessageObject() { - $factory = new AmqpMessageFactory(); - $eventMessage = \Mockery::mock(EventMessage::class); + $factory = new AmqpMessageFactory(); + $eventMessage = Mockery::mock(EventMessage::class); $eventMessage ->shouldReceive('toArray') ->andReturn(['service' => 'service', 'eventName' => 'created']); @@ -34,10 +35,10 @@ public function testWhenRoutingKeyProvidedAndMessageShouldCreateAnAMQPMessageObj PHPMockery::mock('Softonic\TransactionalEventPublisher\Factories', 'json_encode') ->andReturn('json encoded string message'); - $eventMessage->service = 'service'; + $eventMessage->service = 'service'; $eventMessage->eventName = 'created'; $eventMessage->createdAt = '2018-02-01 21:00:01'; - $eventMessage->payload = 'payload data'; + $eventMessage->payload = 'payload data'; $amqpMessage = $factory->make($eventMessage); diff --git a/tests/Jobs/SendDomainEventsTest.php b/tests/Jobs/SendDomainEventsTest.php index 5e43cff..7190e9e 100644 --- a/tests/Jobs/SendDomainEventsTest.php +++ b/tests/Jobs/SendDomainEventsTest.php @@ -44,7 +44,7 @@ public function whenMessageIsSendItShouldResumeTheJob() $dispatcher = Mockery::mock(Dispatcher::class); $dispatcher->shouldNotReceive('dispatch'); - $logger = \Mockery::mock(LoggerInterface::class); + $logger = Mockery::mock(LoggerInterface::class); $logger->shouldNotReceive('alert'); $sendDomainEvents = new SendDomainEvents($message); @@ -70,7 +70,7 @@ public function whenMessageIsSendWithExponentialRetryItShouldResumeTheJobWaiting $dispatcher = Mockery::mock(Dispatcher::class); $dispatcher->shouldNotReceive('dispatch'); - $logger = \Mockery::mock(LoggerInterface::class); + $logger = Mockery::mock(LoggerInterface::class); $logger->shouldReceive('alert') ->never(); @@ -101,7 +101,7 @@ public function whenMessageCannotBeSendItShouldTryAgainLater() $dispatcher->shouldReceive('dispatch') ->once(); - $logger = \Mockery::mock(LoggerInterface::class); + $logger = Mockery::mock(LoggerInterface::class); $logger->shouldReceive('alert') ->once() ->with($warningMessage); diff --git a/tests/Observers/ModelObserverTest.php b/tests/Observers/ModelObserverTest.php index bbe4c5c..cff02e9 100644 --- a/tests/Observers/ModelObserverTest.php +++ b/tests/Observers/ModelObserverTest.php @@ -4,7 +4,9 @@ use Illuminate\Database\Connectors\MySqlConnector; use Illuminate\Database\Eloquent\Model; +use Mockery; use Softonic\TransactionalEventPublisher\Contracts\EventStoreMiddlewareContract; +use Softonic\TransactionalEventPublisher\Exceptions\EventStoreFailedException; use Softonic\TransactionalEventPublisher\TestCase; class ModelObserverTest extends TestCase @@ -13,17 +15,17 @@ public function testWhenANewItemIsCreatedShouldStoreTheEventMessage() { $eventStoreResult = true; - $mySqlConnectorMock = \Mockery::mock(MySqlConnector::class); + $mySqlConnectorMock = Mockery::mock(MySqlConnector::class); $mySqlConnectorMock->shouldReceive('beginTransaction')->once(); $mySqlConnectorMock->shouldReceive('commit')->once(); - $modelMock = \Mockery::mock(Model::class); + $modelMock = Mockery::mock(Model::class); $modelMock ->shouldReceive('getConnection') ->times(2) ->andReturn($mySqlConnectorMock); - $eventStoreMiddlewareMock = \Mockery::mock(EventStoreMiddlewareContract::class); + $eventStoreMiddlewareMock = Mockery::mock(EventStoreMiddlewareContract::class); $eventStoreMiddlewareMock ->shouldReceive('store') ->once() @@ -36,24 +38,23 @@ public function testWhenANewItemIsCreatedShouldStoreTheEventMessage() $this->assertTrue($modelObserver->created($modelMock)); } - /** - * @expectedException \Softonic\TransactionalEventPublisher\Exceptions\EventStoreFailedException - */ public function testWhenANewItemIsCreatedButTheEventStoreFailsWhenStoring() { + $this->expectException(EventStoreFailedException::class); + $eventStoreResult = false; - $mySqlConnectorMock = \Mockery::mock(MySqlConnector::class); + $mySqlConnectorMock = Mockery::mock(MySqlConnector::class); $mySqlConnectorMock->shouldReceive('beginTransaction')->once(); $mySqlConnectorMock->shouldReceive('rollBack')->once(); - $modelMock = \Mockery::mock(Model::class); + $modelMock = Mockery::mock(Model::class); $modelMock ->shouldReceive('getConnection') ->times(2) ->andReturn($mySqlConnectorMock); - $eventStoreMiddlewareMock = \Mockery::mock(EventStoreMiddlewareContract::class); + $eventStoreMiddlewareMock = Mockery::mock(EventStoreMiddlewareContract::class); $eventStoreMiddlewareMock ->shouldReceive('store') ->once() @@ -69,17 +70,17 @@ public function testWhenAnItemIsUpdatedShouldStoreTheEventMessage() { $eventStoreResult = true; - $mySqlConnectorMock = \Mockery::mock(MySqlConnector::class); + $mySqlConnectorMock = Mockery::mock(MySqlConnector::class); $mySqlConnectorMock->shouldReceive('beginTransaction')->once(); $mySqlConnectorMock->shouldReceive('commit')->once(); - $modelMock = \Mockery::mock(Model::class); + $modelMock = Mockery::mock(Model::class); $modelMock ->shouldReceive('getConnection') ->times(2) ->andReturn($mySqlConnectorMock); - $eventStoreMiddlewareMock = \Mockery::mock(EventStoreMiddlewareContract::class); + $eventStoreMiddlewareMock = Mockery::mock(EventStoreMiddlewareContract::class); $eventStoreMiddlewareMock ->shouldReceive('store') ->once() @@ -92,24 +93,23 @@ public function testWhenAnItemIsUpdatedShouldStoreTheEventMessage() $this->assertTrue($modelObserver->updated($modelMock)); } - /** - * @expectedException \Softonic\TransactionalEventPublisher\Exceptions\EventStoreFailedException - */ public function testWhenAnItemIsUpdatedButTheEventStoreFailsWhenStoring() { + $this->expectException(EventStoreFailedException::class); + $eventStoreResult = false; - $mySqlConnectorMock = \Mockery::mock(MySqlConnector::class); + $mySqlConnectorMock = Mockery::mock(MySqlConnector::class); $mySqlConnectorMock->shouldReceive('beginTransaction')->once(); $mySqlConnectorMock->shouldReceive('rollBack')->once(); - $modelMock = \Mockery::mock(Model::class); + $modelMock = Mockery::mock(Model::class); $modelMock ->shouldReceive('getConnection') ->times(2) ->andReturn($mySqlConnectorMock); - $eventStoreMiddlewareMock = \Mockery::mock(EventStoreMiddlewareContract::class); + $eventStoreMiddlewareMock = Mockery::mock(EventStoreMiddlewareContract::class); $eventStoreMiddlewareMock ->shouldReceive('store') ->once() @@ -125,17 +125,17 @@ public function testWhenAnItemDeletedShouldStoreTheEventMessage() { $eventStoreResult = true; - $mySqlConnectorMock = \Mockery::mock(MySqlConnector::class); + $mySqlConnectorMock = Mockery::mock(MySqlConnector::class); $mySqlConnectorMock->shouldReceive('beginTransaction')->once(); $mySqlConnectorMock->shouldReceive('commit')->once(); - $modelMock = \Mockery::mock(Model::class); + $modelMock = Mockery::mock(Model::class); $modelMock ->shouldReceive('getConnection') ->times(2) ->andReturn($mySqlConnectorMock); - $eventStoreMiddlewareMock = \Mockery::mock(EventStoreMiddlewareContract::class); + $eventStoreMiddlewareMock = Mockery::mock(EventStoreMiddlewareContract::class); $eventStoreMiddlewareMock ->shouldReceive('store') ->once() @@ -148,24 +148,22 @@ public function testWhenAnItemDeletedShouldStoreTheEventMessage() $this->assertTrue($modelObserver->deleted($modelMock)); } - /** - * @expectedException \Softonic\TransactionalEventPublisher\Exceptions\EventStoreFailedException - */ public function testWhenAnItemIsDeletedButTheEventStoreFailsWhenStoring() { + $this->expectException(EventStoreFailedException::class); $eventStoreResult = false; - $mySqlConnectorMock = \Mockery::mock(MySqlConnector::class); + $mySqlConnectorMock = Mockery::mock(MySqlConnector::class); $mySqlConnectorMock->shouldReceive('beginTransaction')->once(); $mySqlConnectorMock->shouldReceive('rollBack')->once(); - $modelMock = \Mockery::mock(Model::class); + $modelMock = Mockery::mock(Model::class); $modelMock ->shouldReceive('getConnection') ->times(2) ->andReturn($mySqlConnectorMock); - $eventStoreMiddlewareMock = \Mockery::mock(EventStoreMiddlewareContract::class); + $eventStoreMiddlewareMock = Mockery::mock(EventStoreMiddlewareContract::class); $eventStoreMiddlewareMock ->shouldReceive('store') ->once() @@ -181,23 +179,23 @@ public function testWhenItemIsCreatedWithMultipleMiddlewaresShouldStoreTheEventM { $eventStoreResult = true; - $mySqlConnectorMock = \Mockery::mock(MySqlConnector::class); + $mySqlConnectorMock = Mockery::mock(MySqlConnector::class); $mySqlConnectorMock->shouldReceive('beginTransaction')->once(); $mySqlConnectorMock->shouldReceive('commit')->once(); - $modelMock = \Mockery::mock(Model::class); + $modelMock = Mockery::mock(Model::class); $modelMock ->shouldReceive('getConnection') ->times(2) ->andReturn($mySqlConnectorMock); - $firstEventStoreMiddlewareMock = \Mockery::mock(EventStoreMiddlewareContract::class); + $firstEventStoreMiddlewareMock = Mockery::mock(EventStoreMiddlewareContract::class); $firstEventStoreMiddlewareMock ->shouldReceive('store') ->once() ->andReturn($eventStoreResult); - $secondEventStoreMiddlewareMock = \Mockery::mock(EventStoreMiddlewareContract::class); + $secondEventStoreMiddlewareMock = Mockery::mock(EventStoreMiddlewareContract::class); $secondEventStoreMiddlewareMock ->shouldReceive('store') ->once() diff --git a/tests/TestCase.php b/tests/TestCase.php index 63d158d..c6bb257 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -2,6 +2,7 @@ namespace Softonic\TransactionalEventPublisher; +use Mockery; use Orchestra\Testbench\TestCase as TestbenchTestCase; class TestCase extends TestbenchTestCase @@ -15,11 +16,11 @@ public function setUp(): void public function tearDown(): void { if (class_exists('Mockery')) { - if ($container = \Mockery::getContainer()) { + if ($container = Mockery::getContainer()) { $this->addToAssertionCount($container->mockery_getExpectationCount()); } - \Mockery::close(); + Mockery::close(); } } }