Test Setup Failed
Pull Request — master (#19)
by Tim
60:53
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
 * @package WMDE\BannerServer\Tests\Unit\Entity\ActiveBannerSelectionData
17
 */
18
class CampaignTest extends \PHPUnit\Framework\TestCase {
19
20
	private function getControlBucket(): Bucket {
21
		return new Bucket(
22
			'C18_WMDE_Test_ctrl',
23
			new Banner( 'C18_WMDE_Test_ctrl_main' ),
24
			new Banner( 'C18_WMDE_Test_ctrl_secondary' )
25
		);
26
	}
27
28
	private function getVariantBucket(): Bucket {
29
		return new Bucket(
30
			'C18_WMDE_Test_var',
31
			new Banner( 'C18_WMDE_Test_var_main' ),
32
			new Banner( 'C18_WMDE_Test_var_secondary' )
33
		);
34
	}
35
36
	public function test_given_time_out_of_date_range_then_campaign_is_not_active() {
37
		$campaign = new Campaign(
38
			'C18_WMDE_Test',
39
			new \DateTime( '2018-10-01 14:00:00' ),
40
			new \DateTime( '2018-10-31 14:00:00' ),
41
			1,
42
			new FakeRandomIntegerGenerator( 1 ),
43
			$this->getControlBucket(),
44
			$this->getVariantBucket()
45
		);
46
		$this->assertTrue(
47
			$campaign->isInActiveDateRange( new \DateTime( '2018-10-01 14:00:00' ) ),
48
			'date given is exactly the start date of the campaign'
49
		);
50
		$this->assertTrue(
51
			$campaign->isInActiveDateRange( new \DateTime( '2018-10-20 14:00:00' ) ),
52
			'date given is between the start and the end of the campaign'
53
		);
54
		$this->assertTrue(
55
			$campaign->isInActiveDateRange( new \DateTime( '2018-10-31 14:00:00' ) ),
56
			'date given is exactly the end date of the campaign'
57
		);
58
59
	}
60
61
	public function test_given_time_in_the_date_range_then_campaign_is_active() {
62
		$campaign = new Campaign(
63
			'C18_WMDE_Test',
64
			new \DateTime( '2018-10-01 14:00:00' ),
65
			new \DateTime( '2018-10-31 14:00:00' ),
66
			1,
67
			new FakeRandomIntegerGenerator( 1 ),
68
			$this->getControlBucket(),
69
			$this->getVariantBucket()
70
		);
71
		$this->assertFalse(
72
			$campaign->isInActiveDateRange( new \DateTime( '2018-09-22 14:00:00' ) ),
73
			'date given is before the start of the campaign'
74
		);
75
		$this->assertFalse(
76
			$campaign->isInActiveDateRange( new \DateTime( '2018-10-01 13:59:59' ) ),
77
			'date given is before the start of the campaign'
78
		);
79
		$this->assertFalse(
80
			$campaign->isInActiveDateRange( new \DateTime( '2018-10-31 14:00:01' ) ),
81
			'date given is after the end of the campaign'
82
		);
83
	}
84
85
	public function test_given_valid_bucket_id_then_returns_bucket() {
86
		$campaign = new Campaign(
87
			'C18_WMDE_Test',
88
			new \DateTime( '2018-10-01 14:00:00' ),
89
			new \DateTime( '2018-10-31 14:00:00' ),
90
			1,
91
			new FakeRandomIntegerGenerator( 1 ),
92
			$this->getControlBucket(),
93
			$this->getVariantBucket()
94
		);
95
		$this->assertEquals(
96
			$campaign->selectBucket( 'C18_WMDE_Test_var' )->getIdentifier(),
97
			'C18_WMDE_Test_var'
98
		);
99
	}
100
101
	public function test_given_invalid_bucket_id_then_returns_random_bucket() {
102
		$campaign = new Campaign(
103
			'C18_WMDE_Test',
104
			new \DateTime( '2018-10-01 14:00:00' ),
105
			new \DateTime( '2018-10-31 14:00:00' ),
106
			1,
107
			new FakeRandomIntegerGenerator( 1 ),
108
			$this->getControlBucket(),
109
			$this->getVariantBucket()
110
		);
111
		$this->assertEquals(
112
			$campaign->selectBucket( 'C18_WMDE_Test_var_666' )->getIdentifier(),
113
			'C18_WMDE_Test_var'
114
		);
115
	}
116
117
	public function test_given_no_bucket_id_then_returns_random_bucket() {
118
		$campaign = new Campaign(
119
			'C18_WMDE_Test',
120
			new \DateTime( '2018-10-01 14:00:00' ),
121
			new \DateTime( '2018-10-31 14:00:00' ),
122
			1,
123
			new FakeRandomIntegerGenerator( 1 ),
124
			$this->getControlBucket(),
125
			$this->getVariantBucket()
126
		);
127
		$this->assertEquals(
128
			$campaign->selectBucket( null )->getIdentifier(),
129
			'C18_WMDE_Test_var'
130
		);
131
	}
132
}
133