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

AmountPolicyValidatorTest   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
wmc 5
lcom 1
cbo 3
dl 0
loc 51
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A testGivenAmountWithinLimits_validationSucceeds() 0 3 1
A smallAmountProvider() 0 9 1
A testGivenAmountTooHigh_validationFails() 0 3 1
A offLimitAmountProvider() 0 9 1
A newAmountValidator() 0 3 1
1
<?php
2
3
declare( strict_types = 1 );
4
5
namespace WMDE\Fundraising\Frontend\Tests\Unit\Validation;
6
7
use WMDE\Fundraising\Frontend\Validation\AmountPolicyValidator;
8
9
/**
10
 * @covers \WMDE\Fundraising\Frontend\Validation\AmountPolicyValidator
11
 *
12
 * @licence GNU GPL v2+
13
 * @author Kai Nissen < [email protected] >
14
 */
15
class AmountPolicyValidatorTest extends \PHPUnit\Framework\TestCase {
16
17
	const INTERVAL_ONCE = 0;
18
	const INTERVAL_MONTHLY = 1;
19
	const INTERVAL_QUARTERLY = 3;
20
	const INTERVAL_SEMIANNUAL = 6;
21
	const INTERVAL_YEARLY = 12;
22
23
	/**
24
	 * @dataProvider smallAmountProvider
25
	 * @param float $amount
26
	 * @param int $interval
27
	 */
28
	public function testGivenAmountWithinLimits_validationSucceeds( float $amount, int $interval ): void {
29
		$this->assertTrue( $this->newAmountValidator()->validate( $amount, $interval )->isSuccessful() );
30
	}
31
32
	public function smallAmountProvider(): array {
33
		return [
34
			[ 750.0, self::INTERVAL_ONCE ],
35
			[ 20.0, self::INTERVAL_MONTHLY ],
36
			[ 100.5, self::INTERVAL_QUARTERLY ],
37
			[ 499.98, self::INTERVAL_SEMIANNUAL ],
38
			[ 999.99, self::INTERVAL_YEARLY ]
39
		];
40
	}
41
42
	/**
43
	 * @dataProvider offLimitAmountProvider
44
	 * @param float $amount
45
	 * @param int $interval
46
	 */
47
	public function testGivenAmountTooHigh_validationFails( float $amount, int $interval ): void {
48
		$this->assertFalse( $this->newAmountValidator()->validate( $amount, $interval )->isSuccessful() );
49
	}
50
51
	public function offLimitAmountProvider(): array {
52
		return [
53
			[ 1750.0, self::INTERVAL_ONCE ],
54
			[ 101.0, self::INTERVAL_MONTHLY ],
55
			[ 250.5, self::INTERVAL_QUARTERLY ],
56
			[ 600, self::INTERVAL_SEMIANNUAL ],
57
			[ 1337, self::INTERVAL_YEARLY ]
58
		];
59
	}
60
61
	private function newAmountValidator(): AmountPolicyValidator {
62
		return new AmountPolicyValidator( 1000, 1000 );
63
	}
64
65
}
66