PublisherTest.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\MessageQueue\Test\Unit\Bulk;
  7. /**
  8. * Unit test for Publisher.
  9. */
  10. class PublisherTest extends \PHPUnit\Framework\TestCase
  11. {
  12. /**
  13. * @var \Magento\Framework\MessageQueue\Bulk\ExchangeRepository|\PHPUnit_Framework_MockObject_MockObject
  14. */
  15. private $exchangeRepository;
  16. /**
  17. * @var \Magento\Framework\MessageQueue\EnvelopeFactory|\PHPUnit_Framework_MockObject_MockObject
  18. */
  19. private $envelopeFactory;
  20. /**
  21. * @var \Magento\Framework\MessageQueue\MessageEncoder|\PHPUnit_Framework_MockObject_MockObject
  22. */
  23. private $messageEncoder;
  24. /**
  25. * @var \Magento\Framework\MessageQueue\MessageValidator|\PHPUnit_Framework_MockObject_MockObject
  26. */
  27. private $messageValidator;
  28. /**
  29. * @var \Magento\Framework\MessageQueue\Publisher\ConfigInterface|\PHPUnit_Framework_MockObject_MockObject
  30. */
  31. private $publisherConfig;
  32. /**
  33. * @var \Magento\Framework\MessageQueue\MessageIdGeneratorInterface|\PHPUnit_Framework_MockObject_MockObject
  34. */
  35. private $messageIdGenerator;
  36. /**
  37. * @var \Magento\Framework\MessageQueue\Bulk\Publisher
  38. */
  39. private $publisher;
  40. /**
  41. * Set up.
  42. *
  43. * @return void
  44. */
  45. protected function setUp()
  46. {
  47. $this->exchangeRepository = $this
  48. ->getMockBuilder(\Magento\Framework\MessageQueue\Bulk\ExchangeRepository::class)
  49. ->disableOriginalConstructor()->getMock();
  50. $this->envelopeFactory = $this->getMockBuilder(\Magento\Framework\MessageQueue\EnvelopeFactory::class)
  51. ->setMethods(['create'])
  52. ->disableOriginalConstructor()->getMock();
  53. $this->messageEncoder = $this->getMockBuilder(\Magento\Framework\MessageQueue\MessageEncoder::class)
  54. ->disableOriginalConstructor()->getMock();
  55. $this->messageValidator = $this->getMockBuilder(\Magento\Framework\MessageQueue\MessageValidator::class)
  56. ->disableOriginalConstructor()->getMock();
  57. $this->publisherConfig = $this
  58. ->getMockBuilder(\Magento\Framework\MessageQueue\Publisher\ConfigInterface::class)
  59. ->disableOriginalConstructor()->getMock();
  60. $this->messageIdGenerator = $this
  61. ->getMockBuilder(\Magento\Framework\MessageQueue\MessageIdGeneratorInterface::class)
  62. ->disableOriginalConstructor()->getMock();
  63. $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  64. $this->publisher = $objectManager->getObject(
  65. \Magento\Framework\MessageQueue\Bulk\Publisher::class,
  66. [
  67. 'exchangeRepository' => $this->exchangeRepository,
  68. 'envelopeFactory' => $this->envelopeFactory,
  69. 'messageEncoder' => $this->messageEncoder,
  70. 'messageValidator' => $this->messageValidator,
  71. 'publisherConfig' => $this->publisherConfig,
  72. 'messageIdGenerator' => $this->messageIdGenerator,
  73. ]
  74. );
  75. }
  76. /**
  77. * Test for publish method.
  78. *
  79. * @return void
  80. */
  81. public function testPublish()
  82. {
  83. $messageId = 'message-id-001';
  84. $topicName = 'topic.name';
  85. $message = 'messageBody';
  86. $encodedMessage = 'encodedMessageBody';
  87. $connectionName = 'amqp';
  88. $this->messageValidator->expects($this->once())->method('validate')->with($topicName, $message);
  89. $this->messageEncoder->expects($this->once())
  90. ->method('encode')->with($topicName, $message)->willReturn($encodedMessage);
  91. $envelope = $this->getMockBuilder(\Magento\Framework\MessageQueue\EnvelopeInterface::class)
  92. ->disableOriginalConstructor()->getMock();
  93. $this->messageIdGenerator->expects($this->once())
  94. ->method('generate')->with($topicName)->willReturn($messageId);
  95. $this->envelopeFactory->expects($this->once())->method('create')->with(
  96. [
  97. 'body' => $encodedMessage,
  98. 'properties' => [
  99. 'delivery_mode' => 2,
  100. 'message_id' => $messageId,
  101. ]
  102. ]
  103. )->willReturn($envelope);
  104. $publisher = $this
  105. ->getMockBuilder(\Magento\Framework\MessageQueue\Publisher\Config\PublisherConfigItemInterface::class)
  106. ->disableOriginalConstructor()->getMock();
  107. $this->publisherConfig->expects($this->once())
  108. ->method('getPublisher')->with($topicName)->willReturn($publisher);
  109. $connection = $this
  110. ->getMockBuilder(\Magento\Framework\MessageQueue\Publisher\Config\PublisherConnectionInterface::class)
  111. ->disableOriginalConstructor()->getMock();
  112. $publisher->expects($this->once())->method('getConnection')->with()->willReturn($connection);
  113. $connection->expects($this->once())->method('getName')->with()->willReturn($connectionName);
  114. $exchange = $this
  115. ->getMockBuilder(\Magento\Framework\Amqp\Bulk\Exchange::class)
  116. ->disableOriginalConstructor()->getMock();
  117. $this->exchangeRepository->expects($this->once())
  118. ->method('getByConnectionName')->with($connectionName)->willReturn($exchange);
  119. $exchange->expects($this->once())->method('enqueue')->with($topicName, [$envelope])->willReturn(null);
  120. $this->assertNull($this->publisher->publish($topicName, [$message]));
  121. }
  122. }