Completed
Pull Request — master (#1)
by Tim
79:06 queued 13:58
created

testGivenAddressChangeWithAddress_itIsStoredCorrectly()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 9
nc 1
nop 0
dl 0
loc 11
rs 9.9666
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\Domain\Model\Address;
11
use WMDE\Fundraising\AddressChange\Domain\Model\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 = '2a54c0a1-fc94-4ef8-8b0a-7c2ed8565521';
20
	const VALID_UPDATE_TOKEN_PERSONAL_MEMBERSHIP = 'ce4449f9-8317-41fa-acc3-4a878e26845d';
21
	const VALID_UPDATE_TOKEN_COMPANY_DONATION = 'c52258ba-fed1-476a-a7e5-c721df087c12';
22
	const VALID_UPDATE_TOKEN_COMPANY_MEMBERSHIP = '8d11d2ba-5ec5-4ec8-a08c-0ac7b8654b59';
23
	const INVALID_UPDATE_TOKEN = '72dfed91-fa40-4af0-9e80-c6010ab29cd1';
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
	public function testGivenAddressChangeWithAddress_itIsStoredCorrectly() {
64
		$addressChangeRepository = new DoctrineAddressChangeRepository( $this->em );
65
		$addressChange = AddressChange::createNewPersonAddressChange( null, $this->newPersonalAddress() );
66
		$addressChangeRepository->storeAddressChange( $addressChange );
67
68
		$retrievedAddressChange = $addressChangeRepository->getAddressChangeByUuid( $addressChange->getCurrentIdentifier() );
69
		$this->assertNotNull( $retrievedAddressChange );
70
		$this->assertNotNull( $retrievedAddressChange->getAddress() );
71
		$this->assertNotNull( $addressChange->getAddress() );
72
		$this->assertSame( $addressChange->getCurrentIdentifier(), $retrievedAddressChange->getCurrentIdentifier() );
73
		$this->assertSame( $addressChange->getAddress()->isPersonalAddress(), $retrievedAddressChange->getAddress()->isPersonalAddress() );
74
	}
75
76
	private function storeAddressChange( string $uuid, bool $isPersonal = true ): void {
77
		if ( $isPersonal ) {
78
			$addressChange = AddressChange::createNewPersonAddressChange(
79
				$uuid,
80
				$this->newPersonalAddress()
81
			);
82
		} else {
83
			$addressChange = AddressChange::createNewCompanyAddressChange(
84
				$uuid,
85
				$this->newCompanyAddress()
86
			);
87
		}
88
		$this->em->persist( $addressChange );
89
		$this->em->flush();
90
	}
91
92
	private function retrieveAddressChangeByUuid( string $uuid ): ?AddressChange {
93
		$addressChangeRepository = new DoctrineAddressChangeRepository( $this->em );
94
		return $addressChangeRepository->getAddressChangeByUuid(
95
			$uuid
96
		);
97
	}
98
99
	private function newPersonalAddress(): Address {
100
		return Address::newPersonalAddress(
101
			'Herr',
102
			'Prof. Dr.',
103
			'Test',
104
			'User',
105
			'Teststreet 12345',
106
			'98765',
107
			'Berlin',
108
			'Germany'
109
		);
110
	}
111
112
	private function newCompanyAddress(): Address {
113
		return Address::newCompanyAddress(
114
			'Test Company',
115
			'Teststreet 123',
116
			'324324',
117
			'Not Berlin',
118
			'Somewhere'
119
		);
120
	}
121
}
122