‪TYPO3CMS  ‪main
FileReferenceTest.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\DataProvider;
21 use PHPUnit\Framework\Attributes\Test;
22 use PHPUnit\Framework\MockObject\MockObject;
26 use TYPO3\TestingFramework\Core\AccessibleObjectInterface;
27 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
28 
29 final class ‪FileReferenceTest extends UnitTestCase
30 {
31  protected function ‪prepareFixture(array $fileReferenceProperties, array $originalFileProperties): ‪FileReference&MockObject&AccessibleObjectInterface
32  {
33  $fixture = $this->getAccessibleMock(FileReference::class, null, [], '', false);
34  $originalFileMock = $this->createMock(File::class);
35  $originalFileMock->method('getProperties')
36  ->willReturn(
37  $originalFileProperties
38  );
39  $fixture->_set('originalFile', $originalFileMock);
40  $fixture->_set('propertiesOfFileReference', $fileReferenceProperties);
41 
42  return $fixture;
43  }
44 
45  public static function ‪propertiesDataProvider(): array
46  {
47  return [
48  'File properties correctly override file reference properties' => [
49  [
50  'title' => null,
51  'description' => 'fileReferenceDescription',
52  'alternative' => '',
53  ],
54  [
55  'title' => 'fileTitle',
56  'description' => 'fileDescription',
57  'alternative' => 'fileAlternative',
58  'file_only_property' => 'fileOnlyPropertyValue',
59  ],
60  [
61  'title' => 'fileTitle',
62  'description' => 'fileReferenceDescription',
63  'alternative' => '',
64  'file_only_property' => 'fileOnlyPropertyValue',
65  ],
66  ],
67  ];
68  }
69 
70  #[DataProvider('propertiesDataProvider')]
71  #[Test]
72  public function ‪getPropertiesReturnsMergedPropertiesAndRespectsNullValues(array $fileReferenceProperties, array $originalFileProperties, array $expectedMergedProperties): void
73  {
74  $fixture = $this->‪prepareFixture($fileReferenceProperties, $originalFileProperties);
75  $actual = $fixture->getProperties();
76  self::assertSame($expectedMergedProperties, $actual);
77  }
78 
79  #[DataProvider('propertiesDataProvider')]
80  #[Test]
81  public function ‪hasPropertyReturnsTrueForAllMergedPropertyKeys(array $fileReferenceProperties, array $originalFileProperties, array $expectedMergedProperties): void
82  {
83  $fixture = $this->‪prepareFixture($fileReferenceProperties, $originalFileProperties);
84  foreach ($expectedMergedProperties as $key => $_) {
85  self::assertTrue($fixture->hasProperty($key));
86  }
87  }
88 
89  #[DataProvider('propertiesDataProvider')]
90  #[Test]
91  public function ‪getPropertyReturnsAllMergedPropertyKeys(array $fileReferenceProperties, array $originalFileProperties, array $expectedMergedProperties): void
92  {
93  $fixture = $this->‪prepareFixture($fileReferenceProperties, $originalFileProperties);
94  foreach ($expectedMergedProperties as $key => $expectedValue) {
95  self::assertSame($expectedValue, $fixture->getProperty($key));
96  }
97  }
98 
99  #[DataProvider('propertiesDataProvider')]
100  #[Test]
101  public function ‪getPropertyThrowsExceptionForNotAvailableProperty(array $fileReferenceProperties, array $originalFileProperties): void
102  {
103  $this->expectException(\InvalidArgumentException::class);
104  $this->expectExceptionCode(1314226805);
105 
106  $fixture = $this->‪prepareFixture($fileReferenceProperties, $originalFileProperties);
107  $fixture->getProperty(‪StringUtility::getUniqueId('nothingHere'));
108  }
109 
110  #[DataProvider('propertiesDataProvider')]
111  #[Test]
113  array $fileReferenceProperties,
114  array $originalFileProperties
115  ): void {
116  $fixture = $this->‪prepareFixture($fileReferenceProperties, $originalFileProperties);
117  self::assertSame($originalFileProperties['file_only_property'], $fixture->getProperty('file_only_property'));
118  }
119 
120  #[DataProvider('propertiesDataProvider')]
121  #[Test]
123  array $fileReferenceProperties,
124  array $originalFileProperties
125  ): void {
126  $this->expectException(\InvalidArgumentException::class);
127  $this->expectExceptionCode(1360684914);
128 
129  $fixture = $this->‪prepareFixture($fileReferenceProperties, $originalFileProperties);
130  $fixture->getReferenceProperty('file_only_property');
131  }
132 
133  #[Test]
135  {
136  $fixture = $this->‪prepareFixture(['title' => null], []);
137  self::assertSame('', $fixture->getTitle());
138  }
139 
140  #[Test]
142  {
143  $fixture = $this->‪prepareFixture(['alternative' => null], []);
144  self::assertSame('', $fixture->getAlternative());
145  }
146 
147  #[Test]
149  {
150  $fixture = $this->‪prepareFixture(['description' => null], []);
151  self::assertSame('', $fixture->getDescription());
152  }
153 }
‪TYPO3\CMS\Core\Tests\Unit\Resource\FileReferenceTest\getPropertyDoesNotThrowExceptionForPropertyOnlyAvailableInOriginalFile
‪getPropertyDoesNotThrowExceptionForPropertyOnlyAvailableInOriginalFile(array $fileReferenceProperties, array $originalFileProperties)
Definition: FileReferenceTest.php:112
‪TYPO3\CMS\Core\Tests\Unit\Resource\FileReferenceTest\getReferencePropertyThrowsExceptionForPropertyOnlyAvailableInOriginalFile
‪getReferencePropertyThrowsExceptionForPropertyOnlyAvailableInOriginalFile(array $fileReferenceProperties, array $originalFileProperties)
Definition: FileReferenceTest.php:122
‪TYPO3\CMS\Core\Tests\Unit\Resource
Definition: AbstractFileTest.php:18
‪TYPO3\CMS\Core\Resource\FileReference
Definition: FileReference.php:37
‪TYPO3\CMS\Core\Tests\Unit\Resource\FileReferenceTest\getAlternativeReturnsEmptyStringWhenPropertyValueIsNull
‪getAlternativeReturnsEmptyStringWhenPropertyValueIsNull()
Definition: FileReferenceTest.php:141
‪TYPO3\CMS\Core\Tests\Unit\Resource\FileReferenceTest\getTitleReturnsEmptyStringWhenPropertyValueIsNull
‪getTitleReturnsEmptyStringWhenPropertyValueIsNull()
Definition: FileReferenceTest.php:134
‪TYPO3\CMS\Core\Tests\Unit\Resource\FileReferenceTest
Definition: FileReferenceTest.php:30
‪TYPO3\CMS\Core\Tests\Unit\Resource\FileReferenceTest\getPropertyReturnsAllMergedPropertyKeys
‪getPropertyReturnsAllMergedPropertyKeys(array $fileReferenceProperties, array $originalFileProperties, array $expectedMergedProperties)
Definition: FileReferenceTest.php:91
‪TYPO3\CMS\Core\Resource\File
Definition: File.php:26
‪TYPO3\CMS\Core\Tests\Unit\Resource\FileReferenceTest\getDescriptionReturnsEmptyStringWhenPropertyValueIsNull
‪getDescriptionReturnsEmptyStringWhenPropertyValueIsNull()
Definition: FileReferenceTest.php:148
‪TYPO3\CMS\Core\Tests\Unit\Resource\FileReferenceTest\propertiesDataProvider
‪static propertiesDataProvider()
Definition: FileReferenceTest.php:45
‪TYPO3\CMS\Core\Tests\Unit\Resource\FileReferenceTest\getPropertiesReturnsMergedPropertiesAndRespectsNullValues
‪getPropertiesReturnsMergedPropertiesAndRespectsNullValues(array $fileReferenceProperties, array $originalFileProperties, array $expectedMergedProperties)
Definition: FileReferenceTest.php:72
‪TYPO3\CMS\Core\Tests\Unit\Resource\FileReferenceTest\hasPropertyReturnsTrueForAllMergedPropertyKeys
‪hasPropertyReturnsTrueForAllMergedPropertyKeys(array $fileReferenceProperties, array $originalFileProperties, array $expectedMergedProperties)
Definition: FileReferenceTest.php:81
‪TYPO3\CMS\Core\Utility\StringUtility
Definition: StringUtility.php:24
‪TYPO3\CMS\Core\Tests\Unit\Resource\FileReferenceTest\getPropertyThrowsExceptionForNotAvailableProperty
‪getPropertyThrowsExceptionForNotAvailableProperty(array $fileReferenceProperties, array $originalFileProperties)
Definition: FileReferenceTest.php:101
‪TYPO3\CMS\Core\Tests\Unit\Resource\FileReferenceTest\prepareFixture
‪prepareFixture(array $fileReferenceProperties, array $originalFileProperties)
Definition: FileReferenceTest.php:31
‪TYPO3\CMS\Core\Utility\StringUtility\getUniqueId
‪static getUniqueId(string $prefix='')
Definition: StringUtility.php:57