Passed
Push — master ( ccff23...5e5d56 )
by Tim
37s
created

CampaignConfigurationLoaderTest   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 66
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 44
dl 0
loc 66
rs 10
c 0
b 0
f 0
wmc 5

5 Methods

Rating   Name   Duplication   Size   Complexity  
A test_given_missing_campaign_data_then_errors_are_caught() 0 8 1
A test_given_broken_bucket_campaign_configuration_then_errors_are_caught() 0 8 1
A test_given_invalid_campaign_file_then_empty_campaign_configuration_is_returned() 0 8 1
A test_given_broken_banner_campaign_configuration_then_errors_are_caught() 0 8 1
A test_given_campaigns_are_loaded_then_loaded_campaign_data_is_correct() 0 19 1
1
<?php
2
3
declare( strict_types = 1 );
4
5
namespace WMDE\BannerServer\Tests\Unit\UseCase\BannerSelection;
6
7
use Monolog\Handler\TestHandler;
8
use Monolog\Logger;
9
use Psr\Log\NullLogger;
10
use WMDE\BannerServer\Entity\BannerSelection\CampaignCollection;
11
use WMDE\BannerServer\UseCase\BannerSelection\CampaignConfigurationLoader;
12
13
/**
14
 * @covers \WMDE\BannerServer\UseCase\BannerSelection\CampaignConfigurationLoader
15
 * Class ActiveBannerSelectionDataTest
16
 */
17
class CampaignConfigurationLoaderTest extends \PHPUnit\Framework\TestCase {
18
19
	const TEST_VALID_CAMPAIGN_CONFIGURATION_FILE = 'tests/Fixtures/campaigns/campaigns.yml';
20
	const TEST_BROKEN_BUCKET_CAMPAIGN_CONFIGURATION_FILE = 'tests/Fixtures/campaigns/broken_bucket_campaign.yml';
21
	const TEST_BROKEN_BANNER_CAMPAIGN_CONFIGURATION_FILE = 'tests/Fixtures/campaigns/broken_banner_campaign.yml';
22
	const TEST_BROKEN_DATA_CAMPAIGN_CONFIGURATION_FILE = 'tests/Fixtures/campaigns/broken_data_campaign.yml';
23
24
	public function test_given_campaigns_are_loaded_then_loaded_campaign_data_is_correct() {
25
		$loader = new CampaignConfigurationLoader( new NullLogger(), self::TEST_VALID_CAMPAIGN_CONFIGURATION_FILE );
26
		$collection = $loader->getCampaignCollection();
27
28
		$campaign = $collection->getCampaign( new \DateTime( '2018-12-12' ) );
29
		$this->assertNotNull( $campaign );
30
		$this->assertEquals( 'B18WPDE_01_180131', $campaign->getIdentifier() );
31
		$this->assertEquals( '2019-01-01 14:00:00', $campaign->getEnd()->format( 'Y-m-d H:i:s' ) );
32
		$this->assertEquals( 10, $campaign->getDisplayPercentage() );
33
34
		$bucketA = $campaign->selectBucket( 'B18WPDE_01_180131_ctrl' );
35
		$bucketB = $campaign->selectBucket( 'B18WPDE_01_180131_var' );
36
		$this->assertEquals( $bucketA->getIdentifier(), 'B18WPDE_01_180131_ctrl' );
37
		$this->assertEquals( $bucketB->getIdentifier(), 'B18WPDE_01_180131_var' );
38
39
		$this->assertEquals( 'B18WPDE_01_180131_fulltop_ctrl', $bucketA->getBanner( 0 ) );
40
		$this->assertEquals( 'B18WPDE_01_180131_top_ctrl2', $bucketA->getBanner( 1 ) );
41
		$this->assertEquals( 'B18WPDE_02_180511_top_ctrl_last', $bucketA->getBanner( 5 ) );
42
		$this->assertEquals( 'B18WPDE_02_180511_top_ctrl_last', $bucketA->getBanner( 10 ) );
43
	}
44
45
	public function test_given_broken_bucket_campaign_configuration_then_errors_are_caught() {
46
		$testHandler = new TestHandler();
47
		$loader = new CampaignConfigurationLoader(
48
			new Logger( 'TestLogger', [ $testHandler ] ),
49
			self::TEST_BROKEN_BUCKET_CAMPAIGN_CONFIGURATION_FILE
50
		);
51
		$loader->getCampaignCollection();
52
		$this->assertTrue( $testHandler->hasCritical( 'A configured bucket has no name.' ) );
53
	}
54
55
	public function test_given_broken_banner_campaign_configuration_then_errors_are_caught() {
56
		$testHandler = new TestHandler();
57
		$loader = new CampaignConfigurationLoader(
58
			new Logger( 'TestLogger', [ $testHandler ] ),
59
			self::TEST_BROKEN_BANNER_CAMPAIGN_CONFIGURATION_FILE
60
		);
61
		$loader->getCampaignCollection();
62
		$this->assertTrue( $testHandler->hasCritical( 'A configured bucket has no associated banners.' ) );
63
	}
64
65
	public function test_given_missing_campaign_data_then_errors_are_caught() {
66
		$testHandler = new TestHandler();
67
		$loader = new CampaignConfigurationLoader(
68
			new Logger( 'TestLogger', [ $testHandler ] ),
69
			self::TEST_BROKEN_DATA_CAMPAIGN_CONFIGURATION_FILE
70
		);
71
		$loader->getCampaignCollection();
72
		$this->assertTrue( $testHandler->hasCritical( 'Campaign data is incomplete.' ) );
73
	}
74
75
	public function test_given_invalid_campaign_file_then_empty_campaign_configuration_is_returned() {
76
		$testHandler = new TestHandler();
77
		$loader = new CampaignConfigurationLoader(
78
			new Logger( 'TestLogger', [ $testHandler ] ),
79
			'SOME_INVALID_PATH/' . self::TEST_VALID_CAMPAIGN_CONFIGURATION_FILE
80
		);
81
		$this->assertEquals( new CampaignCollection(), $loader->getCampaignCollection() );
82
		$this->assertTrue( $testHandler->hasCritical( 'Unable to read banner server config file.' ) );
83
	}
84
}
85