Completed
Push — master ( 3c8035...a5658a )
by Tim
63:31
created

retrieveAddressChangeByUuid()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare( strict_types = 1 );
4
5
namespace WMDE\Fundraising\AddressChangeContext\Tests\Unit\DataAccess;
6
7
use Doctrine\ORM\EntityManager;
8
use PHPUnit\Framework\TestCase;
9
use WMDE\Fundraising\AddressChange\DataAccess\DoctrineAddressChangeRepository;
10
use WMDE\Fundraising\AddressChange\Entities\Address;
11
use WMDE\Fundraising\AddressChange\Entities\AddressChange;
12
use WMDE\Fundraising\AddressChangeContext\Tests\TestEnvironment;
13
14
/**
15
 * @covers \WMDE\Fundraising\AddressChange\DataAccess\DoctrineAddressChangeRepository
16
 */
17
class DoctrineAddressChangeRepositoryTest extends TestCase {
18
19
	const VALID_UPDATE_TOKEN_PERSONAL_DONATION = '1ba905fe68e61f3a681d8faf689bfeeb8c942123';
20
	const VALID_UPDATE_TOKEN_PERSONAL_MEMBERSHIP = '2ba905fe68e61f3a681d8faf689bfeeb8c942456';
21
	const VALID_UPDATE_TOKEN_COMPANY_DONATION = '3ba905fe68e61f3a681d8faf689bfeeb8c942789';
22
	const VALID_UPDATE_TOKEN_COMPANY_MEMBERSHIP = '4ba905fe68e61f3a681d8faf689bfeeb8c942666';
23
	const INVALID_UPDATE_TOKEN = 'ThisTokenIsLikeTotallyNotValid1234567890';
24
25
	/** @var EntityManager */
26
	private $em;
27
28
	public function setUp(): void {
29
		$this->em = TestEnvironment::newInstance()->getFactory()->getEntityManager();
30
		parent::setUp();
31
	}
32
33
	public function testGivenValidPersonalDonationUuid_addressChangeIsReturned() {
34
		$this->storeAddressChange( self::VALID_UPDATE_TOKEN_PERSONAL_DONATION, true );
35
		$retrievedAddressChange = $this->retrieveAddressChangeByUuid( self::VALID_UPDATE_TOKEN_PERSONAL_DONATION );
36
37
		$this->assertNotNull( $retrievedAddressChange );
38
		$this->assertSame(
39
			self::VALID_UPDATE_TOKEN_PERSONAL_DONATION,
40
			$retrievedAddressChange->getCurrentIdentifier()
41
		);
42
		$this->assertTrue( $retrievedAddressChange->isPersonalAddress() );
43
	}
44
45
	public function testGivenValidCompanyDonationUuid_addressChangeIsReturned() {
46
		$this->storeAddressChange( self::VALID_UPDATE_TOKEN_COMPANY_DONATION, false );
47
		$retrievedAddressChange = $this->retrieveAddressChangeByUuid( self::VALID_UPDATE_TOKEN_COMPANY_DONATION );
48
49
		$this->assertNotNull( $retrievedAddressChange );
50
		$this->assertSame(
51
			self::VALID_UPDATE_TOKEN_COMPANY_DONATION,
52
			$retrievedAddressChange->getCurrentIdentifier()
53
		);
54
		$this->assertTrue( $retrievedAddressChange->isCompanyAddress() );
55
	}
56
57
	public function testGivenInvalidDonationUuid_nullIsReturned() {
58
		$addressChangeRepository = new DoctrineAddressChangeRepository( $this->em );
59
		$addressChange = $addressChangeRepository->getAddressChangeByUuid( self::INVALID_UPDATE_TOKEN );
60
		$this->assertNull( $addressChange );
61
	}
62
63
	private function storeAddressChange( string $uuid, bool $isPersonal = true ): void {
64
		if ( $isPersonal ) {
65
			$addressChange = AddressChange::createNewPersonAddressChange(
66
				$uuid,
67
				$this->newPersonalAddress()
68
			);
69
		} else {
70
			$addressChange = AddressChange::createNewCompanyAddressChange(
71
				$uuid,
72
				$this->newCompanyAddress()
73
			);
74
		}
75
		$this->em->persist( $addressChange );
76
		$this->em->flush();
77
	}
78
79
	private function retrieveAddressChangeByUuid( string $uuid ): ?AddressChange {
80
		$addressChangeRepository = new DoctrineAddressChangeRepository( $this->em );
81
		return $addressChangeRepository->getAddressChangeByUuid(
82
			$uuid
83
		);
84
	}
85
86
	private function newPersonalAddress(): Address {
87
		return Address::newPersonalAddress(
88
			'Herr',
89
			'Prof. Dr.',
90
			'Test',
91
			'User',
92
			'Teststreet 12345',
93
			'98765',
94
			'Berlin',
95
			'Germany'
96
		);
97
	}
98
99
	private function newCompanyAddress(): Address {
100
		return Address::newCompanyAddress(
101
			'Test Company',
102
			'Teststreet 123',
103
			'324324',
104
			'Not Berlin',
105
			'Somewhere'
106
		);
107
	}
108
}
109