/** * @dataProvider existingDataProvider * @param bool $existing */ public function testGetStatisticsRecordExisting($existing) { $entity = new \stdClass(); $entityId = 1; $entityClass = get_class($entity); $marketingList = $this->getMockBuilder('OroCRM\\Bundle\\MarketingListBundle\\Entity\\MarketingList')->disableOriginalConstructor()->getMock(); $emailCampaign = $this->getMockBuilder('OroCRM\\Bundle\\CampaignBundle\\Entity\\EmailCampaign')->disableOriginalConstructor()->getMock(); $emailCampaign->expects($this->once())->method('getMarketingList')->will($this->returnValue($marketingList)); $this->doctrineHelper->expects($this->once())->method('getSingleEntityIdentifier')->with($entity)->will($this->returnValue($entityId)); $marketingListItem = $this->getMockBuilder('OroCRM\\Bundle\\MarketingListBundle\\Entity\\MarketingListItem')->disableOriginalConstructor()->getMock(); $marketingListItem->expects($this->any())->method('getId')->willReturn(42); $this->marketingListItemConnector->expects($this->once())->method('getMarketingListItem')->with($marketingList, $entityId)->will($this->returnValue($marketingListItem)); $statisticsRecord = new EmailCampaignStatistics(); $repository = $this->getMockBuilder('\\Doctrine\\Common\\Persistence\\ObjectRepository')->disableOriginalConstructor()->getMock(); $manager = $this->getMockBuilder('\\Doctrine\\Common\\Persistence\\ObjectManager')->disableArgumentCloning()->getMock(); $manager->expects($this->once())->method('getRepository')->with($entityClass)->will($this->returnValue($repository)); $this->doctrineHelper->expects($this->once())->method('getEntityManager')->with($entityClass)->will($this->returnValue($manager)); if ($existing) { $repository->expects($this->once())->method('findOneBy')->with(['emailCampaign' => $emailCampaign, 'marketingListItem' => $marketingListItem])->will($this->returnValue($statisticsRecord)); } else { $repository->expects($this->once())->method('findOneBy')->with(['emailCampaign' => $emailCampaign, 'marketingListItem' => $marketingListItem])->will($this->returnValue(null)); $manager->expects($this->once())->method('persist')->with($this->isInstanceOf('OroCRM\\Bundle\\CampaignBundle\\Entity\\EmailCampaignStatistics')); } $this->connector->setEntityName($entityClass); $actualRecord = $this->connector->getStatisticsRecord($emailCampaign, $entity); if (!$existing) { $this->assertEquals($emailCampaign, $actualRecord->getEmailCampaign(), 'unexpected email campaign'); $this->assertEquals($marketingListItem, $actualRecord->getMarketingListItem(), 'unexpected marketing list item campaign'); } else { $this->assertEquals($statisticsRecord, $actualRecord); } }