Completed
Push — 1.0.x ( 546a2c...980200 )
by Antonio
02:06
created

ServiceContainerContext   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 78
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2

Importance

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

6 Methods

Rating   Name   Duplication   Size   Complexity  
A assertParameters() 0 4 1
A negateParameters() 0 8 2
A assertOverrideParameters() 0 3 1
A resetParameters() 0 6 2
A overrideParameters() 0 5 1
A setServiceProvider() 0 12 2
1
<?php
2
3
namespace NuvoleWeb\Drupal\DrupalExtension\Context;
4
5
use Behat\Gherkin\Node\TableNode;
6
use Drupal\Core\Site\Settings;
7
use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException;
8
use function bovigo\assert\assert;
9
use function bovigo\assert\predicate\equals;
10
use function bovigo\assert\predicate\not;
11
12
/**
13
 * Contains Contacts specific step definitions.
14
 */
15
class ServiceContainerContext extends RawDrupalContext {
16
17
  /**
18
   * Override service parameters.
19
   *
20
   * @see BehatServiceProvider
21
   *
22
   * @Given I override the following service parameters:
23
   */
24
  public function assertOverrideParameters(TableNode $table) {
25
    $this->overrideParameters($table->getRowsHash());
26
  }
27
28
  /**
29
   * Rebuild container on after scenario.
30
   *
31
   * @AfterScenario
32
   */
33
  public function resetParameters() {
34
    if (\Drupal::state()->get('nuvole_web.drupal_extension.parameter_overrides')) {
35
      \Drupal::state()->set('nuvole_web.drupal_extension.parameter_overrides', []);
36
      \Drupal::service('kernel')->rebuildContainer();
37
    }
38
  }
39
40
  /**
41
   * Assert given service parameter has given value.
42
   *
43
   * @Then the service parameter :name should be set to :expected
44
   */
45
  public function assertParameters($name, $expected) {
46
    $value = \Drupal::getContainer()->getParameter($name);
47
    assert($value, equals($expected));
48
  }
49
50
  /**
51
   * Assert given service parameter has not given value.
52
   *
53
   * @Then the service parameter :name should not be set to :expected
54
   */
55
  public function negateParameters($name, $expected) {
56
    try {
57
      $value = \Drupal::getContainer()->getParameter($name);
58
      assert($value, not(equals($expected)));
59
    }
60
    catch (ParameterNotFoundException $e) {
0 ignored issues
show
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
61
    }
62
  }
63
64
  /**
65
   * Apply parameters overrides and rebuild container.
66
   *
67
   * @param array $parameters
68
   *    List of parameters to be overridden.
69
   */
70
  protected function overrideParameters(array $parameters) {
71
    $this->setServiceProvider();
72
    \Drupal::state()->set('nuvole_web.drupal_extension.parameter_overrides', $parameters);
73
    \Drupal::service('kernel')->rebuildContainer();
74
  }
75
76
  /**
77
   * Set custom service provider ar run-time.
78
   */
79
  protected function setServiceProvider() {
80
    // Setting service providers will change in Drupal 8.3.
81
    // @link https://www.drupal.org/node/2183323
82
    if (\Drupal::VERSION < '8.3') {
83
      $GLOBALS['conf']['container_service_providers']['BehatServiceProvider'] = '\NuvoleWeb\Drupal\DrupalExtension\ServiceProvider\BehatServiceProvider';
84
    }
85
    else {
86
      $settings = Settings::getAll();
87
      $settings['container_service_providers']['BehatServiceProvider'] = '\NuvoleWeb\Drupal\DrupalExtension\ServiceProvider\BehatServiceProvider';
88
      new Settings($settings);
89
    }
90
  }
91
92
}
93