Completed
Pull Request — master (#63)
by Jeroen De
02:24
created

testWhenModifyingTheDataObject_modificationsAreReflected()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 23
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 23
rs 9.0856
cc 1
eloc 15
nc 1
nop 0
1
<?php
2
3
namespace WMDE\Fundraising\Store\Tests;
4
5
use WMDE\Fundraising\Entities\Donation;
6
use WMDE\Fundraising\Store\DonationData;
7
8
/**
9
 * @covers WMDE\Fundraising\Entities\Donation
10
 *
11
 * @licence GNU GPL v2+
12
 * @author Jeroen De Dauw < [email protected] >
13
 */
14
class DonationTest extends \PHPUnit_Framework_TestCase {
15
16
	public function testDataEncodingAndDecodingRoundtrips() {
17
		$donation = new Donation();
18
19
		$someData = [
20
			'nyan' => 'cat',
21
			'foo' => null,
22
			'bar' => 9000.01,
23
			'baz' => [ true ]
24
		];
25
26
		$donation->encodeAndSetData( $someData );
27
28
		$this->assertSame( $someData, $donation->getDecodedData() );
29
	}
30
31
	public function testGivenNoData_getDecodedDataReturnsEmptyArray() {
32
		$donation = new Donation();
33
34
		$this->assertSame( [], $donation->getDecodedData() );
35
	}
36
37
	public function testWhenSettingIdToAnInteger_getIdReturnsIt() {
38
		$donation = new Donation();
39
		$donation->setId( 1337 );
40
41
		$this->assertSame( 1337, $donation->getId() );
42
	}
43
44
	public function testWhenSettingIdToNull_getIdReturnsNull() {
45
		$donation = new Donation();
46
		$donation->setId( 1337 );
47
		$donation->setId( null );
48
49
		$this->assertNull( $donation->getId() );
50
	}
51
52
	public function testWhenIdIsNotSet_getIdReturnsNull() {
53
		$donation = new Donation();
54
55
		$this->assertNull( $donation->getId() );
56
	}
57
58
	public function testGivenNoData_getDataObjectReturnsObjectWithNullValues() {
59
		$donation = new Donation();
60
61
		$this->assertNull( $donation->getDataObject()->getToken() );
62
		$this->assertNull( $donation->getDataObject()->getUpdateToken() );
63
		$this->assertNull( $donation->getDataObject()->getUpdateTokenExpiry() );
64
	}
65
66
	public function testGivenData_getDataObjectReturnsTheValues() {
67
		$donation = new Donation();
68
		$donation->encodeAndSetData( [
69
			'token' => 'foo',
70
			'utoken' => 'bar',
71
			'uexpiry' => 'baz',
72
		] );
73
74
		$this->assertSame( 'foo', $donation->getDataObject()->getToken() );
75
		$this->assertSame( 'bar', $donation->getDataObject()->getUpdateToken() );
76
		$this->assertSame( 'baz', $donation->getDataObject()->getUpdateTokenExpiry() );
77
	}
78
79
	public function testWhenProvidingData_setDataObjectSetsData() {
80
		$data = new DonationData();
81
		$data->setToken( 'foo' );
82
		$data->setUpdateToken( 'bar' );
83
		$data->setUpdateTokenExpiry( 'baz' );
84
85
		$donation = new Donation();
86
		$donation->setDataObject( $data );
87
88
		$this->assertSame(
89
			[
90
				'token' => 'foo',
91
				'utoken' => 'bar',
92
				'uexpiry' => 'baz',
93
			],
94
			$donation->getDecodedData()
95
		);
96
	}
97
98
	public function testWhenProvidingNullData_setObjectDoesNotSetFields() {
99
		$donation = new Donation();
100
		$donation->setDataObject( new DonationData() );
101
102
		$this->assertSame(
103
			[],
104
			$donation->getDecodedData()
105
		);
106
	}
107
108
	public function testWhenDataAlreadyExists_setDataObjectRetainsAndUpdatesData() {
109
		$donation = new Donation();
110
		$donation->encodeAndSetData( [
111
			'nyan' => 'cat',
112
			'token' => 'wee',
113
			'pink' => 'fluffy',
114
		] );
115
116
		$data = new DonationData();
117
		$data->setToken( 'foo' );
118
		$data->setUpdateToken( 'bar' );
119
120
		$donation->setDataObject( $data );
121
122
		$this->assertSame(
123
			[
124
				'nyan' => 'cat',
125
				'token' => 'foo',
126
				'pink' => 'fluffy',
127
				'utoken' => 'bar',
128
			],
129
			$donation->getDecodedData()
130
		);
131
	}
132
133
	public function testWhenModifyingTheDataObject_modificationsAreReflected() {
134
		$donation = new Donation();
135
		$donation->encodeAndSetData( [
136
			'nyan' => 'cat',
137
			'token' => 'wee',
138
			'pink' => 'fluffy',
139
		] );
140
141
		$donation->modifyDataObject( function( DonationData $data ) {
142
			$data->setToken( 'foo' );
143
			$data->setUpdateToken( 'bar' );
144
		} );
145
146
		$this->assertSame(
147
			[
148
				'nyan' => 'cat',
149
				'token' => 'foo',
150
				'pink' => 'fluffy',
151
				'utoken' => 'bar',
152
			],
153
			$donation->getDecodedData()
154
		);
155
	}
156
157
}
158