/**
  * getMockEntityManger
  *
  * @param $testCase
  *
  * @return \PHPUnit_Framework_MockObject_MockObject
  */
 public function getMockEntityManger($testCase)
 {
     $result = null;
     if (!empty($testCase['entity'])) {
         $result = new RcmGoogleAnalyticsEntity();
         $result->populate($testCase['entity']);
     }
     $repo = $this->getMockBuilder('\\Doctrine\\ORM\\EntityRepository')->disableOriginalConstructor()->getMock();
     $repo->expects($this->any())->method('findOneBy')->will($this->returnValue($result));
     $service = $this->getMockBuilder('\\Doctrine\\ORM\\EntityManager')->disableOriginalConstructor()->getMock();
     $service->expects($this->any())->method('getRepository')->will($this->returnValue($repo));
     return $service;
 }
 /**
  * testSetGet
  *
  * @return void
  */
 public function testSetGet()
 {
     $entity = new RcmGoogleAnalytics();
     $data = ['id' => 123, 'trackingId' => 'UA00000', 'verificationCode' => 'ggggg', 'siteId' => 321, 'host' => 'test.example.com'];
     $domain = new Domain();
     $domain->setDomainName('test.example.com');
     $data['site'] = new Site();
     $data['site']->setSiteId(3211);
     $data['site']->setDomain($domain);
     $entity->setId($data['id']);
     $this->assertEquals($data['id'], $entity->getId());
     $entity->setTrackingId($data['trackingId']);
     $this->assertEquals($data['trackingId'], $entity->getTrackingId());
     $this->assertTrue($entity->hasTracking());
     $entity->setVerificationCode($data['verificationCode']);
     $this->assertEquals($data['verificationCode'], $entity->getVerificationCode());
     $this->assertTrue($entity->hasVerificationCode());
     $this->assertNull($entity->getHost());
     $siteNoDomain = new Site();
     $siteNoDomain->setSiteId(3311);
     $entity->setSite($siteNoDomain);
     $this->assertNull($entity->getHost());
     $entity->setSite($data['site']);
     $this->assertEquals($data['site'], $entity->getSite());
     $this->assertEquals($data['site']->getSiteId(), $entity->getSiteId());
     $this->assertEquals($data['site']->getDomain()->getDomainName(), $entity->getHost());
     $array = $entity->toArray();
     $this->assertTrue(is_array($array));
     $this->assertEquals($data['host'], $array['host']);
 }
 /**
  * Create a new resource
  *
  * @param  mixed $data
  *
  * @return mixed
  */
 public function create($data)
 {
     if (!$this->hasAccess()) {
         $this->response->setStatusCode(401);
         return new ApiJsonModel(null, 401, $this->translate('Access Denied'));
     }
     $service = $this->getRcmGoogleAnalyticsService();
     $currentSite = $this->getCurrentSite();
     $entity = $service->getSiteAnalyticEntity($currentSite);
     if (!empty($entity)) {
         $this->response->setStatusCode(400);
         return new ApiJsonModel($entity, 400, $this->translate('Analytics already exist for this site'));
     }
     // INPUT VALIDATE
     $inputFilter = new RcmGoogleAnalyticsFilter();
     $inputFilter->setData($data);
     if (!$inputFilter->isValid()) {
         $this->response->setStatusCode(400);
         return new ApiJsonModel($data, 400, $this->translate('Analytics data is not valid'), $inputFilter->getMessages());
     }
     $entity = new RcmGoogleAnalytics();
     $entity->populate($inputFilter->getValues(), ['id', 'site']);
     $entity->setSite($this->getCurrentSite());
     $entityManager = $this->getEntityManager();
     try {
         $entityManager->persist($entity);
         $entityManager->flush($entity);
     } catch (\Exception $exception) {
         $this->response->setStatusCode(400);
         return new ApiJsonModel($entity, 400, $this->translate('Analytics failed to save') . ': ' . $exception->getMessage());
     }
     return new ApiJsonModel($entity);
 }