‪TYPO3CMS  11.5
AbstractFrontendTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
23 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
24 
28 class ‪AbstractFrontendTest extends UnitTestCase
29 {
34  {
35  $mockBackend = $this->getMockBuilder(AbstractBackend::class)
36  ->onlyMethods(['get', 'set', 'has', 'remove', 'flush', 'collectGarbage'])
37  ->addMethods(['findIdentifiersByTag', 'flushByTag'])
38  ->disableOriginalConstructor()
39  ->getMock();
40  foreach (['x', 'someValue', '123fivesixseveneight', 'some&', 'ab_cd%', rawurlencode('resource://some/äöü$&% sadf'), str_repeat('x', 250)] as $identifier) {
41  $this->getMockBuilder(VariableFrontend::class)
42  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove', 'flush', 'flushByTag', 'collectGarbage'])
43  ->setConstructorArgs([$identifier, $mockBackend])
44  ->getMock();
45  }
46  }
47 
52  {
53  $mockBackend = $this->getMockBuilder(AbstractBackend::class)
54  ->onlyMethods(['get', 'set', 'has', 'remove', 'flush', 'collectGarbage'])
55  ->addMethods(['findIdentifiersByTag', 'flushByTag'])
56  ->disableOriginalConstructor()
57  ->getMock();
58  foreach (['', 'abc def', 'foo!', 'bar:', 'some/', 'bla*', 'one+', 'äöü', str_repeat('x', 251), 'x$', '\\a', 'b#'] as $identifier) {
59  try {
60  $this->getMockBuilder(VariableFrontend::class)
61  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove', 'flush', 'flushByTag', 'collectGarbage'])
62  ->setConstructorArgs([$identifier, $mockBackend])
63  ->getMock();
64  self::fail('Identifier "' . $identifier . '" was not rejected.');
65  } catch (\InvalidArgumentException $exception) {
66  }
67  }
68  }
69 
73  public function ‪flushCallsBackend(): void
74  {
75  $identifier = 'someCacheIdentifier';
76  $backend = $this->getMockBuilder(AbstractBackend::class)
77  ->onlyMethods(['get', 'set', 'has', 'remove', 'flush', 'collectGarbage'])
78  ->addMethods(['findIdentifiersByTag', 'flushByTag'])
79  ->disableOriginalConstructor()
80  ->getMock();
81  $backend->expects(self::once())->method('flush');
82  $cache = $this->getMockBuilder(VariableFrontend::class)
83  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove'])
84  ->setConstructorArgs([$identifier, $backend])
85  ->getMock();
86  $cache->flush();
87  }
88 
92  public function ‪flushByTagRejectsInvalidTags(): void
93  {
94  $this->expectException(\InvalidArgumentException::class);
95  $this->expectExceptionCode(1233057359);
96 
97  $identifier = 'someCacheIdentifier';
98  $backend = $this->createMock(TaggableBackendInterface::class);
99  $backend->expects(self::never())->method('flushByTag');
100  $cache = $this->getMockBuilder(VariableFrontend::class)
101  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove'])
102  ->setConstructorArgs([$identifier, $backend])
103  ->getMock();
104  $cache->flushByTag('SomeInvalid\\Tag');
105  }
106 
111  {
112  $tag = 'sometag';
113  $identifier = 'someCacheIdentifier';
114  $backend = $this->getMockBuilder(TaggableBackendInterface::class)
115  ->onlyMethods(['setCache', 'get', 'set', 'has', 'remove', 'findIdentifiersByTag', 'flush', 'flushByTag', 'flushByTags', 'collectGarbage'])
116  ->disableOriginalConstructor()
117  ->getMock();
118  $backend->expects(self::once())->method('flushByTag')->with($tag);
119  $cache = $this->getMockBuilder(VariableFrontend::class)
120  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove'])
121  ->setConstructorArgs([$identifier, $backend])
122  ->getMock();
123  $cache->flushByTag($tag);
124  }
125 
130  {
131  $tag = 'sometag';
132  $identifier = 'someCacheIdentifier';
133  $backend = $this->getMockBuilder(TaggableBackendInterface::class)
134  ->onlyMethods(['setCache', 'get', 'set', 'has', 'remove', 'findIdentifiersByTag', 'flush', 'flushByTag', 'flushByTags', 'collectGarbage'])
135  ->disableOriginalConstructor()
136  ->getMock();
137  $backend->expects(self::once())->method('flushByTags')->with([$tag]);
138  $cache = $this->getMockBuilder(VariableFrontend::class)
139  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove'])
140  ->setConstructorArgs([$identifier, $backend])
141  ->getMock();
142  $cache->flushByTags([$tag]);
143  }
144 
148  public function ‪collectGarbageCallsBackend(): void
149  {
150  $identifier = 'someCacheIdentifier';
151  $backend = $this->getMockBuilder(AbstractBackend::class)
152  ->onlyMethods(['get', 'set', 'has', 'remove', 'flush', 'collectGarbage'])
153  ->addMethods(['findIdentifiersByTag', 'flushByTag'])
154  ->disableOriginalConstructor()
155  ->getMock();
156  $backend->expects(self::once())->method('collectGarbage');
157  $cache = $this->getMockBuilder(VariableFrontend::class)
158  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove'])
159  ->setConstructorArgs([$identifier, $backend])
160  ->getMock();
161  $cache->collectGarbage();
162  }
163 
168  {
169  $identifier = 'someCacheIdentifier';
170  $backend = $this->createMock(AbstractBackend::class);
171  $cache = $this->getMockBuilder(VariableFrontend::class)
172  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove'])
173  ->setConstructorArgs([$identifier, $backend])
174  ->getMock();
175  foreach (['', 'abc def', 'foo!', 'bar:', 'some/', 'bla*', 'one+', 'äöü', str_repeat('x', 251), 'x$', '\\a', 'b#'] as $entryIdentifier) {
176  self::assertFalse($cache->isValidEntryIdentifier($entryIdentifier), 'Invalid identifier "' . $entryIdentifier . '" was not rejected.');
177  }
178  }
179 
184  {
185  $identifier = 'someCacheIdentifier';
186  $backend = $this->createMock(AbstractBackend::class);
187  $cache = $this->getMockBuilder(VariableFrontend::class)
188  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove'])
189  ->setConstructorArgs([$identifier, $backend])
190  ->getMock();
191  foreach (['_', 'abcdef', 'foo', 'bar123', '3some', '_bl_a', 'some&', 'one%TWO', str_repeat('x', 250)] as $entryIdentifier) {
192  self::assertTrue($cache->isValidEntryIdentifier($entryIdentifier), 'Valid identifier "' . $entryIdentifier . '" was not accepted.');
193  }
194  }
195 
199  public function ‪invalidTagsAreRecognizedAsInvalid(): void
200  {
201  $identifier = 'someCacheIdentifier';
202  $backend = $this->createMock(AbstractBackend::class);
203  $cache = $this->getMockBuilder(VariableFrontend::class)
204  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove'])
205  ->setConstructorArgs([$identifier, $backend])
206  ->getMock();
207  foreach (['', 'abc def', 'foo!', 'bar:', 'some/', 'bla*', 'one+', 'äöü', str_repeat('x', 251), 'x$', '\\a', 'b#'] as $tag) {
208  self::assertFalse($cache->isValidTag($tag), 'Invalid tag "' . $tag . '" was not rejected.');
209  }
210  }
211 
215  public function ‪validTagsAreRecognizedAsValid(): void
216  {
217  $identifier = 'someCacheIdentifier';
218  $backend = $this->createMock(AbstractBackend::class);
219  $cache = $this->getMockBuilder(VariableFrontend::class)
220  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove'])
221  ->setConstructorArgs([$identifier, $backend])
222  ->getMock();
223  foreach (['abcdef', 'foo-bar', 'foo_baar', 'bar123', '3some', 'file%Thing', 'some&', '%x%', str_repeat('x', 250)] as $tag) {
224  self::assertTrue($cache->isValidTag($tag), 'Valid tag "' . $tag . '" was not accepted.');
225  }
226  }
227 }
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest\flushCallsBackend
‪flushCallsBackend()
Definition: AbstractFrontendTest.php:73
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest\theConstructorRejectsInvalidIdentifiers
‪theConstructorRejectsInvalidIdentifiers()
Definition: AbstractFrontendTest.php:51
‪TYPO3\CMS\Core\Cache\Backend\TaggableBackendInterface
Definition: TaggableBackendInterface.php:22
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend
Definition: AbstractFrontendTest.php:18
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest\flushByTagCallsBackendIfItIsATaggableBackend
‪flushByTagCallsBackendIfItIsATaggableBackend()
Definition: AbstractFrontendTest.php:110
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest\theConstructorAcceptsValidIdentifiers
‪theConstructorAcceptsValidIdentifiers()
Definition: AbstractFrontendTest.php:33
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest
Definition: AbstractFrontendTest.php:29
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest\flushByTagsCallsBackendIfItIsATaggableBackend
‪flushByTagsCallsBackendIfItIsATaggableBackend()
Definition: AbstractFrontendTest.php:129
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest\collectGarbageCallsBackend
‪collectGarbageCallsBackend()
Definition: AbstractFrontendTest.php:148
‪TYPO3\CMS\Core\Cache\Frontend\VariableFrontend
Definition: VariableFrontend.php:25
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest\validTagsAreRecognizedAsValid
‪validTagsAreRecognizedAsValid()
Definition: AbstractFrontendTest.php:215
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest\validEntryIdentifiersAreRecognizedAsValid
‪validEntryIdentifiersAreRecognizedAsValid()
Definition: AbstractFrontendTest.php:183
‪TYPO3\CMS\Core\Cache\Backend\AbstractBackend
Definition: AbstractBackend.php:28
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest\flushByTagRejectsInvalidTags
‪flushByTagRejectsInvalidTags()
Definition: AbstractFrontendTest.php:92
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest\invalidTagsAreRecognizedAsInvalid
‪invalidTagsAreRecognizedAsInvalid()
Definition: AbstractFrontendTest.php:199
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest\invalidEntryIdentifiersAreRecognizedAsInvalid
‪invalidEntryIdentifiersAreRecognizedAsInvalid()
Definition: AbstractFrontendTest.php:167