From a22ab943be9a19d92798d4ac6ac2e065d3c3a6e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lys=C3=BD?= Date: Thu, 19 Aug 2021 14:25:01 +0200 Subject: [PATCH] Add integration tests for statistic user agent update [MAILPOET-3736] --- .../Statistics/Track/ClicksTest.php | 105 ++++++++++++++++++ .../Statistics/Track/OpensTest.php | 70 ++++++++++++ 2 files changed, 175 insertions(+) diff --git a/tests/integration/Statistics/Track/ClicksTest.php b/tests/integration/Statistics/Track/ClicksTest.php index 9180b42360..e2195327a1 100644 --- a/tests/integration/Statistics/Track/ClicksTest.php +++ b/tests/integration/Statistics/Track/ClicksTest.php @@ -11,6 +11,7 @@ use MailPoet\Entities\SendingQueueEntity; use MailPoet\Entities\StatisticsClickEntity; use MailPoet\Entities\StatisticsOpenEntity; use MailPoet\Entities\SubscriberEntity; +use MailPoet\Entities\UserAgentEntity; use MailPoet\Models\SendingQueue; use MailPoet\Models\StatisticsClicks; use MailPoet\Models\StatisticsOpens; @@ -179,6 +180,110 @@ class ClicksTest extends \MailPoetTest { expect($click->getUserAgent()->getUserAgent())->equals('User Agent'); } + public function testItUpdateUserAgent(): void { + $clicksRepository = $this->diContainer->get(StatisticsClicksRepository::class); + $data = $this->trackData; + $data->userAgent = 'User Agent'; + $clicks = Stub::construct($this->clicks, [ + $this->settingsController, + new Cookies(), + $this->diContainer->get(Shortcodes::class), + $this->diContainer->get(Opens::class), + $clicksRepository, + $this->diContainer->get(UserAgentsRepository::class), + $this->diContainer->get(LinkShortcodeCategory::class), + ], [ + 'redirectToUrl' => null, + ], $this); + $clicks->track($data); + $trackedClicks = $clicksRepository->findAll(); + expect($trackedClicks)->count(1); + $click = $trackedClicks[0]; + expect($click->getUserAgent()->getUserAgent())->equals('User Agent'); + $data->userAgent = 'User Agent 2'; + $clicks->track($data); + $trackedClicks = $clicksRepository->findAll(); + expect($trackedClicks)->count(1); + $click = $trackedClicks[0]; + expect($click->getUserAgent()->getUserAgent())->equals('User Agent 2'); + } + + public function testItDoesNotOverrideHumanUserAgentWithMachine(): void { + $clicksRepository = $this->diContainer->get(StatisticsClicksRepository::class); + $clicks = Stub::construct($this->clicks, [ + $this->settingsController, + new Cookies(), + $this->diContainer->get(Shortcodes::class), + $this->diContainer->get(Opens::class), + $clicksRepository, + $this->diContainer->get(UserAgentsRepository::class), + $this->diContainer->get(LinkShortcodeCategory::class), + ], [ + 'redirectToUrl' => null, + ], $this); + // Track Human User Agent + $data = $this->trackData; + $humanUserAgentName = 'Human user Agent'; + $data->userAgent = $humanUserAgentName; + $clicks->track($data); + $trackedClicks = $clicksRepository->findAll(); + expect($trackedClicks)->count(1); + $click = $trackedClicks[0]; + $userAgent = $click->getUserAgent(); + $this->assertInstanceOf(UserAgentEntity::class, $userAgent); + expect($userAgent->getUserAgent())->equals($humanUserAgentName); + expect($userAgent->getUserAgentType())->equals(UserAgentEntity::USER_AGENT_TYPE_HUMAN); + // Track Machine User Agent + $machineUserAgentName = UserAgentEntity::MACHINE_USER_AGENTS[0]; + $data->userAgent = $machineUserAgentName; + $clicks->track($data); + $trackedClicks = $clicksRepository->findAll(); + expect($trackedClicks)->count(1); + $click = $trackedClicks[0]; + $userAgent = $click->getUserAgent(); + $this->assertInstanceOf(UserAgentEntity::class, $userAgent); + expect($userAgent->getUserAgent())->equals($humanUserAgentName); + expect($userAgent->getUserAgentType())->equals(UserAgentEntity::USER_AGENT_TYPE_HUMAN); + } + + public function testItOverridesMachineUserAgentWithHuman(): void { + $clicksRepository = $this->diContainer->get(StatisticsClicksRepository::class); + $clicks = Stub::construct($this->clicks, [ + $this->settingsController, + new Cookies(), + $this->diContainer->get(Shortcodes::class), + $this->diContainer->get(Opens::class), + $clicksRepository, + $this->diContainer->get(UserAgentsRepository::class), + $this->diContainer->get(LinkShortcodeCategory::class), + ], [ + 'redirectToUrl' => null, + ], $this); + // Track Machine User Agent + $data = $this->trackData; + $machineUserAgentName = UserAgentEntity::MACHINE_USER_AGENTS[0]; + $data->userAgent = $machineUserAgentName; + $clicks->track($data); + $trackedClicks = $clicksRepository->findAll(); + expect($trackedClicks)->count(1); + $click = $trackedClicks[0]; + $userAgent = $click->getUserAgent(); + $this->assertInstanceOf(UserAgentEntity::class, $userAgent); + expect($userAgent->getUserAgent())->equals($machineUserAgentName); + expect($userAgent->getUserAgentType())->equals(UserAgentEntity::USER_AGENT_TYPE_MACHINE); + // Track Human User Agent + $humanUserAgentName = 'Human user Agent'; + $data->userAgent = $humanUserAgentName; + $clicks->track($data); + $trackedClicks = $clicksRepository->findAll(); + expect($trackedClicks)->count(1); + $click = $trackedClicks[0]; + $userAgent = $click->getUserAgent(); + $this->assertInstanceOf(UserAgentEntity::class, $userAgent); + expect($userAgent->getUserAgent())->equals($humanUserAgentName); + expect($userAgent->getUserAgentType())->equals(UserAgentEntity::USER_AGENT_TYPE_HUMAN); + } + public function testItRedirectsToUrlAfterTracking() { $clicks = Stub::construct($this->clicks, [ $this->settingsController, diff --git a/tests/integration/Statistics/Track/OpensTest.php b/tests/integration/Statistics/Track/OpensTest.php index e2323fee18..c224e13a3f 100644 --- a/tests/integration/Statistics/Track/OpensTest.php +++ b/tests/integration/Statistics/Track/OpensTest.php @@ -193,6 +193,76 @@ class OpensTest extends \MailPoetTest { expect($userAgent->getUserAgent())->equals('User agent3'); } + public function testItDoesNotOverrideHumanUserAgentWithMachine(): void { + $opens = Stub::construct($this->opens, [ + $this->diContainer->get(StatisticsOpensRepository::class), + $this->diContainer->get(UserAgentsRepository::class), + ], [ + 'returnResponse' => null, + ], $this); + // Track Human User Agent + $humanUserAgentName = 'Human User Agent'; + $this->trackData->userAgent = $humanUserAgentName; + $opens->track($this->trackData); + expect(count(StatisticsOpens::findMany()))->equals(1); + $openEntities = $this->statisticsOpensRepository->findAll(); + expect($openEntities)->count(1); + $openEntity = reset($openEntities); + assert($openEntity instanceof StatisticsOpenEntity); + $userAgent = $openEntity->getUserAgent(); + $this->assertInstanceOf(UserAgentEntity::class, $userAgent); + expect($userAgent->getUserAgent())->equals($humanUserAgentName); + expect($userAgent->getUserAgentType())->equals(UserAgentEntity::USER_AGENT_TYPE_HUMAN); + // Track Machine User Agent + $machineUserAgentName = UserAgentEntity::MACHINE_USER_AGENTS[0]; + $this->trackData->userAgent = $machineUserAgentName; + $opens->track($this->trackData); + expect(count(StatisticsOpens::findMany()))->equals(1); + $openEntities = $this->statisticsOpensRepository->findAll(); + expect($openEntities)->count(1); + $openEntity = reset($openEntities); + assert($openEntity instanceof StatisticsOpenEntity); + $userAgent = $openEntity->getUserAgent(); + $this->assertInstanceOf(UserAgentEntity::class, $userAgent); + expect($userAgent->getUserAgent())->equals($humanUserAgentName); + expect($userAgent->getUserAgentType())->equals(UserAgentEntity::USER_AGENT_TYPE_HUMAN); + } + + public function testItOverridesMachineUserAgentWithHuman(): void { + $opens = Stub::construct($this->opens, [ + $this->diContainer->get(StatisticsOpensRepository::class), + $this->diContainer->get(UserAgentsRepository::class), + ], [ + 'returnResponse' => null, + ], $this); + // Track Machine User Agent + $machineUserAgentName = UserAgentEntity::MACHINE_USER_AGENTS[0]; + $this->trackData->userAgent = $machineUserAgentName; + $opens->track($this->trackData); + expect(count(StatisticsOpens::findMany()))->equals(1); + $openEntities = $this->statisticsOpensRepository->findAll(); + expect($openEntities)->count(1); + $openEntity = reset($openEntities); + assert($openEntity instanceof StatisticsOpenEntity); + $userAgent = $openEntity->getUserAgent(); + $this->assertInstanceOf(UserAgentEntity::class, $userAgent); + expect($userAgent->getUserAgent())->equals($machineUserAgentName); + expect($userAgent->getUserAgentType())->equals(UserAgentEntity::USER_AGENT_TYPE_MACHINE); + // Track Human User Agent + $humanUserAgentName = 'Human User Agent'; + $this->trackData->userAgent = $humanUserAgentName; + $opens->track($this->trackData); + expect(count(StatisticsOpens::findMany()))->equals(1); + $openEntities = $this->statisticsOpensRepository->findAll(); + expect($openEntities)->count(1); + $openEntity = reset($openEntities); + assert($openEntity instanceof StatisticsOpenEntity); + $userAgent = $openEntity->getUserAgent(); + $this->assertInstanceOf(UserAgentEntity::class, $userAgent); + expect($userAgent->getUserAgent())->equals($humanUserAgentName); + expect($userAgent->getUserAgentType())->equals(UserAgentEntity::USER_AGENT_TYPE_HUMAN); + } + public function _after() { $this->cleanup(); }