Completed
Pull Request — master (#16)
by Tonina
65:34
created

CampaignTest::returnRandomBucket()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 2
rs 10
c 0
b 0
f 0
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
	public function test_given_time_in_the_date_range_campaign_is_active() {
54
		$campaign = new Campaign(
55
			'C18_WMDE_Test',
56
			new \DateTime( '2018-10-01 14:00:00' ),
57
			new \DateTime( '2018-10-31 14:00:00' ),
58
			$this->createBuckets()
59
		);
60
		$this->assertFalse(
61
			$campaign->isInActiveDateRange( new \DateTime( '2018-10-01 13:59:59' ) ),
62
			'date given is before the start of the campaign'
63
		);
64
		$this->assertFalse(
65
			$campaign->isInActiveDateRange( new \DateTime( '2018-10-31 14:00:01' ) ),
66
			'date given is after the end of the campaign'
67
		);
68
	}
69
70
	public function test_given_valid_bucket_id_returns_bucket() {
71
		$campaign = new Campaign(
72
			'C18_WMDE_Test',
73
			new \DateTime( '2018-10-01 14:00:00' ),
74
			new \DateTime( '2018-10-31 14:00:00' ),
75
			$this->createBuckets()
76
		);
77
		$this->assertEquals(
78
			$campaign->selectBucket( 'C18_WMDE_Test_var', [ self::class, 'returnRandomBucket' ] )->getIdentifier(),
79
			'C18_WMDE_Test_var'
80
		);
81
	}
82
83
	public function test_given_invalid_bucket_id_returns_random_bucket() {
84
		$campaign = new Campaign(
85
			'C18_WMDE_Test',
86
			new \DateTime( '2018-10-01 14:00:00' ),
87
			new \DateTime( '2018-10-31 14:00:00' ),
88
			$this->createBuckets()
89
		);
90
		$this->assertEquals(
91
			$campaign->selectBucket( 'C18_WMDE_Test_var_666', [ self::class, 'returnRandomBucket' ] )->getIdentifier(),
92
			'C18_WMDE_Test_ctrl'
93
		);
94
	}
95
96
	public function test_given_no_bucket_id_returns_random_bucket() {
97
		$campaign = new Campaign(
98
			'C18_WMDE_Test',
99
			new \DateTime( '2018-10-01 14:00:00' ),
100
			new \DateTime( '2018-10-31 14:00:00' ),
101
			$this->createBuckets()
102
		);
103
		$this->assertEquals(
104
			$campaign->selectBucket( null, [ self::class, 'returnRandomBucket' ] )->getIdentifier(),
105
			'C18_WMDE_Test_ctrl'
106
		);
107
	}
108
}
109