objectManagerMock = $this->getMockBuilder(\Magento\Framework\ObjectManagerInterface::class) ->getMock(); $this->scopeConfigMock = $this->getMockBuilder(\Magento\Framework\App\Config\ScopeConfigInterface::class) ->getMock(); $this->collectionFactoryMock = $this->getMockBuilder( \Magento\Sitemap\Model\ResourceModel\Sitemap\CollectionFactory::class )->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); $this->transportBuilderMock = $this->getMockBuilder(\Magento\Framework\Mail\Template\TransportBuilder::class) ->disableOriginalConstructor() ->getMock(); $this->storeManagerMock = $this->getMockBuilder(\Magento\Store\Model\StoreManagerInterface::class) ->getMock(); $this->inlineTranslationMock = $this->getMockBuilder(\Magento\Framework\Translate\Inline\StateInterface::class) ->getMock(); $this->sitemapCollectionMock = $this->createPartialMock( \Magento\Sitemap\Model\ResourceModel\Sitemap\Collection::class, ['getIterator'] ); $this->sitemapMock = $this->createPartialMock(\Magento\Sitemap\Model\Sitemap::class, ['generateXml']); $this->objectManager = new ObjectManager($this); $this->observer = $this->objectManager->getObject( \Magento\Sitemap\Model\Observer::class, [ 'scopeConfig' => $this->scopeConfigMock, 'collectionFactory' => $this->collectionFactoryMock, 'storeManager' => $this->storeManagerMock, 'transportBuilder' => $this->transportBuilderMock, 'inlineTranslation' => $this->inlineTranslationMock ] ); } public function testScheduledGenerateSitemapsSendsExceptionEmail() { $exception = 'Sitemap Exception'; $transport = $this->createMock(\Magento\Framework\Mail\TransportInterface::class); $this->scopeConfigMock->expects($this->once())->method('isSetFlag')->willReturn(true); $this->collectionFactoryMock->expects($this->once()) ->method('create') ->willReturn($this->sitemapCollectionMock); $this->sitemapCollectionMock->expects($this->any()) ->method('getIterator') ->willReturn(new \ArrayIterator([$this->sitemapMock])); $this->sitemapMock->expects($this->once()) ->method('generateXml') ->willThrowException(new \Exception($exception)); $this->scopeConfigMock->expects($this->at(1)) ->method('getValue') ->with( \Magento\Sitemap\Model\Observer::XML_PATH_ERROR_RECIPIENT, \Magento\Store\Model\ScopeInterface::SCOPE_STORE ) ->willReturn('error-recipient@example.com'); $this->inlineTranslationMock->expects($this->once()) ->method('suspend'); $this->transportBuilderMock->expects($this->once()) ->method('setTemplateIdentifier') ->will($this->returnSelf()); $this->transportBuilderMock->expects($this->once()) ->method('setTemplateOptions') ->with([ 'area' => \Magento\Backend\App\Area\FrontNameResolver::AREA_CODE, 'store' => \Magento\Store\Model\Store::DEFAULT_STORE_ID, ]) ->will($this->returnSelf()); $this->transportBuilderMock->expects($this->once()) ->method('setTemplateVars') ->with(['warnings' => $exception]) ->will($this->returnSelf()); $this->transportBuilderMock->expects($this->once()) ->method('setFrom') ->will($this->returnSelf()); $this->transportBuilderMock->expects($this->once()) ->method('addTo') ->will($this->returnSelf()); $this->transportBuilderMock->expects($this->once()) ->method('getTransport') ->willReturn($transport); $transport->expects($this->once()) ->method('sendMessage'); $this->inlineTranslationMock->expects($this->once()) ->method('resume'); $this->observer->scheduledGenerateSitemaps(); } }