805af8aedd5687aa37661ae93eedf44b829dc2c9
[yaffs-website] / web / core / tests / Drupal / KernelTests / Core / Config / Storage / FileStorageTest.php
1 <?php
2
3 namespace Drupal\KernelTests\Core\Config\Storage;
4
5 use Drupal\Core\Config\FileStorage;
6 use Drupal\Core\Config\UnsupportedDataTypeConfigException;
7 use Drupal\Core\Serialization\Yaml;
8 use Drupal\Core\StreamWrapper\PublicStream;
9
10 /**
11  * Tests FileStorage operations.
12  *
13  * @group config
14  */
15 class FileStorageTest extends ConfigStorageTestBase {
16
17   /**
18    * A directory to store configuration in.
19    *
20    * @var string
21    */
22   protected $directory;
23
24   /**
25    * {@inheritdoc}
26    */
27   protected function setUp() {
28     parent::setUp();
29     // Create a directory.
30     $this->directory = PublicStream::basePath() . '/config';
31     $this->storage = new FileStorage($this->directory);
32     $this->invalidStorage = new FileStorage($this->directory . '/nonexisting');
33
34     // FileStorage::listAll() requires other configuration data to exist.
35     $this->storage->write('system.performance', $this->config('system.performance')->get());
36     $this->storage->write('core.extension', ['module' => []]);
37   }
38
39   protected function read($name) {
40     $data = file_get_contents($this->storage->getFilePath($name));
41     return Yaml::decode($data);
42   }
43
44   protected function insert($name, $data) {
45     file_put_contents($this->storage->getFilePath($name), $data);
46   }
47
48   protected function update($name, $data) {
49     file_put_contents($this->storage->getFilePath($name), $data);
50   }
51
52   protected function delete($name) {
53     unlink($this->storage->getFilePath($name));
54   }
55
56   /**
57    * Tests the FileStorage::listAll method with a relative and absolute path.
58    */
59   public function testlistAll() {
60     $expected_files = [
61       'core.extension',
62       'system.performance',
63     ];
64
65     $config_files = $this->storage->listAll();
66     $this->assertIdentical($config_files, $expected_files, 'Relative path, two config files found.');
67
68     // @todo https://www.drupal.org/node/2666954 FileStorage::listAll() is
69     //   case-sensitive. However, \Drupal\Core\Config\DatabaseStorage::listAll()
70     //   is case-insensitive.
71     $this->assertSame(['system.performance'], $this->storage->listAll('system'), 'The FileStorage::listAll() with prefix works.');
72     $this->assertSame([], $this->storage->listAll('System'), 'The FileStorage::listAll() is case sensitive.');
73   }
74
75   /**
76    * Test UnsupportedDataTypeConfigException displays path of
77    * erroneous file during read.
78    */
79   public function testReadUnsupportedDataTypeConfigException() {
80     file_put_contents($this->storage->getFilePath('core.extension'), PHP_EOL . 'foo : [bar}', FILE_APPEND);
81     try {
82       $config_parsed = $this->storage->read('core.extension');
83     }
84     catch (UnsupportedDataTypeConfigException $e) {
85       $this->pass('Exception thrown when trying to read a field containing invalid data type.');
86       $this->assertTrue((strpos($e->getMessage(), $this->storage->getFilePath('core.extension')) !== FALSE), 'Erroneous file path is displayed.');
87     }
88   }
89
90 }