Initial commit - Typo3 11.5.41

This commit is contained in:
Matteo Gallo
2026-07-03 17:53:31 +02:00
commit 5ca4743197
6811 changed files with 568848 additions and 0 deletions

View File

@@ -0,0 +1,221 @@
<?php
namespace GeorgRinger\News\Tests\Unit\ViewHelpers;
/**
* 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\Domain\Model\Category;
use GeorgRinger\News\Domain\Model\News;
use GeorgRinger\News\Service\SettingsService;
use GeorgRinger\News\ViewHelpers\LinkViewHelper;
use TYPO3\CMS\Extbase\Persistence\ObjectStorage;
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
use TYPO3\TestingFramework\Core\BaseTestCase;
use TYPO3Fluid\Fluid\Core\ViewHelper\TagBuilder;
/**
* Test for LinkViewHelper
*/
class LinkViewHelperTest extends BaseTestCase
{
protected $mockedContentObjectRenderer;
protected $mockedViewHelper;
/** @var News */
protected $newsItem;
/**
* Set up
*/
public function setup(): void
{
$this->newsItem = new News();
$this->mockedViewHelper = $this->getAccessibleMock(LinkViewHelper::class, ['init', 'renderChildren']);
$this->mockedContentObjectRenderer = $this->getAccessibleMock(ContentObjectRenderer::class, ['typoLink_URL', 'typoLink']);
$pluginSettings = $this->getAccessibleMock(SettingsService::class, ['getSettings']);
$tag = $this->getAccessibleMock(TagBuilder::class, ['addAttribute', 'setContent', 'render']);
$this->mockedViewHelper->_set('cObj', $this->mockedContentObjectRenderer);
$this->mockedViewHelper->_set('tag', $tag);
$this->mockedViewHelper->_set('pluginSettingsService', $pluginSettings);
$this->mockedViewHelper->_set('arguments', ['newsItem' => $this->newsItem]);
}
/**
* @test
*
* @return void
*/
public function internalPageIsUsed(): void
{
$url = '123';
$result = ['parameter' => $url];
$this->mockedContentObjectRenderer->expects($this->once())->method('typoLink_URL')->with($result);
$this->newsItem->setType(1);
$this->newsItem->setInternalurl($url);
$this->mockedViewHelper->render();
}
/**
* @test
*
* @return void
*/
public function externalUrlIsUsed(): void
{
$url = 'http://www.typo3.org';
$result = ['parameter' => $url];
$this->mockedContentObjectRenderer->expects($this->once())->method('typoLink_URL')->with($result);
$this->newsItem->setType(2);
$this->newsItem->setExternalurl($url);
$this->mockedViewHelper->render();
}
/**
* @test
*
* @return void
*/
public function humanReadAbleDateIsAddedToConfiguration(): void
{
$dateTime = new \DateTime('2014-05-16');
$newsItem = new \GeorgRinger\News\Domain\Model\News();
$newsItem->_setProperty('uid', 123);
$newsItem->setDatetime($dateTime);
$tsSettings = [
'link' => [
'hrDate' => [
'_typoScriptNodeValue' => 1,
'day' => 'j',
'month' => 'n',
'year' => 'Y',
]
]
];
$configuration = [];
$expected = '&tx_news_pi1[news]=123&tx_news_pi1[controller]=News&tx_news_pi1[action]=detail&tx_news_pi1[day]=16&tx_news_pi1[month]=5&tx_news_pi1[year]=2014';
$result = $this->mockedViewHelper->_call('getLinkToNewsItem', $newsItem, $tsSettings, $configuration);
$this->assertEquals($expected, $result['additionalParams']);
}
/**
* @test
*
* @return void
*/
public function getDetailPidFromCategoriesReturnsCorrectValue(): void
{
$viewHelper = $this->getAccessibleMock(LinkViewHelper::class, ['dummy']);
$newsItem = new \GeorgRinger\News\Domain\Model\News();
$categories = new ObjectStorage();
$category1 = new Category();
$categories->attach($category1);
$category2 = new Category();
$category2->setSinglePid('123');
$categories->attach($category2);
$category3 = new Category();
$category3->setSinglePid('456');
$categories->attach($category3);
$newsItem->setCategories($categories);
$result = $viewHelper->_call('getDetailPidFromCategories', [], $newsItem);
$this->assertEquals(123, $result);
}
/**
* @test
*
* @dataProvider getDetailPidFromDefaultDetailPidReturnsCorrectValueDataProvider
*
* @return void
*/
public function getDetailPidFromDefaultDetailPidReturnsCorrectValue($settings, $expected): void
{
$viewHelper = $this->getAccessibleMock(LinkViewHelper::class, ['dummy']);
$result = $viewHelper->_call('getDetailPidFromDefaultDetailPid', $settings, null);
$this->assertEquals($expected, $result);
}
/**
* @return (int|null|string[])[][]
*
* @psalm-return array{0: array{0: null, 1: int}, 1: array{0: array<empty, empty>, 1: int}, 2: array{0: array{defaultDetailPid: string}, 1: int}, 3: array{0: array{defaultDetailPid: string}, 1: int}}
*/
public function getDetailPidFromDefaultDetailPidReturnsCorrectValueDataProvider(): array
{
return [
[null, 0],
[[], 0],
[['defaultDetailPid' => '789'], 789],
[['defaultDetailPid' => '45xy'], 45],
];
}
/**
* @test
*
* @dataProvider getDetailPidFromFlexformReturnsCorrectValueDataProvider
*
* @return void
*/
public function getDetailPidFromFlexformReturnsCorrectValue($settings, $expected): void
{
$viewHelper = $this->getAccessibleMock(LinkViewHelper::class, ['dummy']);
$result = $viewHelper->_call('getDetailPidFromFlexform', $settings, null);
$this->assertEquals($expected, $result);
}
public function getDetailPidFromFlexformReturnsCorrectValueDataProvider(): array
{
return [
[null, 0],
[[], 0],
[['detailPid' => '123'], 123],
[['detailPid' => '456xy'], 456],
];
}
/**
* @test
*
* @return void
*/
public function noNewsReturnsChildren(): void
{
$settingService = $this->getAccessibleMock(SettingsService::class, ['getConfiguration', 'getSettings']);
$viewHelper = $this->getAccessibleMock(LinkViewHelper::class, ['renderChildren', 'getSettings']);
$viewHelper->_set('pluginSettingsService', $settingService);
$viewHelper->setArguments([
'newsItem' => null,
'settings' => [
'useStdWrap' => false
],
'configuration' => [],
'uriOnly' => false,
'content' => ''
]);
$result = $viewHelper->_call('render');
$this->assertEquals('', $result);
}
}