Backup of db before drupal security update
[yaffs-website] / web / core / modules / config_translation / tests / src / Unit / ConfigMapperManagerTest.php
1 <?php
2
3 namespace Drupal\Tests\config_translation\Unit;
4
5 use Drupal\config_translation\ConfigMapperManager;
6 use Drupal\Core\Language\Language;
7 use Drupal\Core\Language\LanguageInterface;
8 use Drupal\Core\TypedData\TypedDataInterface;
9 use Drupal\Tests\UnitTestCase;
10 use Drupal\Core\TypedData\DataDefinition;
11
12 /**
13  * Tests the functionality provided by configuration translation mapper manager.
14  *
15  * @group config_translation
16  */
17 class ConfigMapperManagerTest extends UnitTestCase {
18
19   /**
20    * The configuration mapper manager to test.
21    *
22    * @var \Drupal\config_translation\ConfigMapperManager
23    */
24   protected $configMapperManager;
25
26   /**
27    * The typed configuration manager used for testing.
28    *
29    * @var \Drupal\Core\Config\TypedConfigManagerInterface|\PHPUnit_Framework_MockObject_MockObject
30    */
31   protected $typedConfigManager;
32
33   protected function setUp() {
34     $language = new Language(['id' => 'en']);
35     $language_manager = $this->getMock('Drupal\Core\Language\LanguageManagerInterface');
36     $language_manager->expects($this->once())
37       ->method('getCurrentLanguage')
38       ->with(LanguageInterface::TYPE_INTERFACE)
39       ->will($this->returnValue($language));
40
41     $this->typedConfigManager = $this->getMockBuilder('Drupal\Core\Config\TypedConfigManagerInterface')
42       ->getMock();
43
44     $module_handler = $this->getMock('Drupal\Core\Extension\ModuleHandlerInterface');
45     $theme_handler = $this->getMock('Drupal\Core\Extension\ThemeHandlerInterface');
46
47     $this->configMapperManager = new ConfigMapperManager(
48       $this->getMock('Drupal\Core\Cache\CacheBackendInterface'),
49       $language_manager,
50       $module_handler,
51       $this->typedConfigManager,
52       $theme_handler
53     );
54   }
55
56   /**
57    * Tests ConfigMapperManager::hasTranslatable().
58    *
59    * @param \Drupal\Core\TypedData\TypedDataInterface $element
60    *   The schema element to test.
61    * @param bool $expected
62    *   The expected return value of ConfigMapperManager::hasTranslatable().
63    *
64    * @dataProvider providerTestHasTranslatable
65    */
66   public function testHasTranslatable(TypedDataInterface $element, $expected) {
67     $this->typedConfigManager
68       ->expects($this->once())
69       ->method('get')
70       ->with('test')
71       ->will($this->returnValue($element));
72
73     $result = $this->configMapperManager->hasTranslatable('test');
74     $this->assertSame($expected, $result);
75   }
76
77   /**
78    * Provides data for ConfigMapperManager::testHasTranslatable()
79    *
80    * @return array
81    *   An array of arrays, where each inner array contains the schema element
82    *   to test as the first key and the expected result of
83    *   ConfigMapperManager::hasTranslatable() as the second key.
84    */
85   public function providerTestHasTranslatable() {
86     return [
87       [$this->getElement([]), FALSE],
88       [$this->getElement(['aaa' => 'bbb']), FALSE],
89       [$this->getElement(['translatable' => FALSE]), FALSE],
90       [$this->getElement(['translatable' => TRUE]), TRUE],
91       [$this->getNestedElement([
92         $this->getElement([]),
93       ]), FALSE],
94       [$this->getNestedElement([
95         $this->getElement(['translatable' => TRUE]),
96       ]), TRUE],
97       [$this->getNestedElement([
98         $this->getElement(['aaa' => 'bbb']),
99         $this->getElement(['ccc' => 'ddd']),
100         $this->getElement(['eee' => 'fff']),
101       ]), FALSE],
102       [$this->getNestedElement([
103         $this->getElement(['aaa' => 'bbb']),
104         $this->getElement(['ccc' => 'ddd']),
105         $this->getElement(['translatable' => TRUE]),
106       ]), TRUE],
107       [$this->getNestedElement([
108         $this->getElement(['aaa' => 'bbb']),
109         $this->getNestedElement([
110           $this->getElement(['ccc' => 'ddd']),
111           $this->getElement(['eee' => 'fff']),
112         ]),
113         $this->getNestedElement([
114           $this->getElement(['ggg' => 'hhh']),
115           $this->getElement(['iii' => 'jjj']),
116         ]),
117       ]), FALSE],
118       [$this->getNestedElement([
119         $this->getElement(['aaa' => 'bbb']),
120         $this->getNestedElement([
121           $this->getElement(['ccc' => 'ddd']),
122           $this->getElement(['eee' => 'fff']),
123         ]),
124         $this->getNestedElement([
125           $this->getElement(['ggg' => 'hhh']),
126           $this->getElement(['translatable' => TRUE]),
127         ]),
128       ]), TRUE],
129     ];
130   }
131
132   /**
133    * Returns a mocked schema element.
134    *
135    * @param array $definition
136    *   The definition of the schema element.
137    *
138    * @return \Drupal\Core\Config\Schema\Element
139    *   The mocked schema element.
140    */
141   protected function getElement(array $definition) {
142     $data_definition = new DataDefinition($definition);
143     $element = $this->getMock('Drupal\Core\TypedData\TypedDataInterface');
144     $element->expects($this->any())
145       ->method('getDataDefinition')
146       ->will($this->returnValue($data_definition));
147     return $element;
148   }
149
150   /**
151    * Returns a mocked nested schema element.
152    *
153    * @param array $elements
154    *   An array of simple schema elements.
155    *
156    * @return \Drupal\Core\Config\Schema\Mapping
157    *   A nested schema element, containing the passed-in elements.
158    */
159   protected function getNestedElement(array $elements) {
160     // ConfigMapperManager::findTranslatable() checks for
161     // \Drupal\Core\TypedData\TraversableTypedDataInterface, but mocking that
162     // directly does not work, because we need to implement \IteratorAggregate
163     // in order for getIterator() to be called. Therefore we need to mock
164     // \Drupal\Core\Config\Schema\ArrayElement, but that is abstract, so we
165     // need to mock one of the subclasses of it.
166     $nested_element = $this->getMockBuilder('Drupal\Core\Config\Schema\Mapping')
167       ->disableOriginalConstructor()
168       ->getMock();
169     $nested_element->expects($this->once())
170       ->method('getIterator')
171       ->will($this->returnValue(new \ArrayIterator($elements)));
172     return $nested_element;
173   }
174
175 }