commerce_ajax_cart_message-8.x-1.0/tests/src/Unit/MessageRemovedTest.php
tests/src/Unit/MessageRemovedTest.php
<?php
namespace Drupal\Tests\commerce_ajax_cart_message\Unit;
use Drupal\commerce\PurchasableEntityInterface;
use Drupal\commerce_ajax_cart_message\EventSubscriber\CommerceAjaxCartMessageSubscriber;
use Drupal\commerce_cart\Event\CartEntityAddEvent;
use Drupal\commerce_order\Entity\OrderInterface;
use Drupal\commerce_order\Entity\OrderItemInterface;
use Drupal\commerce_order\Entity\OrderType;
use Drupal\commerce_order\OrderStorage;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Messenger\Messenger;
use Drupal\Core\Routing\UrlGenerator;
use Drupal\Core\StringTranslation\TranslationInterface;
use Drupal\Tests\UnitTestCase;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
/**
* Test.
*
* @group commerce_ajax_cart_message
*/
class MessageRemovedTest extends UnitTestCase {
/**
* {@inheritdoc}
*/
public function setUp() : void {
parent::setUp();
$container = new ContainerBuilder();
$container->set('url_generator', $this->createMock(UrlGenerator::class));
\Drupal::setContainer($container);
}
/**
* Helper.
*/
protected function getRequestStack($is_ajax = FALSE) {
$mock_request = $this->createMock(Request::class);
$mock_request->method('isXmlHttpRequest')
->willReturn($is_ajax);
$mock_request_stack = $this->createMock(RequestStack::class);
$mock_request_stack->method('getCurrentRequest')
->willReturn($mock_request);
return $mock_request_stack;
}
/**
* Helper.
*/
protected function getMessenger($is_ajax) {
$mock_messenger = $this->createMock(Messenger::class);
$mock_messenger->expects($is_ajax ? $this->never() : $this->once())
->method('addMessage');
return $mock_messenger;
}
/**
* Helper.
*/
protected function getEntityTypeManager() {
$mock_order_type = $this->createMock(OrderType::class);
$mock_order_type->method('getThirdPartySetting')->with('commerce_cart', 'enable_cart_message', TRUE)
->willReturn(TRUE);
$mock_order_storage = $this->createMock(OrderStorage::class);
$mock_order_storage->method('load')
->willReturn($mock_order_type);
$mock_entity_type_manager = $this->createMock(EntityTypeManagerInterface::class);
$mock_entity_type_manager->method('getStorage')
->willReturn($mock_order_storage);
return $mock_entity_type_manager;
}
/**
* Test that message is displayed and removed based on the ajax.
*
* @dataProvider getAjaxVariations
*/
public function testMessageLogic($is_ajax) {
$mock_messenger = $this->getMessenger($is_ajax);
$mock_translation = $this->createMock(TranslationInterface::class);
$mock_request_stack = $this->getRequestStack($is_ajax);
$mock_entity_type_manager = $this->getEntityTypeManager();
$subscriber = new CommerceAjaxCartMessageSubscriber($mock_messenger, $mock_translation, $mock_entity_type_manager, $mock_entity_type_manager);
$subscriber->setCurrentRequest($mock_request_stack);
$order = $this->createMock(OrderInterface::class);
$entity = $this->createMock(PurchasableEntityInterface::class);
$order_item = $this->createMock(OrderItemInterface::class);
$event = new CartEntityAddEvent($order, $entity, 1, $order_item);
$subscriber->displayAddToCartMessage($event);
}
/**
* A dataprovider.
*/
public function getAjaxVariations() {
return [
[TRUE],
[FALSE],
];
}
}
