[!!!][TASK] Extract testing framework for TYPO3
[Packages/TYPO3.CMS.git] / typo3 / sysext / core / Tests / Unit / Resource / AbstractFileTest.php
1 <?php
2 namespace TYPO3\CMS\Core\Tests\Unit\Resource;
3
4 /*
5 * This file is part of the TYPO3 CMS project.
6 *
7 * It is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU General Public License, either version 2
9 * of the License, or any later version.
10 *
11 * For the full copyright and license information, please read the
12 * LICENSE.txt file that was distributed with this source code.
13 *
14 * The TYPO3 project - inspiring people to share!
15 */
16
17 use TYPO3\CMS\Core\Resource\AbstractFile;
18 use TYPO3\CMS\Core\Resource\File;
19 use TYPO3\CMS\Core\Resource\ResourceStorage;
20
21 /**
22 * Testcase for the abstract file class of the TYPO3 FAL
23 */
24 class AbstractFileTest extends \TYPO3\CMS\Components\TestingFramework\Core\UnitTestCase
25 {
26 /**
27 * @test
28 */
29 public function getParentFolderGetsParentFolderFromStorage()
30 {
31 $parentIdentifier = '/parent/';
32 $currentIdentifier = '/parent/current/';
33
34 /** @var ResourceStorage|\PHPUnit_Framework_MockObject_MockObject $mockedStorageForParent */
35 $mockedStorageForParent = $this->createMock(ResourceStorage::class);
36
37 /** @var AbstractFile $parentFolderFixture */
38 $parentFolderFixture = $this->getMockForAbstractClass(AbstractFile::class);
39 $parentFolderFixture->setIdentifier($parentIdentifier)->setStorage($mockedStorageForParent);
40
41 /** @var ResourceStorage|\PHPUnit_Framework_MockObject_MockObject $mockedStorage */
42 $mockedStorage = $this->getMockBuilder(ResourceStorage::class)
43 ->setMethods(['getFolderIdentifierFromFileIdentifier', 'getFolder'])
44 ->disableOriginalConstructor()
45 ->getMock();
46 $mockedStorage->expects($this->once())->method('getFolderIdentifierFromFileIdentifier')->with($currentIdentifier)->will($this->returnValue($parentIdentifier));
47 $mockedStorage->expects($this->once())->method('getFolder')->with($parentIdentifier)->will($this->returnValue($parentFolderFixture));
48
49 /** @var AbstractFile $currentFolderFixture */
50 $currentFolderFixture = $this->getMockForAbstractClass(AbstractFile::class);
51 $currentFolderFixture->setIdentifier($currentIdentifier)->setStorage($mockedStorage);
52
53 $this->assertSame($parentFolderFixture, $currentFolderFixture->getParentFolder());
54 }
55
56 /**
57 * This test accounts for an inconsistency in the Storage–Driver interface of FAL: The driver returns the MIME
58 * type in a field "mimetype", while the file object and the database table use mime_type.
59 * The test is placed in the test case for AbstractFile because the broken functionality resides there, though
60 * it is only triggered when constructing a File instance with an index record.
61 *
62 * @test
63 */
64 public function storageIsNotAskedForMimeTypeForPersistedRecord()
65 {
66 /** @var ResourceStorage|\PHPUnit_Framework_MockObject_MockObject $mockedStorage */
67 $mockedStorage = $this->getMockBuilder(ResourceStorage::class)->disableOriginalConstructor()->getMock();
68 $mockedStorage->expects($this->never())->method('getFileInfoByIdentifier')->with('/foo', 'mimetype');
69 $subject = new File(['identifier' => '/foo', 'mime_type' => 'my/mime-type'], $mockedStorage);
70
71 $this->assertEquals('my/mime-type', $subject->getMimeType());
72 }
73 }