3 namespace Drupal\Tests\Component\FileCache;
5 use Drupal\Component\FileCache\FileCache;
6 use Drupal\Component\FileCache\NullFileCache;
7 use Drupal\Component\FileCache\FileCacheFactory;
8 use Drupal\Component\Utility\Random;
9 use PHPUnit\Framework\TestCase;
12 * @coversDefaultClass \Drupal\Component\FileCache\FileCacheFactory
15 class FileCacheFactoryTest extends TestCase {
20 protected function setUp() {
24 'test_foo_settings' => [
25 'collection' => 'test-23',
26 'cache_backend_class' => '\Drupal\Tests\Component\FileCache\StaticFileCacheBackend',
27 'cache_backend_configuration' => [
32 FileCacheFactory::setConfiguration($configuration);
33 FileCacheFactory::setPrefix('prefix');
39 public function testGet() {
40 $file_cache = FileCacheFactory::get('test_foo_settings', []);
42 // Ensure the right backend and configuration is used.
43 $filename = __DIR__ . '/Fixtures/llama-23.txt';
44 $realpath = realpath($filename);
45 $cid = 'prefix:test-23:' . $realpath;
47 $file_cache->set($filename, 23);
49 $static_cache = new StaticFileCacheBackend(['bin' => 'dog']);
50 $result = $static_cache->fetch([$cid]);
51 $this->assertNotEmpty($result);
53 // Cleanup static caches.
54 $file_cache->delete($filename);
60 public function testGetNoPrefix() {
61 FileCacheFactory::setPrefix(NULL);
62 if (method_exists($this, 'expectException')) {
63 $this->expectException(\InvalidArgumentException::class);
64 $this->expectExceptionMessage('Required prefix configuration is missing');
67 $this->setExpectedException(\InvalidArgumentException::class, 'Required prefix configuration is missing');
69 FileCacheFactory::get('test_foo_settings', []);
75 public function testGetDisabledFileCache() {
76 // Ensure the returned FileCache is an instance of FileCache::class.
77 $file_cache = FileCacheFactory::get('test_foo_settings', []);
78 $this->assertInstanceOf(FileCache::class, $file_cache);
80 $configuration = FileCacheFactory::getConfiguration();
81 $configuration[FileCacheFactory::DISABLE_CACHE] = TRUE;
82 FileCacheFactory::setConfiguration($configuration);
84 // Ensure the returned FileCache is now an instance of NullFileCache::class.
85 $file_cache = FileCacheFactory::get('test_foo_settings', []);
86 $this->assertInstanceOf(NullFileCache::class, $file_cache);
92 * @dataProvider configurationDataProvider
94 public function testGetConfigurationOverrides($configuration, $arguments, $class) {
95 FileCacheFactory::setConfiguration($configuration);
97 $file_cache = FileCacheFactory::get('test_foo_settings', $arguments);
98 $this->assertInstanceOf($class, $file_cache);
102 * Data provider for testGetConfigurationOverrides().
104 public function configurationDataProvider() {
107 // Get a unique FileCache class.
108 $file_cache = $this->getMockBuilder(FileCache::class)
109 ->disableOriginalConstructor()
111 $class = get_class($file_cache);
113 // Test fallback configuration.
114 $data['fallback-configuration'] = [
120 // Test default configuration.
121 $data['default-configuration'] = [
122 ['default' => ['class' => $class]],
127 // Test specific per collection setting.
128 $data['collection-setting'] = [
129 ['test_foo_settings' => ['class' => $class]],
134 // Test default configuration plus specific per collection setting.
135 $data['default-plus-collection-setting'] = [
137 'default' => ['class' => '\stdClass'],
138 'test_foo_settings' => ['class' => $class],
144 // Test default configuration plus class specific override.
145 $data['default-plus-class-override'] = [
146 ['default' => ['class' => '\stdClass']],
151 // Test default configuration plus class specific override plus specific
152 // per collection setting.
153 $data['default-plus-class-plus-collection-setting'] = [
155 'default' => ['class' => '\stdClass'],
156 'test_foo_settings' => ['class' => $class],
158 ['class' => '\stdClass'],
166 * @covers ::getConfiguration
167 * @covers ::setConfiguration
169 public function testGetSetConfiguration() {
170 $configuration = FileCacheFactory::getConfiguration();
171 $configuration['test_foo_bar'] = ['bar' => 'llama'];
172 FileCacheFactory::setConfiguration($configuration);
173 $configuration = FileCacheFactory::getConfiguration();
174 $this->assertEquals(['bar' => 'llama'], $configuration['test_foo_bar']);
178 * @covers ::getPrefix
179 * @covers ::setPrefix
181 public function testGetSetPrefix() {
183 $random = new Random();
185 $prefix = $random->name(8, TRUE);
186 FileCacheFactory::setPrefix($prefix);
187 $this->assertEquals($prefix, FileCacheFactory::getPrefix());