From 4ae762657ef8aaa76b43e9a44b43600cb0c96477 Mon Sep 17 00:00:00 2001 From: Thibaud Fabre Date: Thu, 12 May 2016 14:22:49 +0200 Subject: [PATCH] Update tests to mock event subscribers not mailers --- .../Core/Provider/OrderServiceProvider.php | 5 +- .../Phrasea/Controller/Prod/OrderTest.php | 53 ++++++++++++++----- tests/classes/PhraseanetTestCase.php | 1 + 3 files changed, 43 insertions(+), 16 deletions(-) diff --git a/lib/Alchemy/Phrasea/Core/Provider/OrderServiceProvider.php b/lib/Alchemy/Phrasea/Core/Provider/OrderServiceProvider.php index 8c10fbcb06..80fb099dfb 100644 --- a/lib/Alchemy/Phrasea/Core/Provider/OrderServiceProvider.php +++ b/lib/Alchemy/Phrasea/Core/Provider/OrderServiceProvider.php @@ -12,6 +12,7 @@ namespace Alchemy\Phrasea\Core\Provider; use Alchemy\Phrasea\Core\Event\Subscriber\OrderSubscriber; +use Alchemy\Phrasea\Model\Entities\Order; use Alchemy\Phrasea\Order\ValidationNotifier\MailNotifier; use Alchemy\Phrasea\Order\ValidationNotifier\WebhookNotifier; use Alchemy\Phrasea\Order\ValidationNotifierRegistry; @@ -32,8 +33,8 @@ class OrderServiceProvider implements ServiceProviderInterface $this['events.order_subscriber'] = $app->share(function (Application $app) { $notifierRegistry = new ValidationNotifierRegistry(); - $notifierRegistry->registerNotifier('mail', new MailNotifier($app)); - $notifierRegistry->registerNotifier('webhook', new WebhookNotifier($app['manipulator.webhook-event'])); + $notifierRegistry->registerNotifier(Order::NOTIFY_MAIL, new MailNotifier($app)); + $notifierRegistry->registerNotifier(Order::NOTIFY_WEBHOOK, new WebhookNotifier($app['manipulator.webhook-event'])); return new OrderSubscriber($notifierRegistry); }); diff --git a/tests/Alchemy/Tests/Phrasea/Controller/Prod/OrderTest.php b/tests/Alchemy/Tests/Phrasea/Controller/Prod/OrderTest.php index 558b599b88..e3480b6a6e 100644 --- a/tests/Alchemy/Tests/Phrasea/Controller/Prod/OrderTest.php +++ b/tests/Alchemy/Tests/Phrasea/Controller/Prod/OrderTest.php @@ -20,13 +20,11 @@ class OrderTest extends \PhraseanetAuthenticatedWebTestCase { $app = $this->getApplication(); - $app['notification.deliverer'] = $this->getMockBuilder(Deliverer::class) - ->disableOriginalConstructor() - ->getMock(); $triggered = false; $app['dispatcher']->addListener(PhraseaEvents::ORDER_CREATE, function (Event $event) use (&$triggered) { $triggered = true; }); + $client = $this->getClient(); $client->request('POST', '/prod/order/', [ 'lst' => $this->getRecord1()->getId(), @@ -45,9 +43,6 @@ class OrderTest extends \PhraseanetAuthenticatedWebTestCase { $app = $this->getApplication(); - $app['notification.deliverer'] = $this->getMockBuilder(Deliverer::class) - ->disableOriginalConstructor() - ->getMock(); $triggered = false; $app['dispatcher']->addListener(PhraseaEvents::ORDER_CREATE, function (Event $event) use (&$triggered) { $triggered = true; @@ -90,37 +85,53 @@ class OrderTest extends \PhraseanetAuthenticatedWebTestCase public function testSendOrder() { + $app = $this->getApplication(); $order = $this->createOneOrder('I need this pictures'); - $this->mockNotificationDeliverer('Alchemy\Phrasea\Notification\Mail\MailInfoOrderDelivered'); - $this->mockUserNotificationSettings('eventsmanager_notify_orderdeliver'); + $triggered = false; + $app['dispatcher']->addListener(PhraseaEvents::ORDER_DELIVER, function (Event $event) use (&$triggered) { + $triggered = true; + }); $parameters = []; foreach ($order->getElements() as $element) { $parameters[] = $element->getId(); } $response = $this->request('POST', '/prod/order/' . $order->getId() . '/send/', ['elements' => $parameters]); + + $this->assertTrue($triggered, 'Order delivered listener not triggered'); $this->assertTrue($response->isRedirect(), 'Could not validate some elements. not a redirect'); + $url = parse_url($response->headers->get('location')); parse_str($url['query']); + $this->assertTrue(strpos($url['query'], 'success=1') === 0, 'Validation of elements is not successful'); } public function testSendOrderJson() { + $app = $this->getApplication(); $order = $this->createOneOrder('I need this pictures'); - $this->mockNotificationDeliverer('Alchemy\Phrasea\Notification\Mail\MailInfoOrderDelivered'); - $this->mockUserNotificationSettings('eventsmanager_notify_orderdeliver'); + $triggered = false; + $app['dispatcher']->addListener(PhraseaEvents::ORDER_DELIVER, function (Event $event) use (&$triggered) { + $triggered = true; + }); $parameters = []; + foreach ($order->getElements() as $element) { $parameters[] = $element->getId(); } + $response = $this->XMLHTTPRequest('POST', '/prod/order/' . $order->getId() . '/send/', ['elements' => $parameters]); + $this->assertTrue($response->isOk()); $this->assertEquals('application/json', $response->headers->get('Content-Type')); + $this->assertTrue($triggered, 'Order delivered listener not triggered'); + $content = json_decode($response->getContent()); + $this->assertTrue(is_object($content)); $this->assertObjectHasAttribute('success', $content, $response->getContent()); $this->assertTrue( ! ! $content->success, $response->getContent()); @@ -130,10 +141,13 @@ class OrderTest extends \PhraseanetAuthenticatedWebTestCase public function testDenyOrder() { + $app = $this->getApplication(); $order = $this->createOneOrder('I need this pictures'); - $this->mockNotificationDeliverer('Alchemy\Phrasea\Notification\Mail\MailInfoOrderCancelled'); - $this->mockUserNotificationSettings('eventsmanager_notify_ordernotdelivered'); + $triggered = false; + $app['dispatcher']->addListener(PhraseaEvents::ORDER_DENY, function (Event $event) use (&$triggered) { + $triggered = true; + }); $parameters = []; foreach ($order->getElements() as $element) { @@ -141,7 +155,10 @@ class OrderTest extends \PhraseanetAuthenticatedWebTestCase } $client = $this->getClient(); $client->request('POST', '/prod/order/' . $order->getId() . '/deny/', ['elements' => $parameters]); + $this->assertTrue($client->getResponse()->isRedirect()); + $this->assertTrue($triggered, 'Order denied listener not triggered'); + $url = parse_url($client->getResponse()->headers->get('location')); $var = []; parse_str($url['query'], $var); @@ -150,19 +167,27 @@ class OrderTest extends \PhraseanetAuthenticatedWebTestCase public function testDenyOrderJson() { + $app = $this->getApplication(); $order = $this->createOneOrder('I need this pictures'); - $this->mockNotificationDeliverer('Alchemy\Phrasea\Notification\Mail\MailInfoOrderCancelled'); - $this->mockUserNotificationSettings('eventsmanager_notify_ordernotdelivered'); + $triggered = false; + $app['dispatcher']->addListener(PhraseaEvents::ORDER_DENY, function (Event $event) use (&$triggered) { + $triggered = true; + }); $parameters = []; foreach ($order->getElements() as $element) { $parameters[] = $element->getId(); } + $response = $this->XMLHTTPRequest('POST', '/prod/order/' . $order->getId() . '/deny/', ['elements' => $parameters]); + $this->assertTrue($response->isOk()); $this->assertEquals('application/json', $response->headers->get('Content-Type')); + $this->assertTrue($triggered, 'Order denied listener not triggered'); + $content = json_decode($response->getContent()); + $this->assertTrue(is_object($content)); $this->assertObjectHasAttribute('success', $content, $response->getContent()); $this->assertTrue( ! ! $content->success, $response->getContent()); diff --git a/tests/classes/PhraseanetTestCase.php b/tests/classes/PhraseanetTestCase.php index 8ae9183b8e..caf836fac2 100644 --- a/tests/classes/PhraseanetTestCase.php +++ b/tests/classes/PhraseanetTestCase.php @@ -689,6 +689,7 @@ abstract class PhraseanetTestCase extends WebTestCase self::$DI['app']['notification.deliverer'] = $this->getMockBuilder('Alchemy\Phrasea\Notification\Deliverer') ->disableOriginalConstructor() ->getMock(); + self::$DI['app']['notification.deliverer']->expects($this->exactly($qty)) ->method('deliver') ->with($this->isInstanceOf($expectedMail), $this->equalTo($receipt));