2 declare(strict_types = 1);
27 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
39 $this->expectException(PersistenceManagerException::class);
40 $this->expectExceptionCode(1477679819);
42 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
46 $runtimeCache= $this->getMockBuilder(VariableFrontend::class)
47 ->setMethods([
'get',
'set'])
48 ->disableOriginalConstructor()
52 ->expects($this->any())
56 $mockFormPersistenceManager->_set(
'runtimeCache', $runtimeCache);
58 $input =
'-1:/user_uploads/_example.php';
59 $mockFormPersistenceManager->_call(
'load', $input);
67 $this->expectException(PersistenceManagerException::class);
68 $this->expectExceptionCode(1484071985);
70 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
74 $runtimeCache= $this->getMockBuilder(VariableFrontend::class)
75 ->setMethods([
'get',
'set'])
76 ->disableOriginalConstructor()
80 ->expects($this->any())
84 $mockFormPersistenceManager->_set(
'runtimeCache', $runtimeCache);
86 $mockFormPersistenceManager->_set(
'formSettings', [
87 'persistenceManager' => [
88 'allowedExtensionPaths' => [],
92 $input =
'EXT:form/Resources/Forms/_example.form.yaml';
93 $mockFormPersistenceManager->_call(
'load', $input);
101 $this->expectException(PersistenceManagerException::class);
102 $this->expectExceptionCode(1477679820);
104 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
108 $input =
'-1:/user_uploads/_example.php';
109 $mockFormPersistenceManager->_call(
'save', $input, []);
117 $this->expectException(PersistenceManagerException::class);
118 $this->expectExceptionCode(1477680881);
120 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
124 $mockFormPersistenceManager->_set(
'formSettings', [
125 'persistenceManager' => [
126 'allowSaveToExtensionPaths' =>
false,
130 $input =
'EXT:form/Resources/Forms/_example.form.yaml';
131 $mockFormPersistenceManager->_call(
'save', $input, []);
139 $this->expectException(PersistenceManagerException::class);
140 $this->expectExceptionCode(1484073571);
142 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
146 $runtimeCache= $this->getMockBuilder(VariableFrontend::class)
147 ->setMethods([
'get',
'set'])
148 ->disableOriginalConstructor()
152 ->expects($this->any())
156 $mockFormPersistenceManager->_set(
'runtimeCache', $runtimeCache);
158 $mockFormPersistenceManager->_set(
'formSettings', [
159 'persistenceManager' => [
160 'allowSaveToExtensionPaths' =>
true,
161 'allowedExtensionPaths' => [],
165 $input =
'EXT:form/Resources/Forms/_example.form.yaml';
166 $mockFormPersistenceManager->_call(
'save', $input, []);
174 $this->expectException(PersistenceManagerException::class);
175 $this->expectExceptionCode(1472239534);
177 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
181 $input =
'-1:/user_uploads/_example.php';
182 $mockFormPersistenceManager->_call(
'delete', $input);
190 $this->expectException(PersistenceManagerException::class);
191 $this->expectExceptionCode(1472239535);
193 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
197 $mockFormPersistenceManager
198 ->expects($this->any())
202 $input =
'-1:/user_uploads/_example.form.yaml';
203 $mockFormPersistenceManager->_call(
'delete', $input);
211 $this->expectException(PersistenceManagerException::class);
212 $this->expectExceptionCode(1472239536);
214 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
218 $mockFormPersistenceManager
219 ->expects($this->any())
223 $mockFormPersistenceManager->_set(
'formSettings', [
224 'persistenceManager' => [
225 'allowDeleteFromExtensionPaths' =>
false,
229 $input =
'EXT:form/Resources/Forms/_example.form.yaml';
230 $mockFormPersistenceManager->_call(
'delete', $input);
238 $this->expectException(PersistenceManagerException::class);
239 $this->expectExceptionCode(1484073878);
241 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
245 $runtimeCache= $this->getMockBuilder(VariableFrontend::class)
246 ->setMethods([
'get',
'set'])
247 ->disableOriginalConstructor()
251 ->expects($this->any())
255 $mockFormPersistenceManager->_set(
'runtimeCache', $runtimeCache);
257 $mockFormPersistenceManager
258 ->expects($this->any())
262 $mockFormPersistenceManager->_set(
'formSettings', [
263 'persistenceManager' => [
264 'allowDeleteFromExtensionPaths' =>
true,
265 'allowedExtensionPaths' => [],
269 $input =
'EXT:form/Resources/Forms/_example.form.yaml';
270 $mockFormPersistenceManager->_call(
'delete', $input);
278 $this->expectException(PersistenceManagerException::class);
279 $this->expectExceptionCode(1472239516);
281 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
286 $mockStorage = $this->getMockBuilder(ResourceStorage::class)
287 ->disableOriginalConstructor()
291 ->expects($this->any())
292 ->method(
'checkFileActionPermission')
295 $file =
new File([
'name' =>
'foo',
'identifier' =>
'',
'mime_type' =>
''], $mockStorage);
297 ->expects($this->any())
301 $mockFormPersistenceManager
302 ->expects($this->any())
303 ->method(
'getStorageByUid')
304 ->willReturn($mockStorage);
306 $mockFormPersistenceManager
307 ->expects($this->any())
311 $input =
'-1:/user_uploads/_example.form.yaml';
312 $mockFormPersistenceManager->_call(
'delete', $input);
320 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
324 $runtimeCache= $this->getMockBuilder(VariableFrontend::class)
325 ->setMethods([
'get',
'set'])
326 ->disableOriginalConstructor()
330 ->expects($this->any())
334 $mockFormPersistenceManager->_set(
'runtimeCache', $runtimeCache);
336 $mockFormPersistenceManager->_set(
'formSettings', [
337 'persistenceManager' => [
338 'allowedExtensionPaths' => [
339 'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures/'
344 $input =
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures/BlankForm.form.yaml';
345 $this->assertTrue($mockFormPersistenceManager->_call(
'exists', $input));
353 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
357 $input =
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures/BlankForm.txt';
358 $this->assertFalse($mockFormPersistenceManager->_call(
'exists', $input));
366 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
370 $mockFormPersistenceManager->_set(
'formSettings', [
371 'persistenceManager' => [
372 'allowedExtensionPaths' => [],
376 $input =
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures/BlankForm.yaml';
377 $this->assertFalse($mockFormPersistenceManager->_call(
'exists', $input));
385 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
389 $input =
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures/_BlankForm.yaml';
390 $this->assertFalse($mockFormPersistenceManager->_call(
'exists', $input));
398 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
402 $mockStorage = $this->getMockBuilder(ResourceStorage::class)
403 ->disableOriginalConstructor()
406 ->expects($this->any())
410 $mockFormPersistenceManager
411 ->expects($this->any())
412 ->method(
'getStorageByUid')
413 ->willReturn($mockStorage);
415 $input =
'-1:/user_uploads/_example.form.yaml';
416 $this->assertTrue($mockFormPersistenceManager->_call(
'exists', $input));
424 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
428 $mockStorage = $this->getMockBuilder(ResourceStorage::class)
429 ->disableOriginalConstructor()
432 ->expects($this->any())
436 $mockFormPersistenceManager
437 ->expects($this->any())
438 ->method(
'getStorageByUid')
439 ->willReturn($mockStorage);
441 $input =
'-1:/user_uploads/_example.php';
442 $this->assertFalse($mockFormPersistenceManager->_call(
'exists', $input));
450 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
454 $mockStorage = $this->getMockBuilder(ResourceStorage::class)
455 ->disableOriginalConstructor()
458 ->expects($this->any())
462 $mockFormPersistenceManager
463 ->expects($this->any())
464 ->method(
'getStorageByUid')
465 ->willReturn($mockStorage);
467 $input =
'-1:/user_uploads/_example.yaml';
468 $this->assertFalse($mockFormPersistenceManager->_call(
'exists', $input));
476 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
480 $mockFormPersistenceManager
481 ->expects($this->at(0))
485 $mockFormPersistenceManager
486 ->expects($this->at(1))
490 $mockFormPersistenceManager
491 ->expects($this->at(2))
496 $expected =
'-1:/user_uploads/example_2.form.yaml';
497 $this->assertSame($expected, $mockFormPersistenceManager->_call(
'getUniquePersistenceIdentifier', $input,
'-1:/user_uploads/'));
505 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
509 for ($attempts = 0; $attempts <= 99; $attempts++) {
510 $mockFormPersistenceManager
511 ->expects($this->at($attempts))
516 $mockFormPersistenceManager
517 ->expects($this->at(100))
522 $expected =
'#^-1:/user_uploads/example_([0-9]{10}).form.yaml$#';
524 $returnValue = $mockFormPersistenceManager->_call(
'getUniquePersistenceIdentifier', $input,
'-1:/user_uploads/');
525 $this->assertEquals(1, preg_match($expected, $returnValue));
533 $this->expectException(NoUniqueIdentifierException::class);
534 $this->expectExceptionCode(1477688567);
536 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
537 'checkForDuplicateIdentifier'
540 $mockFormPersistenceManager
541 ->expects($this->any())
542 ->method(
'checkForDuplicateIdentifier')
546 $mockFormPersistenceManager->_call(
'getUniqueIdentifier', $input);
554 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
555 'checkForDuplicateIdentifier'
558 for ($attempts = 0; $attempts <= 99; $attempts++) {
559 $mockFormPersistenceManager
560 ->expects($this->at($attempts))
561 ->method(
'checkForDuplicateIdentifier')
565 $mockFormPersistenceManager
566 ->expects($this->at(100))
567 ->method(
'checkForDuplicateIdentifier')
571 $expected =
'#^example_([0-9]{10})$#';
573 $returnValue = $mockFormPersistenceManager->_call(
'getUniqueIdentifier', $input);
574 $this->assertEquals(1, preg_match($expected, $returnValue));
582 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
586 $mockFormPersistenceManager
587 ->expects($this->at(0))
588 ->method(
'listForms')
591 'identifier' =>
'example',
596 $this->assertTrue($mockFormPersistenceManager->_call(
'checkForDuplicateIdentifier', $input));
604 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
608 $mockFormPersistenceManager
609 ->expects($this->at(0))
610 ->method(
'listForms')
613 'identifier' =>
'example',
617 $input =
'other-example';
618 $this->assertFalse($mockFormPersistenceManager->_call(
'checkForDuplicateIdentifier', $input));
626 $this->expectException(PersistenceManagerException::class);
627 $this->expectExceptionCode(1471630578);
629 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
633 $storage = $this->getMockBuilder(ResourceStorage::class)
634 ->disableOriginalConstructor()
638 ->expects($this->any())
639 ->method(
'checkFileActionPermission')
642 $file =
new File([
'name' =>
'foo',
'identifier' =>
'',
'mime_type' =>
''], $storage);
644 $resourceFactory = $this->getMockBuilder(ResourceFactory::class)
645 ->disableOriginalConstructor()
649 ->expects($this->any())
650 ->method(
'retrieveFileOrFolderObject')
653 $mockFormPersistenceManager->_set(
'resourceFactory', $resourceFactory);
655 $input =
'-1:/user_uploads/example.yaml';
656 $mockFormPersistenceManager->_call(
'retrieveFileByPersistenceIdentifier', $input);
664 $this->expectException(PersistenceManagerException::class);
665 $this->expectExceptionCode(1471630579);
667 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
671 $mockStorage = $this->getMockBuilder(ResourceStorage::class)
672 ->disableOriginalConstructor()
676 ->expects($this->any())
677 ->method(
'hasFolder')
680 $mockFormPersistenceManager
681 ->expects($this->any())
682 ->method(
'getStorageByUid')
683 ->willReturn($mockStorage);
685 $input =
'-1:/user_uploads/example.yaml';
686 $mockFormPersistenceManager->_call(
'getOrCreateFile', $input);
694 $this->expectException(PersistenceManagerException::class);
695 $this->expectExceptionCode(1471630580);
697 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
701 $mockStorage = $this->getMockBuilder(ResourceStorage::class)
702 ->disableOriginalConstructor()
706 ->expects($this->any())
707 ->method(
'hasFolder')
711 ->expects($this->any())
712 ->method(
'checkFileActionPermission')
715 $file =
new File([
'name' =>
'foo',
'identifier' =>
'',
'mime_type' =>
''], $mockStorage);
717 ->expects($this->any())
721 $mockFormPersistenceManager
722 ->expects($this->any())
723 ->method(
'getStorageByUid')
724 ->willReturn($mockStorage);
726 $input =
'-1:/user_uploads/example.yaml';
727 $mockFormPersistenceManager->_call(
'getOrCreateFile', $input);
735 $this->expectException(PersistenceManagerException::class);
736 $this->expectExceptionCode(1471630581);
738 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
742 $mockStorageRepository = $this->getMockBuilder(StorageRepository::class)
743 ->disableOriginalConstructor()
746 $mockStorageRepository
747 ->expects($this->any())
748 ->method(
'findByUid')
751 $mockFormPersistenceManager->_set(
'storageRepository', $mockStorageRepository);
752 $mockFormPersistenceManager->_call(
'getStorageByUid', -1);
760 $this->expectException(PersistenceManagerException::class);
761 $this->expectExceptionCode(1471630581);
763 $mockFormPersistenceManager = $this->getAccessibleMock(FormPersistenceManager::class, [
767 $mockStorageRepository = $this->getMockBuilder(StorageRepository::class)
768 ->disableOriginalConstructor()
771 $mockStorage = $this->getMockBuilder(ResourceStorage::class)
772 ->disableOriginalConstructor()
776 ->expects($this->any())
777 ->method(
'isBrowsable')
780 $mockStorageRepository
781 ->expects($this->any())
782 ->method(
'findByUid')
783 ->willReturn($mockStorage);
785 $mockFormPersistenceManager->_set(
'storageRepository', $mockStorageRepository);
786 $mockFormPersistenceManager->_call(
'getStorageByUid', -1);
793 'persistencePath' =>
'',
794 'allowedExtensionPaths' => [],
795 'allowedFileMounts' => [],
799 'persistencePath' =>
'-1:/user_uploads',
800 'allowedExtensionPaths' => [],
801 'allowedFileMounts' => [],
805 'persistencePath' =>
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures',
806 'allowedExtensionPaths' => [],
807 'allowedFileMounts' => [],
811 'persistencePath' =>
'-1:/user_uploads/',
812 'allowedExtensionPaths' => [],
813 'allowedFileMounts' => [],
817 'persistencePath' =>
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures/',
818 'allowedExtensionPaths' => [],
819 'allowedFileMounts' => [],
823 'persistencePath' =>
'-1:/user_uploads/example.form.yaml',
824 'allowedExtensionPaths' => [],
825 'allowedFileMounts' => [],
829 'persistencePath' =>
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures/BlankForm.form.yaml',
830 'allowedExtensionPaths' => [],
831 'allowedFileMounts' => [],
836 'persistencePath' =>
'-1:/user_uploads/',
837 'allowedExtensionPaths' => [],
838 'allowedFileMounts' => [
'-1:/some_path/'],
842 'persistencePath' =>
'-1:/user_uploads/',
843 'allowedExtensionPaths' => [],
844 'allowedFileMounts' => [
'-1:/user_uploads/'],
848 'persistencePath' =>
'-1:/user_uploads',
849 'allowedExtensionPaths' => [],
850 'allowedFileMounts' => [
'-1:/user_uploads/'],
854 'persistencePath' =>
'-1:/user_uploads/',
855 'allowedExtensionPaths' => [],
856 'allowedFileMounts' => [
'-1:/user_uploads'],
861 'persistencePath' =>
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures/',
862 'allowedExtensionPaths' => [
'EXT:some_extension/Tests/Unit/Mvc/Persistence/Fixtures/'],
863 'allowedFileMounts' => [],
867 'persistencePath' =>
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures/',
868 'allowedExtensionPaths' => [
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures/'],
869 'allowedFileMounts' => [],
873 'persistencePath' =>
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures',
874 'allowedExtensionPaths' => [
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures/'],
875 'allowedFileMounts' => [],
879 'persistencePath' =>
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures/',
880 'allowedExtensionPaths' => [
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures'],
881 'allowedFileMounts' => [],
886 'persistencePath' =>
'-1:/user_uploads/example.yaml',
887 'allowedExtensionPaths' => [],
888 'allowedFileMounts' => [
'-1:/some_path/'],
892 'persistencePath' =>
'-1:/user_uploads/example.form.yaml',
893 'allowedExtensionPaths' => [],
894 'allowedFileMounts' => [
'-1:/some_path/'],
898 'persistencePath' =>
'-1:/user_uploads/example.yaml',
899 'allowedExtensionPaths' => [],
900 'allowedFileMounts' => [
'-1:/user_uploads/'],
904 'persistencePath' =>
'-1:/user_uploads/example.yaml',
905 'allowedExtensionPaths' => [],
906 'allowedFileMounts' => [
'-1:/user_uploads'],
910 'persistencePath' =>
'-1:/user_uploads/example.form.yaml',
911 'allowedExtensionPaths' => [],
912 'allowedFileMounts' => [
'-1:/user_uploads/'],
916 'persistencePath' =>
'-1:/user_uploads/example.form.yaml',
917 'allowedExtensionPaths' => [],
918 'allowedFileMounts' => [
'-1:/user_uploads'],
923 'persistencePath' =>
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures/BlankForm.txt',
924 'allowedExtensionPaths' => [
'EXT:some_extension/Tests/Unit/Mvc/Persistence/Fixtures/'],
925 'allowedFileMounts' => [],
929 'persistencePath' =>
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures/BlankForm.form.yaml',
930 'allowedExtensionPaths' => [
'EXT:some_extension/Tests/Unit/Mvc/Persistence/Fixtures/'],
931 'allowedFileMounts' => [],
935 'persistencePath' =>
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures/BlankForm.txt',
936 'allowedExtensionPaths' => [
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures/'],
937 'allowedFileMounts' => [],
941 'persistencePath' =>
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures/BlankForm.txt',
942 'allowedExtensionPaths' => [
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures'],
943 'allowedFileMounts' => [],
947 'persistencePath' =>
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures/BlankForm.form.yaml',
948 'allowedExtensionPaths' => [
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures/'],
949 'allowedFileMounts' => [],
953 'persistencePath' =>
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures/BlankForm.form.yaml',
954 'allowedExtensionPaths' => [
'EXT:form/Tests/Unit/Mvc/Persistence/Fixtures'],
955 'allowedFileMounts' => [],
967 $formPersistenceManagerMock = $this->getAccessibleMock(FormPersistenceManager::class, [
971 $runtimeCacheMock = $this->getMockBuilder(VariableFrontend::class)
972 ->setMethods([
'get',
'set'])
973 ->disableOriginalConstructor()
977 ->expects(self::any())
981 $storageMock = $this->getMockBuilder(ResourceStorage::class)
982 ->disableOriginalConstructor()
986 ->expects(self::any())
987 ->method(
'getRootLevelFolder')
988 ->willReturn(
new Folder($storageMock,
'',
''));
991 ->expects(self::any())
992 ->method(
'getFileMounts')
996 ->expects(self::any())
997 ->method(
'getFolder')
998 ->willReturn(
new Folder($storageMock,
'',
''));
1000 $formPersistenceManagerMock
1001 ->expects(self::any())
1002 ->method(
'getStorageByUid')
1003 ->willReturn($storageMock);
1005 $formPersistenceManagerMock->_set(
'runtimeCache', $runtimeCacheMock);
1006 $formPersistenceManagerMock->_set(
'formSettings', [
1007 'persistenceManager' => [
1008 'allowedExtensionPaths' => $allowedExtensionPaths,
1009 'allowedFileMounts' => $allowedFileMounts,
1013 self::assertEquals($expected, $formPersistenceManagerMock->_call(
'isAllowedPersistencePath', $persistencePath));