Completed
Push — master ( 00092a...39103d )
by wiese
86:17 queued 21:06
created

persistApplication()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 3
nc 1
nop 1
1
<?php
2
3
declare( strict_types = 1 );
4
5
namespace WMDE\Fundraising\Frontend\MembershipContext\Tests\Integration\DataAccess;
6
7
use Doctrine\ORM\EntityManager;
8
use WMDE\Fundraising\Entities\MembershipApplication;
9
use WMDE\Fundraising\Frontend\MembershipContext\DataAccess\DoctrineApplicationTracker;
10
use WMDE\Fundraising\Frontend\MembershipContext\Tests\Data\ValidMembershipApplication;
11
use WMDE\Fundraising\Frontend\MembershipContext\Tracking\ApplicationTracker;
12
use WMDE\Fundraising\Frontend\MembershipContext\Tracking\MembershipApplicationTrackingInfo;
13
use WMDE\Fundraising\Frontend\Tests\TestEnvironment;
14
15
/**
16
 * @covers \WMDE\Fundraising\Frontend\MembershipContext\DataAccess\DoctrineApplicationTracker
17
 *
18
 * @licence GNU GPL v2+
19
 * @author Kai Nissen < [email protected] >
20
 */
21
class DoctrineMembershipApplicationTrackerTest extends \PHPUnit\Framework\TestCase {
22
23
	/**
24
	 * @var EntityManager
25
	 */
26
	private $entityManager;
27
28
	public function setUp(): void {
29
		$this->entityManager = TestEnvironment::newInstance()->getFactory()->getEntityManager();
30
	}
31
32
	/**
33
	 * @dataProvider validTrackingDataProvider
34
	 */
35
	public function testValidTrackingDataIsProperlyApplied( string $campaignCode, string $keyword ): void {
36
		$application = ValidMembershipApplication::newDoctrineEntity();
37
		$this->persistApplication( $application );
38
39
		$this->newMembershipApplicationTracker()->trackApplication(
40
			$application->getId(),
41
			$this->newMembershipApplicationTrackingInfo( $campaignCode, $keyword )
42
		);
43
44
		$storedApplication = $this->getApplicationById( $application->getId() );
45
46
		$this->assertSame( $keyword, $storedApplication->getDecodedData()['confirmationPage'] );
47
		$this->assertSame( $campaignCode, $storedApplication->getDecodedData()['confirmationPageCampaign'] );
48
	}
49
50
	public function validTrackingDataProvider(): array {
51
		return [
52
			[ 'campaignCode', 'keyword' ],
53
			[ '', 'keyword', 'keyword' ],
54
			[ 'campaignCode', '' ],
55
			[ '', '' ],
56
		];
57
	}
58
59
	private function persistApplication( MembershipApplication $application ): void {
60
		$this->entityManager->persist( $application );
61
		$this->entityManager->flush();
62
	}
63
64
	private function getApplicationById( int $applicationId ): MembershipApplication {
65
		return $this->entityManager->find( MembershipApplication::class, $applicationId );
66
	}
67
68
	private function newMembershipApplicationTracker(): ApplicationTracker {
69
		return new DoctrineApplicationTracker( $this->entityManager );
70
	}
71
72
	private function newMembershipApplicationTrackingInfo( string $campaignCode, string $keyword ): MembershipApplicationTrackingInfo {
73
		return new MembershipApplicationTrackingInfo( $campaignCode, $keyword );
74
	}
75
76
}
77