Failed Conditions
Pull Request — master (#12)
by Tibor
03:44
created

Config   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 134
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 3

Importance

Changes 3
Bugs 1 Features 0
Metric Value
wmc 9
c 3
b 1
f 0
lcom 2
cbo 3
dl 0
loc 134
rs 10

8 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 8 1
A isEnabled() 0 4 1
A getImageDrivers() 0 4 1
A shouldCombineImages() 0 4 1
A shouldRecordAllScenarios() 0 4 1
A loadServices() 0 10 1
A getScreenshotTakingModes() 0 8 1
A getScreenshotTakingModeValidator() 0 6 2
1
<?php
2
3
namespace Bex\Behat\ScreenshotExtension\ServiceContainer;
4
5
use Bex\Behat\ExtensionDriverLocator\DriverLocator;
6
use Bex\Behat\ScreenshotExtension\Driver\ImageDriverInterface;
7
use Symfony\Component\Config\FileLocator;
8
use Symfony\Component\DependencyInjection\ContainerBuilder;
9
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
10
11
class Config
12
{
13
    const EXTENSION_CONFIG_KEY = 'screenshot';
14
    const CONFIG_CONTAINER_ID = 'bex.screenshot_extension.config';
15
16
    const IMAGE_DRIVER_NAMESPACE = 'Bex\\Behat\\ScreenshotExtension\\Driver';
17
    const IMAGE_DRIVER_PARENT = 'Bex\\Behat\\ScreenshotExtension\\Driver\\ImageDriverInterface';
18
19
    const CONFIG_PARAM_EXTENSTION_ENABLED = 'enabled';
20
    const CONFIG_PARAM_ACTIVE_IMAGE_DRIVERS = 'active_image_drivers';
21
    const CONFIG_PARAM_IMAGE_DRIVER_CONFIGS = 'image_drivers';
22
    const CONFIG_PARAM_SCREENSHOT_TAKING_MODE = 'screenshot_taking_mode';
23
24
    const SCREENSHOT_TAKING_MODE_FAILED_STEPS = 'failed_steps';
25
    const SCREENSHOT_TAKING_MODE_FAILED_SCENARIOS = 'failed_scenarios';
26
    const SCREENSHOT_TAKING_MODE_ALL_SCENARIOS = 'all_scenarios';
27
28
    const DEFAULT_IMAGE_DRIVER_KEY = 'local';
29
    const DEFAULT_SCREENSHOT_TAKING_MODE = self::SCREENSHOT_TAKING_MODE_FAILED_STEPS;
30
31
    const ERROR_MESSAGE_IMAGICK_NOT_FOUND = 'Imagemagick PHP extension is required, but not installed.';
32
    
33
    /**
34
     * @var DriverLocator
35
     */
36
    private $driverLocator;
37
38
    /**
39
     * @var ImageDriverInterface[]
40
     */
41
    private $imageDrivers;
42
43
    /**
44
     * @var boolean
45
     */
46
    private $enabled;
47
48
    /**
49
     * @var string
50
     */
51
    private $screenshotTakingMode;
52
53
    /**
54
     * @var string[]
55
     */
56
    private $imageDriverKeys;
57
58
    /**
59
     * @var array
60
     */
61
    private $imageDriverConfigs;
62
63
    /**
64
     * @param array $config
65
     */
66
    public function __construct(array $config)
67
    {
68
        $this->driverLocator = DriverLocator::getInstance(self::IMAGE_DRIVER_NAMESPACE, self::IMAGE_DRIVER_PARENT);
69
        $this->enabled = $config[self::CONFIG_PARAM_EXTENSTION_ENABLED];
70
        $this->screenshotTakingMode = $config[self::CONFIG_PARAM_SCREENSHOT_TAKING_MODE];
71
        $this->imageDriverKeys = $config[self::CONFIG_PARAM_ACTIVE_IMAGE_DRIVERS];
72
        $this->imageDriverConfigs = $config[self::CONFIG_PARAM_IMAGE_DRIVER_CONFIGS];
73
    }
74
75
    /**
76
     * @return boolean
77
     */
78
    public function isEnabled()
79
    {
80
        return $this->enabled;
81
    }
82
83
    /**
84
     * @return ImageDriverInterface[]
85
     */
86
    public function getImageDrivers()
87
    {
88
        return $this->imageDrivers;
89
    }
90
91
    /**
92
     * @return boolean
93
     */
94
    public function shouldCombineImages()
95
    {
96
        return $this->screenshotTakingMode !== self::SCREENSHOT_TAKING_MODE_FAILED_STEPS;
97
    }
98
99
    /**
100
     * @return boolean
101
     */
102
    public function shouldRecordAllScenarios()
103
    {
104
        return $this->screenshotTakingMode == self::SCREENSHOT_TAKING_MODE_ALL_SCENARIOS;
105
    }
106
107
    /**
108
     * Init service container and load image drivers
109
     * 
110
     * @param  ContainerBuilder $container
111
     */
112
    public function loadServices(ContainerBuilder $container)
113
    {
114
        $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/config'));
115
        $loader->load('services.xml');
116
        $this->imageDrivers = $this->driverLocator->findDrivers(
0 ignored issues
show
Documentation Bug introduced by
It seems like $this->driverLocator->fi...is->imageDriverConfigs) of type array<integer,object<Bex...cator\DriverInterface>> is incompatible with the declared type array<integer,object<Bex...\ImageDriverInterface>> of property $imageDrivers.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
117
            $container,
118
            $this->imageDriverKeys,
119
            $this->imageDriverConfigs
120
        );
121
    }
122
123
    /**
124
     * @return string[]
125
     */
126
    public static function getScreenshotTakingModes()
127
    {
128
        return [
129
            self::SCREENSHOT_TAKING_MODE_FAILED_STEPS,
130
            self::SCREENSHOT_TAKING_MODE_FAILED_SCENARIOS,
131
            self::SCREENSHOT_TAKING_MODE_ALL_SCENARIOS
132
        ];
133
    }
134
135
    /**
136
     * @return \Closure
137
     */
138
    public static function getScreenshotTakingModeValidator()
139
    {
140
        return function ($mode) {
141
            return ($mode !== 'failed_steps') && !class_exists('\Imagick');
142
        };
143
    }
144
}
145