get('mautic.focus.model.focus'); $focus = $this->createFocus('popup'); $focusModel->saveEntity($focus); $leads = [ $this->createLead(), $this->createLead(), ]; $focusModel->addStat($focus, Stat::TYPE_NOTIFICATION, null, $leads[0]); $focusModel->addStat($focus, Stat::TYPE_NOTIFICATION, null, $leads[0]); $focusModel->addStat($focus, Stat::TYPE_NOTIFICATION, null, $leads[1]); $this->client->request(Request::METHOD_GET, "/s/ajax?action=plugin:focus:getViewsCount&focusId={$focus->getId()}", [], [], $this->createAjaxHeaders()); $response = $this->client->getResponse(); $this->assertTrue($response->isOk()); $this->assertSame([ 'success' => 1, 'views' => 3, 'uniqueViews' => 2, ], json_decode($response->getContent(), true)); } public function testClickThroughCount(): void { /** @var FocusModel $focusModel */ $focusModel = static::getContainer()->get('mautic.focus.model.focus'); $focus = $this->createFocus('popup'); $focusModel->saveEntity($focus); $lead1 = $this->createLead(); $lead2 = $this->createLead(); $focusModel->addStat($focus, Stat::TYPE_CLICK, $this->createHit($lead1), $lead1); $focusModel->addStat($focus, Stat::TYPE_CLICK, $this->createHit($lead1), $lead1); $focusModel->addStat($focus, Stat::TYPE_CLICK, $this->createHit($lead2), $lead2); $this->client->request(Request::METHOD_GET, "/s/ajax?action=plugin:focus:getClickThroughCount&focusId={$focus->getId()}", [], [], $this->createAjaxHeaders()); $response = $this->client->getResponse(); $this->assertTrue($response->isOk()); $this->assertSame([ 'success' => 1, 'clickThrough' => 2, ], json_decode($response->getContent(), true)); } private function createHit(Lead $lead): Hit { $hit = new Hit(); $hit->setLead($lead); return $hit; } private function createFocus(string $name): Focus { $focus = new Focus(); $focus->setName($name); $focus->setType('link'); $focus->setStyle('modal'); $focus->setProperties([ 'bar' => [ 'allow_hide' => 1, 'push_page' => 1, 'sticky' => 1, 'size' => 'large', 'placement' => 'top', ], 'modal' => [ 'placement' => 'top', ], 'notification' => [ 'placement' => 'top_left', ], 'page' => [], 'animate' => 0, 'link_activation' => 1, 'colors' => [ 'primary' => '4e5d9d', 'text' => '000000', 'button' => 'fdb933', 'button_text' => 'ffffff', ], 'content' => [ 'headline' => null, 'tagline' => null, 'link_text' => null, 'link_url' => null, 'link_new_window' => 1, 'font' => 'Arial, Helvetica, sans-serif', 'css' => null, ], 'when' => 'immediately', 'timeout' => null, 'frequency' => 'everypage', 'stop_after_conversion' => 1, ]); return $focus; } private function createLead(): Lead { $lead = new Lead(); $lead->setFirstname('Contact'); $lead->setEmail('test@test.com'); $this->em->persist($lead); $this->em->flush(); return $lead; } }