mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-24 02:13:15 +00:00
Update tests to mock event subscribers not mailers
This commit is contained in:
@@ -12,6 +12,7 @@
|
|||||||
namespace Alchemy\Phrasea\Core\Provider;
|
namespace Alchemy\Phrasea\Core\Provider;
|
||||||
|
|
||||||
use Alchemy\Phrasea\Core\Event\Subscriber\OrderSubscriber;
|
use Alchemy\Phrasea\Core\Event\Subscriber\OrderSubscriber;
|
||||||
|
use Alchemy\Phrasea\Model\Entities\Order;
|
||||||
use Alchemy\Phrasea\Order\ValidationNotifier\MailNotifier;
|
use Alchemy\Phrasea\Order\ValidationNotifier\MailNotifier;
|
||||||
use Alchemy\Phrasea\Order\ValidationNotifier\WebhookNotifier;
|
use Alchemy\Phrasea\Order\ValidationNotifier\WebhookNotifier;
|
||||||
use Alchemy\Phrasea\Order\ValidationNotifierRegistry;
|
use Alchemy\Phrasea\Order\ValidationNotifierRegistry;
|
||||||
@@ -32,8 +33,8 @@ class OrderServiceProvider implements ServiceProviderInterface
|
|||||||
$this['events.order_subscriber'] = $app->share(function (Application $app) {
|
$this['events.order_subscriber'] = $app->share(function (Application $app) {
|
||||||
$notifierRegistry = new ValidationNotifierRegistry();
|
$notifierRegistry = new ValidationNotifierRegistry();
|
||||||
|
|
||||||
$notifierRegistry->registerNotifier('mail', new MailNotifier($app));
|
$notifierRegistry->registerNotifier(Order::NOTIFY_MAIL, new MailNotifier($app));
|
||||||
$notifierRegistry->registerNotifier('webhook', new WebhookNotifier($app['manipulator.webhook-event']));
|
$notifierRegistry->registerNotifier(Order::NOTIFY_WEBHOOK, new WebhookNotifier($app['manipulator.webhook-event']));
|
||||||
|
|
||||||
return new OrderSubscriber($notifierRegistry);
|
return new OrderSubscriber($notifierRegistry);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -20,13 +20,11 @@ class OrderTest extends \PhraseanetAuthenticatedWebTestCase
|
|||||||
{
|
{
|
||||||
$app = $this->getApplication();
|
$app = $this->getApplication();
|
||||||
|
|
||||||
$app['notification.deliverer'] = $this->getMockBuilder(Deliverer::class)
|
|
||||||
->disableOriginalConstructor()
|
|
||||||
->getMock();
|
|
||||||
$triggered = false;
|
$triggered = false;
|
||||||
$app['dispatcher']->addListener(PhraseaEvents::ORDER_CREATE, function (Event $event) use (&$triggered) {
|
$app['dispatcher']->addListener(PhraseaEvents::ORDER_CREATE, function (Event $event) use (&$triggered) {
|
||||||
$triggered = true;
|
$triggered = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
$client = $this->getClient();
|
$client = $this->getClient();
|
||||||
$client->request('POST', '/prod/order/', [
|
$client->request('POST', '/prod/order/', [
|
||||||
'lst' => $this->getRecord1()->getId(),
|
'lst' => $this->getRecord1()->getId(),
|
||||||
@@ -45,9 +43,6 @@ class OrderTest extends \PhraseanetAuthenticatedWebTestCase
|
|||||||
{
|
{
|
||||||
$app = $this->getApplication();
|
$app = $this->getApplication();
|
||||||
|
|
||||||
$app['notification.deliverer'] = $this->getMockBuilder(Deliverer::class)
|
|
||||||
->disableOriginalConstructor()
|
|
||||||
->getMock();
|
|
||||||
$triggered = false;
|
$triggered = false;
|
||||||
$app['dispatcher']->addListener(PhraseaEvents::ORDER_CREATE, function (Event $event) use (&$triggered) {
|
$app['dispatcher']->addListener(PhraseaEvents::ORDER_CREATE, function (Event $event) use (&$triggered) {
|
||||||
$triggered = true;
|
$triggered = true;
|
||||||
@@ -90,37 +85,53 @@ class OrderTest extends \PhraseanetAuthenticatedWebTestCase
|
|||||||
|
|
||||||
public function testSendOrder()
|
public function testSendOrder()
|
||||||
{
|
{
|
||||||
|
$app = $this->getApplication();
|
||||||
$order = $this->createOneOrder('I need this pictures');
|
$order = $this->createOneOrder('I need this pictures');
|
||||||
|
|
||||||
$this->mockNotificationDeliverer('Alchemy\Phrasea\Notification\Mail\MailInfoOrderDelivered');
|
$triggered = false;
|
||||||
$this->mockUserNotificationSettings('eventsmanager_notify_orderdeliver');
|
$app['dispatcher']->addListener(PhraseaEvents::ORDER_DELIVER, function (Event $event) use (&$triggered) {
|
||||||
|
$triggered = true;
|
||||||
|
});
|
||||||
|
|
||||||
$parameters = [];
|
$parameters = [];
|
||||||
foreach ($order->getElements() as $element) {
|
foreach ($order->getElements() as $element) {
|
||||||
$parameters[] = $element->getId();
|
$parameters[] = $element->getId();
|
||||||
}
|
}
|
||||||
$response = $this->request('POST', '/prod/order/' . $order->getId() . '/send/', ['elements' => $parameters]);
|
$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');
|
$this->assertTrue($response->isRedirect(), 'Could not validate some elements. not a redirect');
|
||||||
|
|
||||||
$url = parse_url($response->headers->get('location'));
|
$url = parse_url($response->headers->get('location'));
|
||||||
parse_str($url['query']);
|
parse_str($url['query']);
|
||||||
|
|
||||||
$this->assertTrue(strpos($url['query'], 'success=1') === 0, 'Validation of elements is not successful');
|
$this->assertTrue(strpos($url['query'], 'success=1') === 0, 'Validation of elements is not successful');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testSendOrderJson()
|
public function testSendOrderJson()
|
||||||
{
|
{
|
||||||
|
$app = $this->getApplication();
|
||||||
$order = $this->createOneOrder('I need this pictures');
|
$order = $this->createOneOrder('I need this pictures');
|
||||||
|
|
||||||
$this->mockNotificationDeliverer('Alchemy\Phrasea\Notification\Mail\MailInfoOrderDelivered');
|
$triggered = false;
|
||||||
$this->mockUserNotificationSettings('eventsmanager_notify_orderdeliver');
|
$app['dispatcher']->addListener(PhraseaEvents::ORDER_DELIVER, function (Event $event) use (&$triggered) {
|
||||||
|
$triggered = true;
|
||||||
|
});
|
||||||
|
|
||||||
$parameters = [];
|
$parameters = [];
|
||||||
|
|
||||||
foreach ($order->getElements() as $element) {
|
foreach ($order->getElements() as $element) {
|
||||||
$parameters[] = $element->getId();
|
$parameters[] = $element->getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
$response = $this->XMLHTTPRequest('POST', '/prod/order/' . $order->getId() . '/send/', ['elements' => $parameters]);
|
$response = $this->XMLHTTPRequest('POST', '/prod/order/' . $order->getId() . '/send/', ['elements' => $parameters]);
|
||||||
|
|
||||||
$this->assertTrue($response->isOk());
|
$this->assertTrue($response->isOk());
|
||||||
$this->assertEquals('application/json', $response->headers->get('Content-Type'));
|
$this->assertEquals('application/json', $response->headers->get('Content-Type'));
|
||||||
|
$this->assertTrue($triggered, 'Order delivered listener not triggered');
|
||||||
|
|
||||||
$content = json_decode($response->getContent());
|
$content = json_decode($response->getContent());
|
||||||
|
|
||||||
$this->assertTrue(is_object($content));
|
$this->assertTrue(is_object($content));
|
||||||
$this->assertObjectHasAttribute('success', $content, $response->getContent());
|
$this->assertObjectHasAttribute('success', $content, $response->getContent());
|
||||||
$this->assertTrue( ! ! $content->success, $response->getContent());
|
$this->assertTrue( ! ! $content->success, $response->getContent());
|
||||||
@@ -130,10 +141,13 @@ class OrderTest extends \PhraseanetAuthenticatedWebTestCase
|
|||||||
|
|
||||||
public function testDenyOrder()
|
public function testDenyOrder()
|
||||||
{
|
{
|
||||||
|
$app = $this->getApplication();
|
||||||
$order = $this->createOneOrder('I need this pictures');
|
$order = $this->createOneOrder('I need this pictures');
|
||||||
|
|
||||||
$this->mockNotificationDeliverer('Alchemy\Phrasea\Notification\Mail\MailInfoOrderCancelled');
|
$triggered = false;
|
||||||
$this->mockUserNotificationSettings('eventsmanager_notify_ordernotdelivered');
|
$app['dispatcher']->addListener(PhraseaEvents::ORDER_DENY, function (Event $event) use (&$triggered) {
|
||||||
|
$triggered = true;
|
||||||
|
});
|
||||||
|
|
||||||
$parameters = [];
|
$parameters = [];
|
||||||
foreach ($order->getElements() as $element) {
|
foreach ($order->getElements() as $element) {
|
||||||
@@ -141,7 +155,10 @@ class OrderTest extends \PhraseanetAuthenticatedWebTestCase
|
|||||||
}
|
}
|
||||||
$client = $this->getClient();
|
$client = $this->getClient();
|
||||||
$client->request('POST', '/prod/order/' . $order->getId() . '/deny/', ['elements' => $parameters]);
|
$client->request('POST', '/prod/order/' . $order->getId() . '/deny/', ['elements' => $parameters]);
|
||||||
|
|
||||||
$this->assertTrue($client->getResponse()->isRedirect());
|
$this->assertTrue($client->getResponse()->isRedirect());
|
||||||
|
$this->assertTrue($triggered, 'Order denied listener not triggered');
|
||||||
|
|
||||||
$url = parse_url($client->getResponse()->headers->get('location'));
|
$url = parse_url($client->getResponse()->headers->get('location'));
|
||||||
$var = [];
|
$var = [];
|
||||||
parse_str($url['query'], $var);
|
parse_str($url['query'], $var);
|
||||||
@@ -150,19 +167,27 @@ class OrderTest extends \PhraseanetAuthenticatedWebTestCase
|
|||||||
|
|
||||||
public function testDenyOrderJson()
|
public function testDenyOrderJson()
|
||||||
{
|
{
|
||||||
|
$app = $this->getApplication();
|
||||||
$order = $this->createOneOrder('I need this pictures');
|
$order = $this->createOneOrder('I need this pictures');
|
||||||
|
|
||||||
$this->mockNotificationDeliverer('Alchemy\Phrasea\Notification\Mail\MailInfoOrderCancelled');
|
$triggered = false;
|
||||||
$this->mockUserNotificationSettings('eventsmanager_notify_ordernotdelivered');
|
$app['dispatcher']->addListener(PhraseaEvents::ORDER_DENY, function (Event $event) use (&$triggered) {
|
||||||
|
$triggered = true;
|
||||||
|
});
|
||||||
|
|
||||||
$parameters = [];
|
$parameters = [];
|
||||||
foreach ($order->getElements() as $element) {
|
foreach ($order->getElements() as $element) {
|
||||||
$parameters[] = $element->getId();
|
$parameters[] = $element->getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
$response = $this->XMLHTTPRequest('POST', '/prod/order/' . $order->getId() . '/deny/', ['elements' => $parameters]);
|
$response = $this->XMLHTTPRequest('POST', '/prod/order/' . $order->getId() . '/deny/', ['elements' => $parameters]);
|
||||||
|
|
||||||
$this->assertTrue($response->isOk());
|
$this->assertTrue($response->isOk());
|
||||||
$this->assertEquals('application/json', $response->headers->get('Content-Type'));
|
$this->assertEquals('application/json', $response->headers->get('Content-Type'));
|
||||||
|
$this->assertTrue($triggered, 'Order denied listener not triggered');
|
||||||
|
|
||||||
$content = json_decode($response->getContent());
|
$content = json_decode($response->getContent());
|
||||||
|
|
||||||
$this->assertTrue(is_object($content));
|
$this->assertTrue(is_object($content));
|
||||||
$this->assertObjectHasAttribute('success', $content, $response->getContent());
|
$this->assertObjectHasAttribute('success', $content, $response->getContent());
|
||||||
$this->assertTrue( ! ! $content->success, $response->getContent());
|
$this->assertTrue( ! ! $content->success, $response->getContent());
|
||||||
|
|||||||
@@ -689,6 +689,7 @@ abstract class PhraseanetTestCase extends WebTestCase
|
|||||||
self::$DI['app']['notification.deliverer'] = $this->getMockBuilder('Alchemy\Phrasea\Notification\Deliverer')
|
self::$DI['app']['notification.deliverer'] = $this->getMockBuilder('Alchemy\Phrasea\Notification\Deliverer')
|
||||||
->disableOriginalConstructor()
|
->disableOriginalConstructor()
|
||||||
->getMock();
|
->getMock();
|
||||||
|
|
||||||
self::$DI['app']['notification.deliverer']->expects($this->exactly($qty))
|
self::$DI['app']['notification.deliverer']->expects($this->exactly($qty))
|
||||||
->method('deliver')
|
->method('deliver')
|
||||||
->with($this->isInstanceOf($expectedMail), $this->equalTo($receipt));
|
->with($this->isInstanceOf($expectedMail), $this->equalTo($receipt));
|
||||||
|
|||||||
Reference in New Issue
Block a user