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\Tests\UnitTestCase;
11 * @coversDefaultClass \Drupal\Component\FileCache\FileCacheFactory
14 class FileCacheFactoryTest extends UnitTestCase {
19 protected function setUp() {
23 'test_foo_settings' => [
24 'collection' => 'test-23',
25 'cache_backend_class' => '\Drupal\Tests\Component\FileCache\StaticFileCacheBackend',
26 'cache_backend_configuration' => [
31 FileCacheFactory::setConfiguration($configuration);
32 FileCacheFactory::setPrefix('prefix');
38 public function testGet() {
39 $file_cache = FileCacheFactory::get('test_foo_settings', []);
41 // Ensure the right backend and configuration is used.
42 $filename = __DIR__ . '/Fixtures/llama-23.txt';
43 $realpath = realpath($filename);
44 $cid = 'prefix:test-23:' . $realpath;
46 $file_cache->set($filename, 23);
48 $static_cache = new StaticFileCacheBackend(['bin' => 'dog']);
49 $result = $static_cache->fetch([$cid]);
50 $this->assertNotEmpty($result);
52 // Cleanup static caches.
53 $file_cache->delete($filename);
59 public function testGetNoPrefix() {
60 FileCacheFactory::setPrefix(NULL);
61 $this->setExpectedException(\InvalidArgumentException::class, 'Required prefix configuration is missing');
62 FileCacheFactory::get('test_foo_settings', []);
68 public function testGetDisabledFileCache() {
69 // Ensure the returned FileCache is an instance of FileCache::class.
70 $file_cache = FileCacheFactory::get('test_foo_settings', []);
71 $this->assertInstanceOf(FileCache::class, $file_cache);
73 $configuration = FileCacheFactory::getConfiguration();
74 $configuration[FileCacheFactory::DISABLE_CACHE] = TRUE;
75 FileCacheFactory::setConfiguration($configuration);
77 // Ensure the returned FileCache is now an instance of NullFileCache::class.
78 $file_cache = FileCacheFactory::get('test_foo_settings', []);
79 $this->assertInstanceOf(NullFileCache::class, $file_cache);
85 * @dataProvider configurationDataProvider
87 public function testGetConfigurationOverrides($configuration, $arguments, $class) {
88 FileCacheFactory::setConfiguration($configuration);
90 $file_cache = FileCacheFactory::get('test_foo_settings', $arguments);
91 $this->assertInstanceOf($class, $file_cache);
95 * Data provider for testGetConfigurationOverrides().
97 public function configurationDataProvider() {
100 // Get a unique FileCache class.
101 $file_cache = $this->getMockBuilder(FileCache::class)
102 ->disableOriginalConstructor()
104 $class = get_class($file_cache);
106 // Test fallback configuration.
107 $data['fallback-configuration'] = [[
108 ], [], FileCache::class];
110 // Test default configuration.
111 $data['default-configuration'] = [[
117 // Test specific per collection setting.
118 $data['collection-setting'] = [[
119 'test_foo_settings' => [
125 // Test default configuration plus specific per collection setting.
126 $data['default-plus-collection-setting'] = [[
128 'class' => '\stdClass',
130 'test_foo_settings' => [
135 // Test default configuration plus class specific override.
136 $data['default-plus-class-override'] = [[
138 'class' => '\stdClass',
140 ], [ 'class' => $class ], $class];
142 // Test default configuration plus class specific override plus specific
143 // per collection setting.
144 $data['default-plus-class-plus-collection-setting'] = [[
146 'class' => '\stdClass',
148 'test_foo_settings' => [
151 ], [ 'class' => '\stdClass'], $class];
157 * @covers ::getConfiguration
158 * @covers ::setConfiguration
160 public function testGetSetConfiguration() {
161 $configuration = FileCacheFactory::getConfiguration();
162 $configuration['test_foo_bar'] = ['bar' => 'llama'];
163 FileCacheFactory::setConfiguration($configuration);
164 $configuration = FileCacheFactory::getConfiguration();
165 $this->assertEquals(['bar' => 'llama'], $configuration['test_foo_bar']);
169 * @covers ::getPrefix
170 * @covers ::setPrefix
172 public function testGetSetPrefix() {
173 $prefix = $this->randomMachineName();
174 FileCacheFactory::setPrefix($prefix);
175 $this->assertEquals($prefix, FileCacheFactory::getPrefix());