PublisherTest.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  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;
  7. use Magento\Framework\Amqp\Config as AmqpConfig;
  8. use Magento\Framework\MessageQueue\Envelope;
  9. use Magento\Framework\MessageQueue\EnvelopeFactory;
  10. use Magento\Framework\MessageQueue\ExchangeRepository;
  11. use Magento\Framework\MessageQueue\MessageEncoder;
  12. use Magento\Framework\MessageQueue\MessageValidator;
  13. use Magento\Framework\MessageQueue\Publisher;
  14. use Magento\Framework\MessageQueue\Publisher\Config\PublisherConfigItem;
  15. use Magento\Framework\MessageQueue\Publisher\Config\PublisherConnection;
  16. use Magento\Framework\MessageQueue\Publisher\ConfigInterface as PublisherConfig;
  17. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
  18. use Magento\MysqlMq\Model\Driver\Exchange;
  19. /**
  20. * Class PublisherTest @covers \Magento\Framework\MessageQueue\Publisher
  21. */
  22. class PublisherTest extends \PHPUnit\Framework\TestCase
  23. {
  24. /**
  25. * Test subject.
  26. *
  27. * @var Publisher
  28. */
  29. private $publisher;
  30. /**
  31. * Publisher config mock.
  32. *
  33. * @var PublisherConfig|\PHPUnit_Framework_MockObject_MockObject
  34. */
  35. private $publisherConfig;
  36. /**
  37. * Amqp config mock.
  38. *
  39. * @var AmqpConfig|\PHPUnit_Framework_MockObject_MockObject
  40. */
  41. private $amqpConfig;
  42. /**
  43. * Message validator mock.
  44. *
  45. * @var MessageValidator|\PHPUnit_Framework_MockObject_MockObject
  46. */
  47. private $messageValidator;
  48. /**
  49. * Message encoder mock.
  50. *
  51. * @var MessageEncoder|\PHPUnit_Framework_MockObject_MockObject
  52. */
  53. private $messageEncoder;
  54. /**
  55. * Exchange repository mock.
  56. *
  57. * @var ExchangeRepository|\PHPUnit_Framework_MockObject_MockObject
  58. */
  59. private $exchangeRepository;
  60. /**
  61. * Envelope factory mock.
  62. *
  63. * @var EnvelopeFactory|\PHPUnit_Framework_MockObject_MockObject
  64. */
  65. private $envelopeFactory;
  66. /**
  67. * @inheritdoc
  68. */
  69. protected function setUp()
  70. {
  71. $this->publisherConfig = $this->getMockBuilder(PublisherConfig::class)
  72. ->disableOriginalConstructor()
  73. ->getMock();
  74. $this->amqpConfig = $this->getMockBuilder(AmqpConfig::class)
  75. ->disableOriginalConstructor()
  76. ->getMock();
  77. $this->messageValidator = $this->getMockBuilder(MessageValidator::class)
  78. ->disableOriginalConstructor()
  79. ->getMock();
  80. $this->messageEncoder = $this->getMockBuilder(MessageEncoder::class)
  81. ->disableOriginalConstructor()
  82. ->getMock();
  83. $this->exchangeRepository = $this->getMockBuilder(ExchangeRepository::class)
  84. ->disableOriginalConstructor()
  85. ->getMock();
  86. $this->envelopeFactory = $this->getMockBuilder(EnvelopeFactory::class)
  87. ->disableOriginalConstructor()
  88. ->getMock();
  89. $objectManager = new ObjectManager($this);
  90. $this->publisher = $objectManager->getObject(
  91. Publisher::class,
  92. [
  93. 'messageValidator' => $this->messageValidator,
  94. 'envelopeFactory' => $this->envelopeFactory,
  95. 'messageEncoder' => $this->messageEncoder,
  96. 'exchangeRepository' => $this->exchangeRepository,
  97. ]
  98. );
  99. $objectManager->setBackwardCompatibleProperty($this->publisher, 'publisherConfig', $this->publisherConfig);
  100. $objectManager->setBackwardCompatibleProperty($this->publisher, 'amqpConfig', $this->amqpConfig);
  101. }
  102. /**
  103. * @covers \Magento\Framework\MessageQueue\Publisher::publish()
  104. */
  105. public function testPublish()
  106. {
  107. $topicName = 'tesTopicName';
  108. $data = ['testData'];
  109. $encodedData = 'testEncodedData';
  110. $body = 'testBody';
  111. $envelope = new Envelope($body);
  112. $exchange = $this->getMockBuilder(Exchange::class)
  113. ->disableOriginalConstructor()
  114. ->getMock();
  115. $exchange->expects(self::once())
  116. ->method('enqueue')
  117. ->with(self::identicalTo($topicName), self::identicalTo($envelope))
  118. ->willReturn(null);
  119. $connection = $this->getMockBuilder(PublisherConnection::class)
  120. ->disableOriginalConstructor()
  121. ->getMock();
  122. $connection->expects(self::once())
  123. ->method('getName')
  124. ->willReturn('amqp');
  125. $publisher = $this->getMockBuilder(PublisherConfigItem::class)
  126. ->disableOriginalConstructor()
  127. ->getMock();
  128. $publisher->expects(self::once())
  129. ->method('getConnection')
  130. ->willReturn($connection);
  131. $this->messageValidator->expects(self::once())
  132. ->method('validate');
  133. $this->messageEncoder->expects(self::once())
  134. ->method('encode')
  135. ->with(self::identicalTo($topicName), self::identicalTo($data))
  136. ->willReturn($encodedData);
  137. $this->envelopeFactory->expects(self::once())
  138. ->method('create')
  139. ->willReturn($envelope);
  140. $this->publisherConfig->expects(self::once())
  141. ->method('getPublisher')
  142. ->with($topicName)
  143. ->willReturn($publisher);
  144. $this->amqpConfig->expects(self::once())
  145. ->method('getValue')
  146. ->with(AmqpConfig::HOST)
  147. ->willReturn('');
  148. $this->exchangeRepository->expects(self::once())
  149. ->method('getByConnectionName')
  150. ->with('db')
  151. ->willReturn($exchange);
  152. self::assertNull($this->publisher->publish($topicName, $data));
  153. }
  154. }