Files
oai-symfony/typo3conf/ext/news/Tests/Unit/Utility/TypoScriptTest.php
2026-07-03 17:53:31 +02:00

274 lines
7.4 KiB
PHP

<?php
namespace GeorgRinger\News\Tests\Unit\Utility;
/**
* This file is part of the "news" Extension for TYPO3 CMS.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*/
use GeorgRinger\News\Utility\TypoScript;
use TYPO3\TestingFramework\Core\BaseTestCase;
/**
* Test class for TypoScript
*
*/
class TypoScriptTest extends BaseTestCase
{
/**
* @test
*
* @dataProvider overrideWorksDataProvider
*
* @return void
*/
public function overrideWorks($base, $overload, $expected): void
{
$utility = new TypoScript();
$result = $utility->override($base, $overload);
$this->assertEquals($expected, $result);
}
/**
* Data provider
*
* @return array
*/
public function overrideWorksDataProvider()
{
return [
'basic' => [
[
'value_1' => 'fo',
'value_2' => ''
],
[],
[
'value_1' => 'fo',
'value_2' => ''
]
],
'simple' => [
[
'value_1' => 'fo',
'value_2' => ''
],
[
'settings' => [
'value_2' => 'bar',
'overrideFlexformSettingsIfEmpty' => 'value_2'
]
],
[
'value_1' => 'fo',
'value_2' => 'bar'
]
],
'simple2' => [
[
'value_1' => 'fo',
'sub' => [
'sub_1' => 'xy'
]
],
[
'settings' => [
'value_2' => 'bar',
'overrideFlexformSettingsIfEmpty' => 'value_2'
]
],
[
'value_1' => 'fo',
'value_2' => 'bar',
'sub' => [
'sub_1' => 'xy'
]
]
],
'deep' => [
[
'value_1' => 'fo',
'sub_1' => [
'sub_1a' => ''
],
'sub_2' => [
'sub_2a' => 'xy',
],
],
[
'settings' => [
'value_2' => 'bar',
'sub_1' => [
'sub_1a' => 'lorem'
],
'sub_2' => [
'sub_2a' => 'xy',
'sub_2b' => 'abc'
],
'overrideFlexformSettingsIfEmpty' => 'value_2, sub_1.sub_1a,sub_2.sub_2b'
]
],
[
'value_1' => 'fo',
'value_2' => 'bar',
'sub_1' => [
'sub_1a' => 'lorem'
],
'sub_2' => [
'sub_2a' => 'xy',
],
]
],
];
}
/**
* @test
*
* @dataProvider correctValueIsReturnedDataProvider
*
* @return void
*/
public function correctValueIsReturned($path, $expected): void
{
$mockedUtility = $this->getAccessibleMock(TypoScript::class, ['dummy']);
$in = [
'level_1' => [
'in_1' => 'value in 1',
'level_2' => [
'level_3' => [
'in_3' => 'value in 3'
]
]
]
];
$path = explode('.', $path);
$result = $mockedUtility->_call('getValue', $in, $path);
$this->assertEquals($expected, $result);
}
/**
* Data provider
*
* @return array
*/
public function correctValueIsReturnedDataProvider()
{
return [
'valueFoundInDeepLevel' => [
'level_1.level_2.level_3.in_3', 'value in 3'
],
'valueFoundInFirstLevel' => [
'level_1.in_1', 'value in 1'
],
'firstLevelNotFound' => [
'wrong.wronger.stillWrong', null
],
'lastLevelNotFound' => [
'level_1.level_2.level_3.in_Nothing', null
],
];
}
/**
* @test
*
* @dataProvider correctValueIsSetDataProvider
*
* @return void
*/
public function correctValueIsSet($path, $newValue, $expected): void
{
$mockedUtility = $this->getAccessibleMock(TypoScript::class, ['dummy'], [], '', true, false);
$in = [
'level_1' => [
'in_1' => 'value in 1',
'level_2' => [
'level_3' => [
'in_3' => 'value in 3'
]
]
]
];
$path = explode('.', $path);
$result = $mockedUtility->_call('setValue', $in, $path, $newValue);
$this->assertEquals($expected, $result);
}
/**
* Data provider
*
* @return array
*/
public function correctValueIsSetDataProvider()
{
return [
'overrideValueLow' => [
'level_1.in_1',
'new value in 1',
[
'level_1' => [
'in_1' => 'new value in 1',
'level_2' => [
'level_3' => [
'in_3' => 'value in 3'
]
]
]
]
],
'overrideValueDeep' => [
'level_1.level_2.level_3.in_3',
'new value in 3',
[
'level_1' => [
'in_1' => 'value in 1',
'level_2' => [
'level_3' => [
'in_3' => 'new value in 3'
]
]
]
]
],
'newValueDeep' => [
'level_1.level_2.level_3.level_4.level_5.in_5',
'new value in 5',
[
'level_1' => [
'in_1' => 'value in 1',
'level_2' => [
'level_3' => [
'in_3' => 'value in 3',
'level_4' => [
'level_5' => [
'in_5' => 'new value in 5'
]
]
]
]
]
]
],
'overrideArrayWithValue' => [
'level_1.level_2',
'new value as 2',
[
'level_1' => [
'in_1' => 'value in 1',
'level_2' => 'new value as 2'
]
]
],
];
}
}