getFieldsMap(); $subscriber = (new SubscriberFactory())->create(); $newsletter1 = (new NewsletterFactory())->withSendingQueue()->create(); $newsletter2 = (new NewsletterFactory())->withSendingQueue()->create(); (new NewsletterFactory())->withSendingQueue()->create(); (new StatisticsNewslettersFactory($newsletter1, $subscriber))->withSentAt(new Carbon('-1 week'))->create(); (new StatisticsNewslettersFactory($newsletter2, $subscriber))->withSentAt(new Carbon('-1 day'))->create(); // check definitions $field = $fields['mailpoet:subscriber:email-sent-count']; $this->assertSame('Email — sent count', $field->getName()); $this->assertSame('integer', $field->getType()); $this->assertSame([ 'params' => ['in_the_last'], ], $field->getArgs()); // check values $payload = new SubscriberPayload($subscriber); $this->assertSame(2, $field->getValue($payload)); $this->assertSame(2, $field->getValue($payload, ['in_the_last_seconds' => 3 * WEEK_IN_SECONDS])); $this->assertSame(1, $field->getValue($payload, ['in_the_last_seconds' => 3 * DAY_IN_SECONDS])); $this->assertSame(0, $field->getValue($payload, ['in_the_last_seconds' => 3 * HOUR_IN_SECONDS])); } public function testItCreatesOpenedCountField(): void { $fields = $this->getFieldsMap(); $subscriber = (new SubscriberFactory())->create(); $newsletter1 = (new NewsletterFactory())->withSendingQueue()->create(); $newsletter2 = (new NewsletterFactory())->withSendingQueue()->create(); (new NewsletterFactory())->withSendingQueue()->create(); (new StatisticsOpensFacctory($newsletter1, $subscriber))->create(); // open (new StatisticsOpensFacctory($newsletter2, $subscriber))->create(); // open (new StatisticsOpensFacctory($newsletter1, $subscriber))->withMachineUserAgentType()->create(); // machine open // open dates are filtered by newsletter stats dates (new StatisticsNewslettersFactory($newsletter1, $subscriber))->withSentAt(new Carbon('-1 week'))->create(); (new StatisticsNewslettersFactory($newsletter2, $subscriber))->withSentAt(new Carbon('-1 day'))->create(); // check definitions $field = $fields['mailpoet:subscriber:email-opened-count']; $this->assertSame('Email — opened count', $field->getName()); $this->assertSame('integer', $field->getType()); $this->assertSame([ 'params' => ['in_the_last'], ], $field->getArgs()); // check values $payload = new SubscriberPayload($subscriber); $this->assertSame(2, $field->getValue($payload)); $this->assertSame(2, $field->getValue($payload, ['in_the_last_seconds' => 3 * WEEK_IN_SECONDS])); $this->assertSame(1, $field->getValue($payload, ['in_the_last_seconds' => 3 * DAY_IN_SECONDS])); $this->assertSame(0, $field->getValue($payload, ['in_the_last_seconds' => 3 * HOUR_IN_SECONDS])); } public function testItCreatesMachineOpenedCountField(): void { $fields = $this->getFieldsMap(); $subscriber = (new SubscriberFactory())->create(); $newsletter1 = (new NewsletterFactory())->withSendingQueue()->create(); $newsletter2 = (new NewsletterFactory())->withSendingQueue()->create(); (new NewsletterFactory())->withSendingQueue()->create(); (new StatisticsOpensFacctory($newsletter1, $subscriber))->create(); // open (new StatisticsOpensFacctory($newsletter1, $subscriber))->withMachineUserAgentType()->create(); // machine open (new StatisticsOpensFacctory($newsletter2, $subscriber))->withMachineUserAgentType()->create(); // machine open // open dates are filtered by newsletter stats dates (new StatisticsNewslettersFactory($newsletter1, $subscriber))->withSentAt(new Carbon('-1 week'))->create(); (new StatisticsNewslettersFactory($newsletter2, $subscriber))->withSentAt(new Carbon('-1 day'))->create(); // check definitions $field = $fields['mailpoet:subscriber:email-machine-opened-count']; $this->assertSame('Email — machine opened count', $field->getName()); $this->assertSame('integer', $field->getType()); $this->assertSame([ 'params' => ['in_the_last'], ], $field->getArgs()); // check values $payload = new SubscriberPayload($subscriber); $this->assertSame(2, $field->getValue($payload)); $this->assertSame(2, $field->getValue($payload, ['in_the_last_seconds' => 3 * WEEK_IN_SECONDS])); $this->assertSame(1, $field->getValue($payload, ['in_the_last_seconds' => 3 * DAY_IN_SECONDS])); $this->assertSame(0, $field->getValue($payload, ['in_the_last_seconds' => 3 * HOUR_IN_SECONDS])); } public function testItCreatesClickedCountField(): void { $fields = $this->getFieldsMap(); $subscriber = (new SubscriberFactory())->create(); $newsletter1 = (new NewsletterFactory())->withSendingQueue()->create(); $newsletter2 = (new NewsletterFactory())->withSendingQueue()->create(); (new NewsletterFactory())->withSendingQueue()->create(); $link1 = (new NewsletterLinkFactory($newsletter1))->create(); $link2 = (new NewsletterLinkFactory($newsletter2))->create(); (new StatisticsClicksFactory($link1, $subscriber))->create(); // click 1 (new StatisticsClicksFactory($link2, $subscriber))->create(); // click 2 // click dates are filtered by newsletter stats dates (new StatisticsNewslettersFactory($newsletter1, $subscriber))->withSentAt(new Carbon('-1 week'))->create(); (new StatisticsNewslettersFactory($newsletter2, $subscriber))->withSentAt(new Carbon('-1 day'))->create(); // check definitions $field = $fields['mailpoet:subscriber:email-clicked-count']; $this->assertSame('Email — clicked count', $field->getName()); $this->assertSame('integer', $field->getType()); $this->assertSame([ 'params' => ['in_the_last'], ], $field->getArgs()); // check values $payload = new SubscriberPayload($subscriber); $this->assertSame(2, $field->getValue($payload)); $this->assertSame(2, $field->getValue($payload, ['in_the_last_seconds' => 3 * WEEK_IN_SECONDS])); $this->assertSame(1, $field->getValue($payload, ['in_the_last_seconds' => 3 * DAY_IN_SECONDS])); $this->assertSame(0, $field->getValue($payload, ['in_the_last_seconds' => 3 * HOUR_IN_SECONDS])); } /** @return array */ private function getFieldsMap(): array { $factory = $this->diContainer->get(SubscriberStatisticFieldsFactory::class); $fields = []; foreach ($factory->getFields() as $field) { $fields[$field->getKey()] = $field; } return $fields; } }