Completed
Pull Request — master (#16)
by Tim
26:43 queued 23:55
created

CampaignTest   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 101
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 64
dl 0
loc 101
rs 10
c 0
b 0
f 0
wmc 7

7 Methods

Rating   Name   Duplication   Size   Complexity  
A createBuckets() 0 13 1
A returnRandomBucket() 0 2 1
A test_given_time_out_of_date_range_campaign_is_not_active() 0 18 1
A test_given_valid_bucket_id_returns_bucket() 0 10 1
A test_given_no_bucket_id_returns_random_bucket() 0 10 1
A test_given_time_in_the_date_range_campaign_is_active() 0 18 1
A test_given_invalid_bucket_id_returns_random_bucket() 0 10 1
1
<?php
2
3
declare(strict_types = 1);
4
5
namespace WMDE\BannerServer\Tests\Unit\Entity\BannerSelection;
6
7
use WMDE\BannerServer\Entity\BannerSelection\Banner;
8
use WMDE\BannerServer\Entity\BannerSelection\Bucket;
9
use WMDE\BannerServer\Entity\BannerSelection\Campaign;
10
11
class CampaignTest extends \PHPUnit\Framework\TestCase {
12
13
	private function createBuckets(): array {
14
		$buckets = [];
15
		$buckets[] = new Bucket(
16
			'C18_WMDE_Test_ctrl',
17
			new Banner( 'C18_WMDE_Test_ctrl_main' ),
18
			[new Banner( 'C18_WMDE_Test_ctrl_secondary' )]
19
		);
20
		$buckets[] = new Bucket(
21
			'C18_WMDE_Test_var',
22
			new Banner( 'C18_WMDE_Test_var_main' ),
23
			[new Banner( 'C18_WMDE_Test_var_secondary' )]
24
		);
25
		return $buckets;
26
	}
27
28
	public static function returnRandomBucket( array $buckets ): Bucket {
29
		return $buckets[0];
30
	}
31
32
	public function test_given_time_out_of_date_range_campaign_is_not_active() {
33
		$campaign = new Campaign(
34
			'C18_WMDE_Test',
35
			new \DateTime( '2018-10-01 14:00:00' ),
36
			new \DateTime( '2018-10-31 14:00:00' ),
37
			$this->createBuckets()
38
		);
39
		$this->assertTrue(
40
			$campaign->isInActiveDateRange( new \DateTime( '2018-10-01 14:00:00' ) ),
41
			'date given is exactly the start date of the campaign'
42
		);
43
		$this->assertTrue(
44
			$campaign->isInActiveDateRange( new \DateTime( '2018-10-20 14:00:00' ) ),
45
			'date given is between the start and the end of the campaign'
46
		);
47
		$this->assertTrue(
48
			$campaign->isInActiveDateRange( new \DateTime( '2018-10-31 14:00:00' ) ),
49
			'date given is exactly the end date of the campaign'
50
		);
51
52
	}
53
54
	public function test_given_time_in_the_date_range_campaign_is_active() {
55
		$campaign = new Campaign(
56
			'C18_WMDE_Test',
57
			new \DateTime( '2018-10-01 14:00:00' ),
58
			new \DateTime( '2018-10-31 14:00:00' ),
59
			$this->createBuckets()
60
		);
61
		$this->assertFalse(
62
			$campaign->isInActiveDateRange( new \DateTime( '2018-09-22 14:00:00' ) ),
63
			'date given is before the start of the campaign'
64
		);
65
		$this->assertFalse(
66
			$campaign->isInActiveDateRange( new \DateTime( '2018-10-01 13:59:59' ) ),
67
			'date given is before the start of the campaign'
68
		);
69
		$this->assertFalse(
70
			$campaign->isInActiveDateRange( new \DateTime( '2018-10-31 14:00:01' ) ),
71
			'date given is after the end of the campaign'
72
		);
73
74
	}
75
76
	public function test_given_valid_bucket_id_returns_bucket() {
77
		$campaign = new Campaign(
78
			'C18_WMDE_Test',
79
			new \DateTime( '2018-10-01 14:00:00' ),
80
			new \DateTime( '2018-10-31 14:00:00' ),
81
			$this->createBuckets()
82
		);
83
		$this->assertEquals(
84
			$campaign->selectBucket( 'C18_WMDE_Test_var', [ self::class, 'returnRandomBucket' ] )->getIdentifier(),
85
			'C18_WMDE_Test_var'
86
		);
87
	}
88
89
	public function test_given_invalid_bucket_id_returns_random_bucket() {
90
		$campaign = new Campaign(
91
			'C18_WMDE_Test',
92
			new \DateTime( '2018-10-01 14:00:00' ),
93
			new \DateTime( '2018-10-31 14:00:00' ),
94
			$this->createBuckets()
95
		);
96
		$this->assertEquals(
97
			$campaign->selectBucket( 'C18_WMDE_Test_var_666', [ self::class, 'returnRandomBucket' ] )->getIdentifier(),
98
			'C18_WMDE_Test_ctrl'
99
		);
100
	}
101
102
	public function test_given_no_bucket_id_returns_random_bucket() {
103
		$campaign = new Campaign(
104
			'C18_WMDE_Test',
105
			new \DateTime( '2018-10-01 14:00:00' ),
106
			new \DateTime( '2018-10-31 14:00:00' ),
107
			$this->createBuckets()
108
		);
109
		$this->assertEquals(
110
			$campaign->selectBucket( null, [ self::class, 'returnRandomBucket' ] )->getIdentifier(),
111
			'C18_WMDE_Test_ctrl'
112
		);
113
	}
114
}
115