get('mautic.lead.model.lead'); $lead = $this->createLead('john@doe.email'); $email = $this->createEmail(); $trackingHash = 'tracking_hash_123'; $this->createEmailStat($lead, $email, $trackingHash); $pointAction = $this->createReadEmailAction(5); $this->client->request('GET', '/email/'.$trackingHash.'.gif'); $lead = $leadModel->getEntity($lead->getId()); $this->assertEquals($pointAction->getDelta(), $lead->getPoints()); } public function testPointActionWithGroupReadEmail(): void { /** @var LeadModel $leadModel */ $leadModel = static::getContainer()->get('mautic.lead.model.lead'); $lead = $this->createLead('john@doe.email'); $email = $this->createEmail(); $group = $this->createGroup('Group A'); $trackingHash = 'tracking_hash_123'; $this->createEmailStat($lead, $email, $trackingHash); $pointAction = $this->createReadEmailAction(5, $group); $this->client->request('GET', '/email/'.$trackingHash.'.gif'); $this->em->clear(Lead::class); $lead = $leadModel->getEntity($lead->getId()); $groupScore = $lead->getGroupScores()->first(); $this->assertEquals($pointAction->getDelta(), $groupScore->getScore()); // group point action shouldn't update main contact points $this->assertEquals(0, $lead->getPoints()); } private function createReadEmailAction(int $delta, Group $group = null): Point { $pointAction = new Point(); $pointAction->setName('Read email action'); $pointAction->setDelta($delta); $pointAction->setType('email.open'); if ($group) { $pointAction->setGroup($group); } $this->em->persist($pointAction); $this->em->flush(); return $pointAction; } private function createEmailStat( Lead $lead, Email $email, string $trackingHash ): Stat { /** @var StatRepository $statRepository */ $statRepository = static::getContainer()->get('mautic.email.repository.stat'); $stat = new Stat(); $stat->setTrackingHash($trackingHash); $stat->setEmailAddress($lead->getEmail()); $stat->setLead($lead); $stat->setDateSent(new \DateTime()); $stat->setEmail($email); $statRepository->saveEntity($stat); return $stat; } private function createLead( string $email ): Lead { $lead = new Lead(); $lead->setEmail($email); $this->em->persist($lead); return $lead; } private function createEmail(): Email { $email = new Email(); $email->setName('Test email'); $email->setSubject('Test email subject'); $email->setEmailType('template'); $email->setCustomHtml('