Completed
Pull Request — master (#971)
by wiese
94:17 queued 29:21
created

testFunkySettingsNotValidatedButHarmless()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 12
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 8
nc 1
nop 0
1
<?php
2
3
declare( strict_types = 1 );
4
5
namespace WMDE\Fundraising\Frontend\Tests\Unit\Presentation;
6
7
use WMDE\Fundraising\Frontend\Presentation\PaymentTypesSettings;
8
use PHPUnit\Framework\TestCase;
9
use InvalidArgumentException;
10
11
/**
12
 * @covers \WMDE\Fundraising\Frontend\Presentation\PaymentTypesSettings
13
 */
14
class PaymentTypesSettingsTest extends TestCase {
15
16
	public function testEnabledForDonation(): void {
17
		$settings = new PaymentTypesSettings( [
18
			'a' => [
19
				PaymentTypesSettings::PURPOSE_DONATION => true,
20
				PaymentTypesSettings::PURPOSE_MEMBERSHIP => true
21
			],
22
			'b' => [
23
				PaymentTypesSettings::PURPOSE_DONATION => false,
24
				PaymentTypesSettings::PURPOSE_MEMBERSHIP => true
25
			],
26
			'c' => [
27
				PaymentTypesSettings::PURPOSE_DONATION => true,
28
				PaymentTypesSettings::PURPOSE_MEMBERSHIP => false
29
			],
30
			'd' => [
31
				PaymentTypesSettings::PURPOSE_DONATION => false,
32
				PaymentTypesSettings::PURPOSE_MEMBERSHIP => false
33
			]
34
		] );
35
		$this->assertSame( [ 'a', 'c' ], $settings->getEnabledForDonation() );
36
	}
37
38
	public function testEnabledForMembershipApplication(): void {
39
		$settings = new PaymentTypesSettings( [
40
			'd' => [
41
				PaymentTypesSettings::PURPOSE_DONATION => true,
42
				PaymentTypesSettings::PURPOSE_MEMBERSHIP => true
43
			],
44
			'e' => [
45
				PaymentTypesSettings::PURPOSE_DONATION => true,
46
				PaymentTypesSettings::PURPOSE_MEMBERSHIP => false
47
			],
48
			'f' => [
49
				PaymentTypesSettings::PURPOSE_DONATION => false,
50
				PaymentTypesSettings::PURPOSE_MEMBERSHIP => true
51
			],
52
		] );
53
		$this->assertSame( [ 'd', 'f' ], $settings->getEnabledForMembershipApplication() );
54
	}
55
56
	public function testSettingsOnlyTrueWhenStriclySo(): void {
57
		$settings = new PaymentTypesSettings( [
58
			'a' => [
59
				PaymentTypesSettings::PURPOSE_DONATION => 1,
60
				PaymentTypesSettings::PURPOSE_MEMBERSHIP => 'yes'
61
			],
62
			'b' => [
63
				PaymentTypesSettings::PURPOSE_DONATION => true,
64
				PaymentTypesSettings::PURPOSE_MEMBERSHIP => true
65
			],
66
		] );
67
		$this->assertSame( [ 'b' ], $settings->getEnabledForDonation() );
68
		$this->assertSame( [ 'b' ], $settings->getEnabledForMembershipApplication() );
69
	}
70
71
	public function testDisablePurposeForOneType(): void {
72
		$settings = new PaymentTypesSettings( [
73
			'BEZ' => [
74
				PaymentTypesSettings::PURPOSE_DONATION => true,
75
				PaymentTypesSettings::PURPOSE_MEMBERSHIP => true
76
			],
77
			'UEB' => [
78
				PaymentTypesSettings::PURPOSE_DONATION => true,
79
				PaymentTypesSettings::PURPOSE_MEMBERSHIP => true
80
			],
81
			'MCP' => [
82
				PaymentTypesSettings::PURPOSE_DONATION => true,
83
				PaymentTypesSettings::PURPOSE_MEMBERSHIP => true
84
			],
85
			'PPL' => [
86
				PaymentTypesSettings::PURPOSE_DONATION => true,
87
				PaymentTypesSettings::PURPOSE_MEMBERSHIP => true
88
			],
89
			'SUB' => [
90
				PaymentTypesSettings::PURPOSE_DONATION => true,
91
				PaymentTypesSettings::PURPOSE_MEMBERSHIP => true
92
			]
93
		] );
94
		$settings->updateSetting( 'SUB', PaymentTypesSettings::PURPOSE_DONATION, false );
95
		$this->assertSame( [ 'BEZ', 'UEB', 'MCP', 'PPL' ], $settings->getEnabledForDonation() );
96
	}
97
98
	/**
99
	 * @expectedException InvalidArgumentException
100
	 * @expectedExceptionMessage Can not update setting of unknown paymentType 'IPSUM'.
101
	 */
102
	public function testUpdateSettingWithUnknownPaymentTypeThrowsException(): void {
103
		$settings = new PaymentTypesSettings( [
104
			'dolor' => [
105
				PaymentTypesSettings::PURPOSE_DONATION => true,
106
				PaymentTypesSettings::PURPOSE_MEMBERSHIP => true
107
			]
108
		] );
109
		$settings->updateSetting( 'IPSUM', PaymentTypesSettings::PURPOSE_DONATION, false );
110
	}
111
112
	/**
113
	 * @expectedException InvalidArgumentException
114
	 * @expectedExceptionMessage Can not update setting of unknown purpose 'foo'.
115
	 */
116
	public function testUpdateSettingWithUnknownPurposeThrowsException(): void {
117
		$settings = new PaymentTypesSettings( [
118
			'dolor' => [
119
				PaymentTypesSettings::PURPOSE_DONATION => true,
120
				PaymentTypesSettings::PURPOSE_MEMBERSHIP => true
121
			]
122
		] );
123
		$settings->updateSetting( 'dolor', 'foo', false );
124
	}
125
126
	public function testFunkySettingsNotValidatedButHarmless(): void {
127
		$settings = new PaymentTypesSettings( [
128
			'ff' => [
129
				'gg' => 7
130
			],
131
			2 => [
132
				'thing' => [ 'ignored' ]
133
			]
134
		] );
135
		$this->assertSame( [], $settings->getEnabledForDonation() );
136
		$this->assertSame( [], $settings->getEnabledForMembershipApplication() );
137
	}
138
139
}
140