Completed
Pull Request — master (#16)
by Tonina
125:10 queued 61:03
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-20 14:00:00' ) ),
41
			'date given is between the start and the end of the campaign'
42
		);
43
	}
44
45
	public function test_given_time_in_the_date_range_campaign_is_active() {
46
		$campaign = new Campaign(
47
			'C18_WMDE_Test',
48
			new \DateTime( '2018-10-01 14:00:00' ),
49
			new \DateTime( '2018-10-31 14:00:00' ),
50
			$this->createBuckets()
51
		);
52
		$this->assertFalse(
53
			$campaign->isInActiveDateRange( new \DateTime( '2018-09-22 14:00:00' ) ),
54
			'date given is before the start of the campaign'
55
		);
56
	}
57
58
	public function test_given_valid_bucket_id_returns_bucket() {
59
		$campaign = new Campaign(
60
			'C18_WMDE_Test',
61
			new \DateTime( '2018-10-01 14:00:00' ),
62
			new \DateTime( '2018-10-31 14:00:00' ),
63
			$this->createBuckets()
64
		);
65
		$this->assertEquals(
66
			$campaign->selectBucket( 'C18_WMDE_Test_var', [ self::class, 'returnRandomBucket' ] )->getIdentifier(),
67
			'C18_WMDE_Test_var'
68
		);
69
	}
70
71
	public function test_given_invalid_bucket_id_returns_random_bucket() {
72
		$campaign = new Campaign(
73
			'C18_WMDE_Test',
74
			new \DateTime( '2018-10-01 14:00:00' ),
75
			new \DateTime( '2018-10-31 14:00:00' ),
76
			$this->createBuckets()
77
		);
78
		$this->assertEquals(
79
			$campaign->selectBucket( 'C18_WMDE_Test_var_666', [ self::class, 'returnRandomBucket' ] )->getIdentifier(),
80
			'C18_WMDE_Test_ctrl'
81
		);
82
	}
83
84
	public function test_given_no_bucket_id_returns_random_bucket() {
85
		$campaign = new Campaign(
86
			'C18_WMDE_Test',
87
			new \DateTime( '2018-10-01 14:00:00' ),
88
			new \DateTime( '2018-10-31 14:00:00' ),
89
			$this->createBuckets()
90
		);
91
		$this->assertEquals(
92
			$campaign->selectBucket( null, [ self::class, 'returnRandomBucket' ] )->getIdentifier(),
93
			'C18_WMDE_Test_ctrl'
94
		);
95
	}
96
}
97