Passed
Push — master ( 7d7cf1...424d8c )
by Gabriel
37s queued 10s
created

CampaignTest::createBuckets()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 10
nc 1
nop 0
dl 0
loc 13
rs 9.9332
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
A CampaignTest::getControlBucket() 0 5 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
use WMDE\BannerServer\Tests\Utils\FakeRandomIntegerGenerator;
11
12
/**
13
 * @covers \WMDE\BannerServer\Entity\BannerSelection\Campaign
14
 * Class CampaignTest
15
 */
16
class CampaignTest extends \PHPUnit\Framework\TestCase {
17
18
	private function getControlBucket(): Bucket {
19
		return new Bucket(
20
			'C18_WMDE_Test_ctrl',
21
			new Banner( 'C18_WMDE_Test_ctrl_main' ),
22
			new Banner( 'C18_WMDE_Test_ctrl_secondary' )
23
		);
24
	}
25
26
	private function getVariantBucket(): Bucket {
27
		return new Bucket(
28
			'C18_WMDE_Test_var',
29
			new Banner( 'C18_WMDE_Test_var_main' ),
30
			new Banner( 'C18_WMDE_Test_var_secondary' )
31
		);
32
	}
33
34
	public function test_given_time_out_of_date_range_then_campaign_is_not_active() {
35
		$campaign = new Campaign(
36
			'C18_WMDE_Test',
37
			new \DateTime( '2018-10-01 14:00:00' ),
38
			new \DateTime( '2018-10-31 14:00:00' ),
39
			1,
40
			new FakeRandomIntegerGenerator( 1 ),
41
			$this->getControlBucket(),
42
			$this->getVariantBucket()
43
		);
44
		$this->assertTrue(
45
			$campaign->isInActiveDateRange( new \DateTime( '2018-10-01 14:00:00' ) ),
46
			'date given is exactly the start date of the campaign'
47
		);
48
		$this->assertTrue(
49
			$campaign->isInActiveDateRange( new \DateTime( '2018-10-20 14:00:00' ) ),
50
			'date given is between the start and the end of the campaign'
51
		);
52
		$this->assertTrue(
53
			$campaign->isInActiveDateRange( new \DateTime( '2018-10-31 14:00:00' ) ),
54
			'date given is exactly the end date of the campaign'
55
		);
56
57
	}
58
59
	public function test_given_time_in_the_date_range_then_campaign_is_active() {
60
		$campaign = new Campaign(
61
			'C18_WMDE_Test',
62
			new \DateTime( '2018-10-01 14:00:00' ),
63
			new \DateTime( '2018-10-31 14:00:00' ),
64
			1,
65
			new FakeRandomIntegerGenerator( 1 ),
66
			$this->getControlBucket(),
67
			$this->getVariantBucket()
68
		);
69
		$this->assertFalse(
70
			$campaign->isInActiveDateRange( new \DateTime( '2018-09-22 14:00:00' ) ),
71
			'date given is before the start of the campaign'
72
		);
73
		$this->assertFalse(
74
			$campaign->isInActiveDateRange( new \DateTime( '2018-10-01 13:59:59' ) ),
75
			'date given is before the start of the campaign'
76
		);
77
		$this->assertFalse(
78
			$campaign->isInActiveDateRange( new \DateTime( '2018-10-31 14:00:01' ) ),
79
			'date given is after the end of the campaign'
80
		);
81
	}
82
83
	public function test_given_valid_bucket_id_then_returns_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
			1,
89
			new FakeRandomIntegerGenerator( 1 ),
90
			$this->getControlBucket(),
91
			$this->getVariantBucket()
92
		);
93
		$this->assertEquals(
94
			$campaign->selectBucket( 'C18_WMDE_Test_var' )->getIdentifier(),
95
			'C18_WMDE_Test_var'
96
		);
97
	}
98
99
	public function test_given_invalid_bucket_id_then_returns_random_bucket() {
100
		$campaign = new Campaign(
101
			'C18_WMDE_Test',
102
			new \DateTime( '2018-10-01 14:00:00' ),
103
			new \DateTime( '2018-10-31 14:00:00' ),
104
			1,
105
			new FakeRandomIntegerGenerator( 1 ),
106
			$this->getControlBucket(),
107
			$this->getVariantBucket()
108
		);
109
		$this->assertEquals(
110
			$campaign->selectBucket( 'C18_WMDE_Test_var_666' )->getIdentifier(),
111
			'C18_WMDE_Test_var'
112
		);
113
	}
114
115
	public function test_given_no_bucket_id_then_returns_random_bucket() {
116
		$campaign = new Campaign(
117
			'C18_WMDE_Test',
118
			new \DateTime( '2018-10-01 14:00:00' ),
119
			new \DateTime( '2018-10-31 14:00:00' ),
120
			1,
121
			new FakeRandomIntegerGenerator( 1 ),
122
			$this->getControlBucket(),
123
			$this->getVariantBucket()
124
		);
125
		$this->assertEquals(
126
			$campaign->selectBucket( null )->getIdentifier(),
127
			'C18_WMDE_Test_var'
128
		);
129
	}
130
131
	public function test_getters_return_correct_values() {
132
		$identifier = 'C18_WMDE_Test';
133
		$displayPercentage = 12;
134
		$endDate = new \DateTime( '2018-10-31 14:00:00' );
135
		$campaign = new Campaign(
136
			$identifier,
137
			new \DateTime( '2018-10-01 14:00:00' ),
138
			$endDate,
139
			$displayPercentage,
140
			new FakeRandomIntegerGenerator( 1 ),
141
			$this->getControlBucket(),
142
			$this->getVariantBucket()
143
		);
144
		$this->assertEquals( $identifier, $campaign->getIdentifier() );
145
		$this->assertEquals( $displayPercentage, $campaign->getDisplayPercentage() );
146
		$this->assertEquals( $endDate, $campaign->getEnd() );
147
	}
148
}
149