‪TYPO3CMS  ‪main
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 
20 use PHPUnit\Framework\Attributes\Test;
24 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
25 
29 final class ‪AbstractFrontendTest extends UnitTestCase
30 {
31  #[Test]
33  {
34  $mockBackend = $this->getMockBuilder(AbstractBackend::class)
35  ->onlyMethods(['get', 'set', 'has', 'remove', 'flush', 'collectGarbage'])
36  ->addMethods(['findIdentifiersByTag', 'flushByTag'])
37  ->disableOriginalConstructor()
38  ->getMock();
39  foreach (['x', 'someValue', '123fivesixseveneight', 'some&', 'ab_cd%', rawurlencode('resource://some/äöü$&% sadf'), str_repeat('x', 250)] as ‪$identifier) {
40  $this->getMockBuilder(VariableFrontend::class)
41  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove', 'flush', 'flushByTag', 'collectGarbage'])
42  ->setConstructorArgs([‪$identifier, $mockBackend])
43  ->getMock();
44  }
45  }
46 
47  #[Test]
49  {
50  $mockBackend = $this->getMockBuilder(AbstractBackend::class)
51  ->onlyMethods(['get', 'set', 'has', 'remove', 'flush', 'collectGarbage'])
52  ->addMethods(['findIdentifiersByTag', 'flushByTag'])
53  ->disableOriginalConstructor()
54  ->getMock();
55  foreach (['', 'abc def', 'foo!', 'bar:', 'some/', 'bla*', 'one+', 'äöü', str_repeat('x', 251), 'x$', '\\a', 'b#'] as ‪$identifier) {
56  try {
57  $this->getMockBuilder(VariableFrontend::class)
58  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove', 'flush', 'flushByTag', 'collectGarbage'])
59  ->setConstructorArgs([‪$identifier, $mockBackend])
60  ->getMock();
61  self::fail('Identifier "' . ‪$identifier . '" was not rejected.');
62  } catch (\InvalidArgumentException $exception) {
63  }
64  }
65  }
66 
67  #[Test]
68  public function ‪flushCallsBackend(): void
69  {
70  ‪$identifier = 'someCacheIdentifier';
71  $backend = $this->getMockBuilder(AbstractBackend::class)
72  ->onlyMethods(['get', 'set', 'has', 'remove', 'flush', 'collectGarbage'])
73  ->addMethods(['findIdentifiersByTag', 'flushByTag'])
74  ->disableOriginalConstructor()
75  ->getMock();
76  $backend->expects(self::once())->method('flush');
77  $cache = $this->getMockBuilder(VariableFrontend::class)
78  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove'])
79  ->setConstructorArgs([‪$identifier, $backend])
80  ->getMock();
81  $cache->flush();
82  }
83 
84  #[Test]
85  public function ‪flushByTagRejectsInvalidTags(): void
86  {
87  $this->expectException(\InvalidArgumentException::class);
88  $this->expectExceptionCode(1233057359);
89 
90  ‪$identifier = 'someCacheIdentifier';
91  $backend = $this->createMock(TaggableBackendInterface::class);
92  $backend->expects(self::never())->method('flushByTag');
93  $cache = $this->getMockBuilder(VariableFrontend::class)
94  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove'])
95  ->setConstructorArgs([‪$identifier, $backend])
96  ->getMock();
97  $cache->flushByTag('SomeInvalid\\Tag');
98  }
99 
100  #[Test]
102  {
103  $tag = 'sometag';
104  ‪$identifier = 'someCacheIdentifier';
105  $backend = $this->getMockBuilder(TaggableBackendInterface::class)
106  ->onlyMethods(['setCache', 'get', 'set', 'has', 'remove', 'findIdentifiersByTag', 'flush', 'flushByTag', 'flushByTags', 'collectGarbage'])
107  ->disableOriginalConstructor()
108  ->getMock();
109  $backend->expects(self::once())->method('flushByTag')->with($tag);
110  $cache = $this->getMockBuilder(VariableFrontend::class)
111  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove'])
112  ->setConstructorArgs([‪$identifier, $backend])
113  ->getMock();
114  $cache->flushByTag($tag);
115  }
116 
117  #[Test]
119  {
120  $tag = 'sometag';
121  ‪$identifier = 'someCacheIdentifier';
122  $backend = $this->getMockBuilder(TaggableBackendInterface::class)
123  ->onlyMethods(['setCache', 'get', 'set', 'has', 'remove', 'findIdentifiersByTag', 'flush', 'flushByTag', 'flushByTags', 'collectGarbage'])
124  ->disableOriginalConstructor()
125  ->getMock();
126  $backend->expects(self::once())->method('flushByTags')->with([$tag]);
127  $cache = $this->getMockBuilder(VariableFrontend::class)
128  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove'])
129  ->setConstructorArgs([‪$identifier, $backend])
130  ->getMock();
131  $cache->flushByTags([$tag]);
132  }
133 
134  #[Test]
135  public function ‪collectGarbageCallsBackend(): void
136  {
137  ‪$identifier = 'someCacheIdentifier';
138  $backend = $this->getMockBuilder(AbstractBackend::class)
139  ->onlyMethods(['get', 'set', 'has', 'remove', 'flush', 'collectGarbage'])
140  ->addMethods(['findIdentifiersByTag', 'flushByTag'])
141  ->disableOriginalConstructor()
142  ->getMock();
143  $backend->expects(self::once())->method('collectGarbage');
144  $cache = $this->getMockBuilder(VariableFrontend::class)
145  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove'])
146  ->setConstructorArgs([‪$identifier, $backend])
147  ->getMock();
148  $cache->collectGarbage();
149  }
150 
151  #[Test]
153  {
154  ‪$identifier = 'someCacheIdentifier';
155  $backend = $this->createMock(AbstractBackend::class);
156  $cache = $this->getMockBuilder(VariableFrontend::class)
157  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove'])
158  ->setConstructorArgs([‪$identifier, $backend])
159  ->getMock();
160  foreach (['', 'abc def', 'foo!', 'bar:', 'some/', 'bla*', 'one+', 'äöü', str_repeat('x', 251), 'x$', '\\a', 'b#'] as $entryIdentifier) {
161  self::assertFalse($cache->isValidEntryIdentifier($entryIdentifier), 'Invalid identifier "' . $entryIdentifier . '" was not rejected.');
162  }
163  }
164 
165  #[Test]
167  {
168  ‪$identifier = 'someCacheIdentifier';
169  $backend = $this->createMock(AbstractBackend::class);
170  $cache = $this->getMockBuilder(VariableFrontend::class)
171  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove'])
172  ->setConstructorArgs([‪$identifier, $backend])
173  ->getMock();
174  foreach (['_', 'abcdef', 'foo', 'bar123', '3some', '_bl_a', 'some&', 'one%TWO', str_repeat('x', 250)] as $entryIdentifier) {
175  self::assertTrue($cache->isValidEntryIdentifier($entryIdentifier), 'Valid identifier "' . $entryIdentifier . '" was not accepted.');
176  }
177  }
178 
179  #[Test]
180  public function ‪invalidTagsAreRecognizedAsInvalid(): void
181  {
182  ‪$identifier = 'someCacheIdentifier';
183  $backend = $this->createMock(AbstractBackend::class);
184  $cache = $this->getMockBuilder(VariableFrontend::class)
185  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove'])
186  ->setConstructorArgs([‪$identifier, $backend])
187  ->getMock();
188  foreach (['', 'abc def', 'foo!', 'bar:', 'some/', 'bla*', 'one+', 'äöü', str_repeat('x', 251), 'x$', '\\a', 'b#'] as $tag) {
189  self::assertFalse($cache->isValidTag($tag), 'Invalid tag "' . $tag . '" was not rejected.');
190  }
191  }
192 
193  #[Test]
194  public function ‪validTagsAreRecognizedAsValid(): void
195  {
196  ‪$identifier = 'someCacheIdentifier';
197  $backend = $this->createMock(AbstractBackend::class);
198  $cache = $this->getMockBuilder(VariableFrontend::class)
199  ->onlyMethods(['__construct', 'get', 'set', 'has', 'remove'])
200  ->setConstructorArgs([‪$identifier, $backend])
201  ->getMock();
202  foreach (['abcdef', 'foo-bar', 'foo_baar', 'bar123', '3some', 'file%Thing', 'some&', '%x%', str_repeat('x', 250)] as $tag) {
203  self::assertTrue($cache->isValidTag($tag), 'Valid tag "' . $tag . '" was not accepted.');
204  }
205  }
206 }
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest\flushCallsBackend
‪flushCallsBackend()
Definition: AbstractFrontendTest.php:68
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest\theConstructorRejectsInvalidIdentifiers
‪theConstructorRejectsInvalidIdentifiers()
Definition: AbstractFrontendTest.php:48
‪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:101
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest\theConstructorAcceptsValidIdentifiers
‪theConstructorAcceptsValidIdentifiers()
Definition: AbstractFrontendTest.php:32
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest
Definition: AbstractFrontendTest.php:30
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest\flushByTagsCallsBackendIfItIsATaggableBackend
‪flushByTagsCallsBackendIfItIsATaggableBackend()
Definition: AbstractFrontendTest.php:118
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest\collectGarbageCallsBackend
‪collectGarbageCallsBackend()
Definition: AbstractFrontendTest.php:135
‪TYPO3\CMS\Core\Cache\Frontend\VariableFrontend
Definition: VariableFrontend.php:25
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest\validTagsAreRecognizedAsValid
‪validTagsAreRecognizedAsValid()
Definition: AbstractFrontendTest.php:194
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest\validEntryIdentifiersAreRecognizedAsValid
‪validEntryIdentifiersAreRecognizedAsValid()
Definition: AbstractFrontendTest.php:166
‪TYPO3\CMS\Core\Cache\Backend\AbstractBackend
Definition: AbstractBackend.php:28
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest\flushByTagRejectsInvalidTags
‪flushByTagRejectsInvalidTags()
Definition: AbstractFrontendTest.php:85
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest\invalidTagsAreRecognizedAsInvalid
‪invalidTagsAreRecognizedAsInvalid()
Definition: AbstractFrontendTest.php:180
‪TYPO3\CMS\Core\Tests\Unit\Cache\Frontend\AbstractFrontendTest\invalidEntryIdentifiersAreRecognizedAsInvalid
‪invalidEntryIdentifiersAreRecognizedAsInvalid()
Definition: AbstractFrontendTest.php:152
‪TYPO3\CMS\Webhooks\Message\$identifier
‪identifier readonly string $identifier
Definition: FileAddedMessage.php:37