‪TYPO3CMS  ‪main
ExtractorRegistryTest.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;
21 use PHPUnit\Framework\MockObject\MockObject;
24 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
25 
29 final class ‪ExtractorRegistryTest extends UnitTestCase
30 {
31  #[Test]
33  {
34  $extractorClass = 'a9f4d5e4ebb4b03547a2a6094e1170ac';
35  $extractorObject = $this->getMockBuilder(ExtractorInterface::class)
36  ->setMockClassName($extractorClass)
37  ->getMock();
38 
39  ‪$extractorRegistry = $this->‪getMockExtractorRegistry([[$extractorClass, $extractorObject]]);
40 
41  ‪$extractorRegistry->registerExtractionService($extractorClass);
42  self::assertContains($extractorObject, ‪$extractorRegistry->getExtractors());
43  }
44 
45  #[Test]
47  {
48  $this->expectException(\InvalidArgumentException::class);
49  $this->expectExceptionCode(1422705270);
50 
51  $className = 'e1f9aa4e1cd3aa7ff05dcdccb117156a';
53  ‪$extractorRegistry->registerExtractionService($className);
54  }
55 
56  #[Test]
58  {
59  $this->expectException(\InvalidArgumentException::class);
60  $this->expectExceptionCode(1422705271);
61 
62  $className = __CLASS__;
64  ‪$extractorRegistry->registerExtractionService($className);
65  }
66 
67  #[Test]
69  {
70  $extractorClass1 = 'db76010e5c24658c35ea1605cce2391d';
71  $extractorObject1 = $this->getMockBuilder(ExtractorInterface::class)
72  ->setMockClassName($extractorClass1)
73  ->getMock();
74  $extractorObject1->method('getExecutionPriority')->willReturn(1);
75 
76  $extractorClass2 = 'ad9195e2487eea33c8a2abd5cf33cba4';
77  $extractorObject2 = $this->getMockBuilder(ExtractorInterface::class)
78  ->setMockClassName($extractorClass2)
79  ->getMock();
80  $extractorObject2->method('getExecutionPriority')->willReturn(10);
81 
82  $extractorClass3 = 'cef9aa4e1cd3aa7ff05dcdccb117156a';
83  $extractorObject3 = $this->getMockBuilder(ExtractorInterface::class)
84  ->setMockClassName($extractorClass3)
85  ->getMock();
86  $extractorObject3->method('getExecutionPriority')->willReturn(2);
87 
88  $createdExtractorInstances = [
89  [$extractorClass1, $extractorObject1],
90  [$extractorClass2, $extractorObject2],
91  [$extractorClass3, $extractorObject3],
92  ];
93 
94  ‪$extractorRegistry = $this->‪getMockExtractorRegistry($createdExtractorInstances);
95  ‪$extractorRegistry->registerExtractionService($extractorClass1);
96  ‪$extractorRegistry->registerExtractionService($extractorClass2);
97  ‪$extractorRegistry->registerExtractionService($extractorClass3);
98 
99  $extractorInstances = ‪$extractorRegistry->getExtractors();
100 
101  self::assertInstanceOf($extractorClass2, $extractorInstances[0]);
102  self::assertInstanceOf($extractorClass3, $extractorInstances[1]);
103  self::assertInstanceOf($extractorClass1, $extractorInstances[2]);
104  }
105 
106  #[Test]
108  {
109  $extractorClass1 = 'b70551b2b2db62b6b15a9bbfcbd50614';
110  $extractorObject1 = $this->getMockBuilder(ExtractorInterface::class)
111  ->setMockClassName($extractorClass1)
112  ->getMock();
113  $extractorObject1->method('getExecutionPriority')->willReturn(1);
114 
115  $extractorClass2 = 'ac318f1659d278b79b38262f23a78d5d';
116  $extractorObject2 = $this->getMockBuilder(ExtractorInterface::class)
117  ->setMockClassName($extractorClass2)
118  ->getMock();
119  $extractorObject2->method('getExecutionPriority')->willReturn(1);
120 
121  $createdExtractorInstances = [
122  [$extractorClass1, $extractorObject1],
123  [$extractorClass2, $extractorObject2],
124  ];
125 
126  ‪$extractorRegistry = $this->‪getMockExtractorRegistry($createdExtractorInstances);
127  ‪$extractorRegistry->registerExtractionService($extractorClass1);
128  ‪$extractorRegistry->registerExtractionService($extractorClass2);
129 
130  $extractorInstances = ‪$extractorRegistry->getExtractors();
131  self::assertContains($extractorObject1, $extractorInstances);
132  self::assertContains($extractorObject2, $extractorInstances);
133  }
134 
135  #[Test]
137  {
138  $extractorClass1 = 'b70551b2b2db62b6b15a9bbfcbd50614';
139  $extractorObject1 = $this->getMockBuilder(ExtractorInterface::class)
140  ->setMockClassName($extractorClass1)
141  ->getMock();
142  $extractorObject1->method('getExecutionPriority')->willReturn(1);
143  $extractorObject1->method('getDriverRestrictions')->willReturn([]);
144 
145  $extractorClass2 = 'ac318f1659d278b79b38262f23a78d5d';
146  $extractorObject2 = $this->getMockBuilder(ExtractorInterface::class)
147  ->setMockClassName($extractorClass2)
148  ->getMock();
149  $extractorObject2->method('getExecutionPriority')->willReturn(1);
150  $extractorObject2->method('getDriverRestrictions')->willReturn(['Bla']);
151 
152  $createdExtractorInstances = [
153  [$extractorClass1, $extractorObject1],
154  [$extractorClass2, $extractorObject2],
155  ];
156 
157  ‪$extractorRegistry = $this->‪getMockExtractorRegistry($createdExtractorInstances);
158  ‪$extractorRegistry->registerExtractionService($extractorClass1);
159  ‪$extractorRegistry->registerExtractionService($extractorClass2);
160 
161  $extractorInstances = ‪$extractorRegistry->getExtractorsWithDriverSupport('Bla');
162  self::assertContains($extractorObject1, $extractorInstances);
163  self::assertContains($extractorObject2, $extractorInstances);
164  }
165 
166  #[Test]
168  {
169  $extractorClass1 = 'b70551b2b2db62b6b15a9bbfcbd50614';
170  $extractorObject1 = $this->getMockBuilder(ExtractorInterface::class)
171  ->setMockClassName($extractorClass1)
172  ->getMock();
173  $extractorObject1->method('getExecutionPriority')->willReturn(1);
174  $extractorObject1->method('getDriverRestrictions')->willReturn(['Foo']);
175 
176  $extractorClass2 = 'ac318f1659d278b79b38262f23a78d5d';
177  $extractorObject2 = $this->getMockBuilder(ExtractorInterface::class)
178  ->setMockClassName($extractorClass2)
179  ->getMock();
180  $extractorObject2->method('getExecutionPriority')->willReturn(1);
181  $extractorObject2->method('getDriverRestrictions')->willReturn(['Bla']);
182 
183  $createdExtractorInstances = [
184  [$extractorClass1, $extractorObject1],
185  [$extractorClass2, $extractorObject2],
186  ];
187 
188  ‪$extractorRegistry = $this->‪getMockExtractorRegistry($createdExtractorInstances);
189  ‪$extractorRegistry->registerExtractionService($extractorClass1);
190  ‪$extractorRegistry->registerExtractionService($extractorClass2);
191 
192  $extractorInstances = ‪$extractorRegistry->getExtractorsWithDriverSupport('Bla');
193  self::assertNotContains($extractorObject1, $extractorInstances);
194  self::assertContains($extractorObject2, $extractorInstances);
195  }
196 
200  protected function ‪getMockExtractorRegistry(array $createsExtractorInstances = []): ‪ExtractorRegistry&MockObject
201  {
202  ‪$extractorRegistry = $this->getMockBuilder(ExtractorRegistry::class)
203  ->onlyMethods(['createExtractorInstance'])
204  ->getMock();
205 
206  if (!empty($createsExtractorInstances)) {
208  ->method('createExtractorInstance')
209  ->willReturnMap($createsExtractorInstances);
210  }
211 
212  return ‪$extractorRegistry;
213  }
214 }
‪TYPO3\CMS\Core\Tests\Unit\Resource\Index\ExtractorRegistryTest\registeredExtractorClassCanBeRetrieved
‪registeredExtractorClassCanBeRetrieved()
Definition: ExtractorRegistryTest.php:32
‪$extractorRegistry
‪$extractorRegistry
Definition: ext_localconf.php:55
‪TYPO3\CMS\Core\Tests\Unit\Resource\Index\ExtractorRegistryTest\registerExtractorClassThrowsExceptionIfClassDoesNotImplementRightInterface
‪registerExtractorClassThrowsExceptionIfClassDoesNotImplementRightInterface()
Definition: ExtractorRegistryTest.php:57
‪TYPO3\CMS\Core\Tests\Unit\Resource\Index\ExtractorRegistryTest\registeredExtractorsCanBeFilteredByDriverType
‪registeredExtractorsCanBeFilteredByDriverType()
Definition: ExtractorRegistryTest.php:167
‪TYPO3\CMS\Core\Tests\Unit\Resource\Index\ExtractorRegistryTest
Definition: ExtractorRegistryTest.php:30
‪TYPO3\CMS\Core\Resource\Index\ExtractorInterface
Definition: ExtractorInterface.php:25
‪TYPO3\CMS\Core\Resource\Index\ExtractorRegistry
Definition: ExtractorRegistry.php:25
‪TYPO3\CMS\Core\Tests\Unit\Resource\Index\ExtractorRegistryTest\registeredExtractorClassWithSamePriorityAreAllReturned
‪registeredExtractorClassWithSamePriorityAreAllReturned()
Definition: ExtractorRegistryTest.php:107
‪TYPO3\CMS\Core\Tests\Unit\Resource\Index\ExtractorRegistryTest\registeredExtractorsCanBeFilteredByDriverTypeButNoTyeREstrictionIsTreatedAsCompatible
‪registeredExtractorsCanBeFilteredByDriverTypeButNoTyeREstrictionIsTreatedAsCompatible()
Definition: ExtractorRegistryTest.php:136
‪TYPO3\CMS\Core\Tests\Unit\Resource\Index
Definition: ExtractorRegistryTest.php:18
‪TYPO3\CMS\Core\Tests\Unit\Resource\Index\ExtractorRegistryTest\getMockExtractorRegistry
‪getMockExtractorRegistry(array $createsExtractorInstances=[])
Definition: ExtractorRegistryTest.php:200
‪TYPO3\CMS\Core\Tests\Unit\Resource\Index\ExtractorRegistryTest\registerExtractorClassThrowsExceptionIfClassDoesNotExist
‪registerExtractorClassThrowsExceptionIfClassDoesNotExist()
Definition: ExtractorRegistryTest.php:46
‪TYPO3\CMS\Core\Tests\Unit\Resource\Index\ExtractorRegistryTest\registerExtractorClassWithHighestPriorityIsFirstInResult
‪registerExtractorClassWithHighestPriorityIsFirstInResult()
Definition: ExtractorRegistryTest.php:68