Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
PublisherTest.php
Go to the documentation of this file.
1 <?php
8 
12 class PublisherTest extends \PHPUnit\Framework\TestCase
13 {
17  private $exchangeRepository;
18 
22  private $envelopeFactory;
23 
27  private $messageEncoder;
28 
32  private $messageValidator;
33 
37  private $publisherConfig;
38 
42  private $messageIdGenerator;
43 
47  private $publisher;
48 
54  protected function setUp()
55  {
56  $this->exchangeRepository = $this
57  ->getMockBuilder(\Magento\Framework\MessageQueue\Bulk\ExchangeRepository::class)
58  ->disableOriginalConstructor()->getMock();
59  $this->envelopeFactory = $this->getMockBuilder(\Magento\Framework\MessageQueue\EnvelopeFactory::class)
60  ->setMethods(['create'])
61  ->disableOriginalConstructor()->getMock();
62  $this->messageEncoder = $this->getMockBuilder(\Magento\Framework\MessageQueue\MessageEncoder::class)
63  ->disableOriginalConstructor()->getMock();
64  $this->messageValidator = $this->getMockBuilder(\Magento\Framework\MessageQueue\MessageValidator::class)
65  ->disableOriginalConstructor()->getMock();
66  $this->publisherConfig = $this
67  ->getMockBuilder(\Magento\Framework\MessageQueue\Publisher\ConfigInterface::class)
68  ->disableOriginalConstructor()->getMock();
69  $this->messageIdGenerator = $this
70  ->getMockBuilder(\Magento\Framework\MessageQueue\MessageIdGeneratorInterface::class)
71  ->disableOriginalConstructor()->getMock();
72 
73  $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
74  $this->publisher = $objectManager->getObject(
75  \Magento\Framework\MessageQueue\Bulk\Publisher::class,
76  [
77  'exchangeRepository' => $this->exchangeRepository,
78  'envelopeFactory' => $this->envelopeFactory,
79  'messageEncoder' => $this->messageEncoder,
80  'messageValidator' => $this->messageValidator,
81  'publisherConfig' => $this->publisherConfig,
82  'messageIdGenerator' => $this->messageIdGenerator,
83  ]
84  );
85  }
86 
92  public function testPublish()
93  {
94  $messageId = 'message-id-001';
95  $topicName = 'topic.name';
96  $message = 'messageBody';
97  $encodedMessage = 'encodedMessageBody';
98  $connectionName = 'amqp';
99  $this->messageValidator->expects($this->once())->method('validate')->with($topicName, $message);
100  $this->messageEncoder->expects($this->once())
101  ->method('encode')->with($topicName, $message)->willReturn($encodedMessage);
102  $envelope = $this->getMockBuilder(\Magento\Framework\MessageQueue\EnvelopeInterface::class)
103  ->disableOriginalConstructor()->getMock();
104  $this->messageIdGenerator->expects($this->once())
105  ->method('generate')->with($topicName)->willReturn($messageId);
106  $this->envelopeFactory->expects($this->once())->method('create')->with(
107  [
108  'body' => $encodedMessage,
109  'properties' => [
110  'delivery_mode' => 2,
111  'message_id' => $messageId,
112  ]
113  ]
114  )->willReturn($envelope);
115  $publisher = $this
116  ->getMockBuilder(\Magento\Framework\MessageQueue\Publisher\Config\PublisherConfigItemInterface::class)
117  ->disableOriginalConstructor()->getMock();
118  $this->publisherConfig->expects($this->once())
119  ->method('getPublisher')->with($topicName)->willReturn($publisher);
120  $connection = $this
121  ->getMockBuilder(\Magento\Framework\MessageQueue\Publisher\Config\PublisherConnectionInterface::class)
122  ->disableOriginalConstructor()->getMock();
123  $publisher->expects($this->once())->method('getConnection')->with()->willReturn($connection);
124  $connection->expects($this->once())->method('getName')->with()->willReturn($connectionName);
125  $exchange = $this
126  ->getMockBuilder(\Magento\Framework\Amqp\Bulk\Exchange::class)
127  ->disableOriginalConstructor()->getMock();
128  $this->exchangeRepository->expects($this->once())
129  ->method('getByConnectionName')->with($connectionName)->willReturn($exchange);
130  $exchange->expects($this->once())->method('enqueue')->with($topicName, [$envelope])->willReturn(null);
131  $this->assertNull($this->publisher->publish($topicName, [$message]));
132  }
133 }
$objectManager
Definition: bootstrap.php:17
$message
$connection
Definition: bulk.php:13