Composer extensions
This commit is contained in:
20
typo3conf/ext/news/.editorconfig
Normal file
20
typo3conf/ext/news/.editorconfig
Normal file
@@ -0,0 +1,20 @@
|
||||
root = true
|
||||
|
||||
[{*.rst,*.rst.txt}]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
indent_style = space
|
||||
indent_size = 3
|
||||
max_line_length = 80
|
||||
|
||||
# MD-Files
|
||||
[*.md]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
max_line_length = 80
|
||||
@@ -1,76 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* This file is part of the TYPO3 CMS project.
|
||||
*
|
||||
* It is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License, either version 2
|
||||
* of the License, or any later version.
|
||||
*
|
||||
* For the full copyright and license information, please read the
|
||||
* LICENSE.txt file that was distributed with this source code.
|
||||
*
|
||||
* The TYPO3 project - inspiring people to share!
|
||||
*/
|
||||
/**
|
||||
* This file represents the configuration for Code Sniffing PSR-2-related
|
||||
* automatic checks of coding guidelines
|
||||
* Install @fabpot's great php-cs-fixer tool via
|
||||
*
|
||||
* $ composer global require friendsofphp/php-cs-fixer
|
||||
*
|
||||
* And then simply run
|
||||
*
|
||||
* $ php-cs-fixer fix --config ../Build/.php_cs
|
||||
*
|
||||
* inside the TYPO3 directory. Warning: This may take up to 10 minutes.
|
||||
*
|
||||
* For more information read:
|
||||
* http://www.php-fig.org/psr/psr-2/
|
||||
* http://cs.sensiolabs.org
|
||||
*/
|
||||
if (PHP_SAPI !== 'cli') {
|
||||
die('This script supports command line usage only. Please check your command.');
|
||||
}
|
||||
// Define in which folders to search and which folders to exclude
|
||||
// Exclude some directories that are excluded by Git anyways to speed up the sniffing
|
||||
$finder = PhpCsFixer\Finder::create()
|
||||
->in(__DIR__ . '/../');
|
||||
// Return a Code Sniffing configuration using
|
||||
// all sniffers needed for PSR-2
|
||||
// and additionally:
|
||||
// - Remove leading slashes in use clauses.
|
||||
// - PHP single-line arrays should not have trailing comma.
|
||||
// - Single-line whitespace before closing semicolon are prohibited.
|
||||
// - Remove unused use statements in the PHP source code
|
||||
// - Ensure Concatenation to have at least one whitespace around
|
||||
// - Remove trailing whitespace at the end of blank lines.
|
||||
return PhpCsFixer\Config::create()
|
||||
->setRiskyAllowed(true)
|
||||
->setRules([
|
||||
'@PSR2' => true,
|
||||
'no_leading_import_slash' => true,
|
||||
'no_trailing_comma_in_singleline_array' => true,
|
||||
'no_singleline_whitespace_before_semicolons' => true,
|
||||
'no_unused_imports' => true,
|
||||
'concat_space' => ['spacing' => 'one'],
|
||||
'no_whitespace_in_blank_line' => true,
|
||||
'ordered_imports' => true,
|
||||
'single_quote' => true,
|
||||
'no_empty_statement' => true,
|
||||
'no_extra_consecutive_blank_lines' => true,
|
||||
'phpdoc_no_package' => true,
|
||||
'phpdoc_scalar' => true,
|
||||
'no_blank_lines_after_phpdoc' => true,
|
||||
'array_syntax' => ['syntax' => 'short'],
|
||||
'whitespace_after_comma_in_array' => true,
|
||||
'function_typehint_space' => true,
|
||||
'hash_to_slash_comment' => true,
|
||||
'no_alias_functions' => true,
|
||||
'lowercase_cast' => true,
|
||||
'no_leading_namespace_whitespace' => true,
|
||||
'native_function_casing' => true,
|
||||
'self_accessor' => true,
|
||||
'no_short_bool_cast' => true,
|
||||
'no_unneeded_control_parentheses' => true
|
||||
])
|
||||
->setFinder($finder);
|
||||
@@ -1,34 +0,0 @@
|
||||
<!--
|
||||
Functional test suites setup
|
||||
|
||||
Functional tests should extend from \TYPO3\TestingFramework\Core\Tests\FunctionalTestCase,
|
||||
take a look at this class for further documentation on how to run the suite.
|
||||
|
||||
TYPO3 CMS functional test suite also needs phpunit bootstrap code, the
|
||||
file is located next to this .xml as FunctionalTestsBootstrap.php
|
||||
-->
|
||||
<phpunit
|
||||
backupGlobals="true"
|
||||
bootstrap="../.Build/vendor/typo3/testing-framework/Resources/Core/Build/FunctionalTestsBootstrap.php"
|
||||
colors="true"
|
||||
convertErrorsToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
forceCoversAnnotation="false"
|
||||
stopOnError="false"
|
||||
stopOnFailure="false"
|
||||
stopOnIncomplete="false"
|
||||
stopOnSkipped="false"
|
||||
verbose="false"
|
||||
beStrictAboutTestsThatDoNotTestAnything="false"
|
||||
>
|
||||
<testsuites>
|
||||
<testsuite name="Core tests">
|
||||
<directory>../Tests/Functional/</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
<filter>
|
||||
<whitelist>
|
||||
<directory>../Classes/</directory>
|
||||
</whitelist>
|
||||
</filter>
|
||||
</phpunit>
|
||||
@@ -1,34 +0,0 @@
|
||||
<!--
|
||||
Functional test suites setup
|
||||
|
||||
Functional tests should extend from \TYPO3\TestingFramework\Core\Tests\FunctionalTestCase,
|
||||
take a look at this class for further documentation on how to run the suite.
|
||||
|
||||
TYPO3 CMS functional test suite also needs phpunit bootstrap code, the
|
||||
file is located next to this .xml as FunctionalTestsBootstrap.php
|
||||
-->
|
||||
<phpunit
|
||||
backupGlobals="true"
|
||||
bootstrap="../../../../../vendor/typo3/testing-framework/Resources/Core/Build/FunctionalTestsBootstrap.php"
|
||||
colors="true"
|
||||
convertErrorsToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
forceCoversAnnotation="false"
|
||||
stopOnError="false"
|
||||
stopOnFailure="false"
|
||||
stopOnIncomplete="false"
|
||||
stopOnSkipped="false"
|
||||
verbose="false"
|
||||
beStrictAboutTestsThatDoNotTestAnything="false"
|
||||
>
|
||||
<testsuites>
|
||||
<testsuite name="Core tests">
|
||||
<directory>../../Tests/Functional/</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
<filter>
|
||||
<whitelist>
|
||||
<directory>../../Classes/</directory>
|
||||
</whitelist>
|
||||
</filter>
|
||||
</phpunit>
|
||||
@@ -1,27 +0,0 @@
|
||||
<phpunit
|
||||
backupGlobals="true"
|
||||
bootstrap="../../../../../../vendor/typo3/testing-framework/Resources/Core/Build/UnitTestsBootstrap.php"
|
||||
colors="true"
|
||||
convertErrorsToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
forceCoversAnnotation="false"
|
||||
processIsolation="false"
|
||||
stopOnError="false"
|
||||
stopOnFailure="false"
|
||||
stopOnIncomplete="false"
|
||||
stopOnSkipped="false"
|
||||
verbose="false"
|
||||
convertDeprecationsToExceptions="false"
|
||||
beStrictAboutTestsThatDoNotTestAnything="false"
|
||||
>
|
||||
<testsuites>
|
||||
<testsuite name="Core tests">
|
||||
<directory>../../Tests/Unit/</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
<filter>
|
||||
<whitelist>
|
||||
<directory>../../Classes/</directory>
|
||||
</whitelist>
|
||||
</filter>
|
||||
</phpunit>
|
||||
@@ -1,28 +0,0 @@
|
||||
<phpunit
|
||||
backupGlobals="true"
|
||||
bootstrap="../.Build/vendor/typo3/testing-framework/Resources/Core/Build/UnitTestsBootstrap.php"
|
||||
colors="true"
|
||||
convertErrorsToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
forceCoversAnnotation="false"
|
||||
processIsolation="false"
|
||||
stopOnError="false"
|
||||
stopOnFailure="false"
|
||||
stopOnIncomplete="false"
|
||||
stopOnSkipped="false"
|
||||
verbose="false"
|
||||
convertDeprecationsToExceptions="false"
|
||||
beStrictAboutTestsThatDoNotTestAnything="false"
|
||||
>
|
||||
<testsuites>
|
||||
<testsuite name="tests">
|
||||
<directory>../Tests/Unit/</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
<filter>
|
||||
<whitelist>
|
||||
<directory>../Classes/</directory>
|
||||
</whitelist>
|
||||
</filter>
|
||||
|
||||
</phpunit>
|
||||
@@ -1,24 +0,0 @@
|
||||
<phpunit backupGlobals="false"
|
||||
bootstrap="FunctionalTestsBootstrap.php"
|
||||
cacheResult="false"
|
||||
colors="true"
|
||||
convertErrorsToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
convertDeprecationsToExceptions="false"
|
||||
convertNoticesToExceptions="true"
|
||||
forceCoversAnnotation="false"
|
||||
stopOnError="false"
|
||||
stopOnFailure="false"
|
||||
stopOnIncomplete="false"
|
||||
stopOnSkipped="false"
|
||||
verbose="false"
|
||||
beStrictAboutTestsThatDoNotTestAnything="false"
|
||||
failOnWarning="true"
|
||||
failOnRisky="true">
|
||||
|
||||
<testsuites>
|
||||
<testsuite name="News tests">
|
||||
<directory>../Functional/</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
</phpunit>
|
||||
@@ -1,30 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* This file is part of the TYPO3 CMS project.
|
||||
*
|
||||
* It is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License, either version 2
|
||||
* of the License, or any later version.
|
||||
*
|
||||
* For the full copyright and license information, please read the
|
||||
* LICENSE.txt file that was distributed with this source code.
|
||||
*
|
||||
* The TYPO3 project - inspiring people to share!
|
||||
*/
|
||||
|
||||
/**
|
||||
* Boilerplate for a functional test phpunit boostrap file.
|
||||
*
|
||||
* This file is loosely maintained within TYPO3 testing-framework, extensions
|
||||
* are encouraged to not use it directly, but to copy it to an own place,
|
||||
* usually in parallel to a FunctionalTests.xml file.
|
||||
*
|
||||
* This file is defined in FunctionalTests.xml and called by phpunit
|
||||
* before instantiating the test suites.
|
||||
*/
|
||||
(static function () {
|
||||
$testbase = new \TYPO3\TestingFramework\Core\Testbase();
|
||||
$testbase->defineOriginalRootPath();
|
||||
$testbase->createDirectory(ORIGINAL_ROOT . 'typo3temp/var/tests');
|
||||
$testbase->createDirectory(ORIGINAL_ROOT . 'typo3temp/var/transient');
|
||||
})();
|
||||
@@ -1,24 +0,0 @@
|
||||
<phpunit backupGlobals="false"
|
||||
backupStaticAttributes="false"
|
||||
bootstrap="UnitTestsBootstrap.php"
|
||||
colors="true"
|
||||
convertErrorsToExceptions="true"
|
||||
convertWarningsToExceptions="true"
|
||||
convertDeprecationsToExceptions="false"
|
||||
forceCoversAnnotation="false"
|
||||
processIsolation="false"
|
||||
stopOnError="false"
|
||||
stopOnFailure="false"
|
||||
stopOnIncomplete="false"
|
||||
stopOnSkipped="false"
|
||||
strict="false"
|
||||
verbose="false">
|
||||
|
||||
<testsuites>
|
||||
<testsuite name="EXT:news tests">
|
||||
<directory>../Unit/</directory>
|
||||
</testsuite>
|
||||
|
||||
</testsuites>
|
||||
|
||||
</phpunit>
|
||||
@@ -1,84 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* This file is part of the TYPO3 CMS project.
|
||||
*
|
||||
* It is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License, either version 2
|
||||
* of the License, or any later version.
|
||||
*
|
||||
* For the full copyright and license information, please read the
|
||||
* LICENSE.txt file that was distributed with this source code.
|
||||
*
|
||||
* The TYPO3 project - inspiring people to share!
|
||||
*/
|
||||
|
||||
/**
|
||||
* Boilerplate for a functional test phpunit boostrap file.
|
||||
*
|
||||
* This file is loosely maintained within TYPO3 testing-framework, extensions
|
||||
* are encouraged to not use it directly, but to copy it to an own place,
|
||||
* usually in parallel to a UnitTests.xml file.
|
||||
*
|
||||
* This file is defined in UnitTests.xml and called by phpunit
|
||||
* before instantiating the test suites.
|
||||
*
|
||||
* The recommended way to execute the suite is "runTests.sh". See the
|
||||
* according script within TYPO3 core's Build/Scripts directory and
|
||||
* adapt to extensions needs.
|
||||
*/
|
||||
(static function () {
|
||||
$testbase = new \TYPO3\TestingFramework\Core\Testbase();
|
||||
|
||||
// These if's are for core testing (package typo3/cms) only. cms-composer-installer does
|
||||
// not create the autoload-include.php file that sets these env vars and sets composer
|
||||
// mode to true. testing-framework can not be used without composer anyway, so it is safe
|
||||
// to do this here. This way it does not matter if 'bin/phpunit' or 'vendor/phpunit/phpunit/phpunit'
|
||||
// is called to run the tests since the 'relative to entry script' path calculation within
|
||||
// SystemEnvironmentBuilder is not used. However, the binary must be called from the document
|
||||
// root since getWebRoot() uses 'getcwd()'.
|
||||
if (!getenv('TYPO3_PATH_ROOT')) {
|
||||
putenv('TYPO3_PATH_ROOT=' . rtrim($testbase->getWebRoot(), '/'));
|
||||
}
|
||||
if (!getenv('TYPO3_PATH_WEB')) {
|
||||
putenv('TYPO3_PATH_WEB=' . rtrim($testbase->getWebRoot(), '/'));
|
||||
}
|
||||
|
||||
$testbase->defineSitePath();
|
||||
|
||||
$requestType = \TYPO3\CMS\Core\Core\SystemEnvironmentBuilder::REQUESTTYPE_BE | \TYPO3\CMS\Core\Core\SystemEnvironmentBuilder::REQUESTTYPE_CLI;
|
||||
\TYPO3\TestingFramework\Core\SystemEnvironmentBuilder::run(0, $requestType);
|
||||
|
||||
$testbase->createDirectory(\TYPO3\CMS\Core\Core\Environment::getPublicPath() . '/typo3conf/ext');
|
||||
$testbase->createDirectory(\TYPO3\CMS\Core\Core\Environment::getPublicPath() . '/typo3temp/assets');
|
||||
$testbase->createDirectory(\TYPO3\CMS\Core\Core\Environment::getPublicPath() . '/typo3temp/var/tests');
|
||||
$testbase->createDirectory(\TYPO3\CMS\Core\Core\Environment::getPublicPath() . '/typo3temp/var/transient');
|
||||
|
||||
// Retrieve an instance of class loader and inject to core bootstrap
|
||||
$classLoader = require $testbase->getPackagesPath() . '/autoload.php';
|
||||
\TYPO3\CMS\Core\Core\Bootstrap::initializeClassLoader($classLoader);
|
||||
|
||||
// Initialize default TYPO3_CONF_VARS
|
||||
$configurationManager = new \TYPO3\CMS\Core\Configuration\ConfigurationManager();
|
||||
$GLOBALS['TYPO3_CONF_VARS'] = $configurationManager->getDefaultConfiguration();
|
||||
|
||||
$cache = new \TYPO3\CMS\Core\Cache\Frontend\PhpFrontend(
|
||||
'core',
|
||||
new \TYPO3\CMS\Core\Cache\Backend\NullBackend('production', [])
|
||||
);
|
||||
|
||||
// Set all packages to active
|
||||
if (interface_exists(\TYPO3\CMS\Core\Package\Cache\PackageCacheInterface::class)) {
|
||||
$packageManager = \TYPO3\CMS\Core\Core\Bootstrap::createPackageManager(\TYPO3\CMS\Core\Package\UnitTestPackageManager::class, \TYPO3\CMS\Core\Core\Bootstrap::createPackageCache($cache));
|
||||
} else {
|
||||
// v10 compatibility layer
|
||||
// @deprecated Will be removed when v10 compat is dropped from testing-framework
|
||||
$packageManager = \TYPO3\CMS\Core\Core\Bootstrap::createPackageManager(\TYPO3\CMS\Core\Package\UnitTestPackageManager::class, $cache);
|
||||
}
|
||||
|
||||
\TYPO3\CMS\Core\Utility\GeneralUtility::setSingletonInstance(\TYPO3\CMS\Core\Package\PackageManager::class, $packageManager);
|
||||
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::setPackageManager($packageManager);
|
||||
|
||||
$testbase->dumpClassLoadingInformation();
|
||||
|
||||
\TYPO3\CMS\Core\Utility\GeneralUtility::purgeInstances();
|
||||
})();
|
||||
@@ -1,161 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace GeorgRinger\News\Tests\Unit\Controller;
|
||||
|
||||
/**
|
||||
* 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\Controller\NewsController;
|
||||
use Prophecy\PhpUnit\ProphecyTrait;
|
||||
use Prophecy\Prophecy\ObjectProphecy;
|
||||
use TYPO3\CMS\Core\Core\SystemEnvironmentBuilder;
|
||||
use TYPO3\CMS\Core\Database\ConnectionPool;
|
||||
use TYPO3\CMS\Core\Http\ServerRequest;
|
||||
use TYPO3\CMS\Core\Localization\LanguageService;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\CMS\Extbase\Core\Bootstrap;
|
||||
use TYPO3\CMS\Extbase\Service\EnvironmentService;
|
||||
use TYPO3\CMS\Frontend\Authentication\FrontendUserAuthentication;
|
||||
use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController;
|
||||
use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
|
||||
|
||||
/**
|
||||
* Class NewsControllerTest
|
||||
*/
|
||||
class NewsControllerTest extends FunctionalTestCase
|
||||
{
|
||||
use ProphecyTrait;
|
||||
|
||||
/**
|
||||
* @var NewsController
|
||||
*/
|
||||
protected $subject;
|
||||
|
||||
/**
|
||||
* @var string[]
|
||||
*/
|
||||
protected $testExtensionsToLoad = [
|
||||
'typo3conf/ext/news'
|
||||
];
|
||||
|
||||
/**
|
||||
* @var string[]
|
||||
*/
|
||||
protected $coreExtensionsToLoad = [
|
||||
'extbase',
|
||||
'fluid'
|
||||
];
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->importDataSet('PACKAGE:typo3/testing-framework/Resources/Core/Functional/Fixtures/pages.xml');
|
||||
$this->setUpFrontendRootPage(
|
||||
1,
|
||||
[
|
||||
__DIR__ . '/../Fixtures/TypoScript/setup.typoscript'
|
||||
]
|
||||
);
|
||||
|
||||
// This part is needed for TYPO3 10 compatibility
|
||||
/** @var EnvironmentService|ObjectProphecy $environmentServiceProphecy */
|
||||
$environmentServiceProphecy = $this->prophesize(EnvironmentService::class);
|
||||
$environmentServiceProphecy
|
||||
->isEnvironmentInFrontendMode()
|
||||
->willReturn(true);
|
||||
$environmentServiceProphecy
|
||||
->isEnvironmentInBackendMode()
|
||||
->willReturn(false);
|
||||
GeneralUtility::setSingletonInstance(EnvironmentService::class, $environmentServiceProphecy->reveal());
|
||||
|
||||
$serverRequest = new ServerRequest();
|
||||
|
||||
$applicationType = SystemEnvironmentBuilder::REQUESTTYPE_FE;
|
||||
$serverRequest = $serverRequest->withAttribute('applicationType', $applicationType);
|
||||
|
||||
/** @var TypoScriptFrontendController|ObjectProphecy $typoScriptFrontendControllerProphecy */
|
||||
$typoScriptFrontendControllerProphecy = $this->prophesize(TypoScriptFrontendController::class);
|
||||
/** @var FrontendUserAuthentication|ObjectProphecy $frontendUserAuthenticationProphecy */
|
||||
$frontendUserAuthenticationProphecy = $this->prophesize(FrontendUserAuthentication::class);
|
||||
|
||||
$GLOBALS['TYPO3_REQUEST'] = $serverRequest;
|
||||
$GLOBALS['LANG'] = GeneralUtility::makeInstance(LanguageService::class);
|
||||
$GLOBALS['TSFE'] = $typoScriptFrontendControllerProphecy->reveal();
|
||||
$GLOBALS['TSFE']->fe_user = $frontendUserAuthenticationProphecy->reveal();
|
||||
}
|
||||
|
||||
protected function tearDown(): void
|
||||
{
|
||||
unset(
|
||||
$this->subject
|
||||
);
|
||||
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function listActionWillReturnNoNews(): void
|
||||
{
|
||||
$extbaseBootstrap = GeneralUtility::makeInstance(Bootstrap::class);
|
||||
$content = $extbaseBootstrap->run(
|
||||
'',
|
||||
[
|
||||
'extensionName' => 'News',
|
||||
'pluginName' => 'Pi1'
|
||||
]
|
||||
);
|
||||
|
||||
$this->assertStringContainsString(
|
||||
'No news available.',
|
||||
$content
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function listActionWillShowNewsOfStoragePage1(): void
|
||||
{
|
||||
$date = new \DateTime('now');
|
||||
|
||||
$connection = GeneralUtility::makeInstance(ConnectionPool::class)
|
||||
->getConnectionForTable('tx_news_domain_model_news');
|
||||
$connection->insert(
|
||||
'tx_news_domain_model_news',
|
||||
[
|
||||
'uid' => 1,
|
||||
'pid' => 1,
|
||||
'title' => 'My first news',
|
||||
'datetime' => (int)$date->format('U')
|
||||
]
|
||||
);
|
||||
|
||||
$extbaseBootstrap = GeneralUtility::makeInstance(Bootstrap::class);
|
||||
$content = $extbaseBootstrap->run(
|
||||
'',
|
||||
[
|
||||
'extensionName' => 'News',
|
||||
'pluginName' => 'Pi1'
|
||||
]
|
||||
);
|
||||
|
||||
$this->assertStringContainsString(
|
||||
'<span itemprop="headline">My first news</span>',
|
||||
$content
|
||||
);
|
||||
|
||||
$this->assertStringContainsString(
|
||||
'<time itemprop="datePublished" datetime="' . $date->format('Y-m-d') . '">',
|
||||
$content
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,183 +0,0 @@
|
||||
# ==============================================
|
||||
# FE-Plugin configuration for EXT:news
|
||||
# ==============================================
|
||||
plugin.tx_news {
|
||||
mvc.callDefaultActionIfActionCantBeResolved = 1
|
||||
|
||||
view {
|
||||
templateRootPaths {
|
||||
0 = EXT:news/Resources/Private/Templates/
|
||||
}
|
||||
|
||||
partialRootPaths {
|
||||
0 = EXT:news/Resources/Private/Partials/
|
||||
}
|
||||
|
||||
layoutRootPaths {
|
||||
0 = EXT:news/Resources/Private/Layouts/
|
||||
}
|
||||
|
||||
widget.GeorgRinger\News\ViewHelpers\Widget\PaginateViewHelper.templateRootPath = EXT:news/Resources/Private/Templates/
|
||||
}
|
||||
|
||||
# ====================================
|
||||
# Settings available inside Controller and View by accessing $this->settings or {settings.xyz}
|
||||
# ====================================
|
||||
settings {
|
||||
cssFile =
|
||||
|
||||
#Displays a dummy image if the news have no media items
|
||||
displayDummyIfNoMedia = 1
|
||||
|
||||
# Output format
|
||||
format = html
|
||||
|
||||
# general settings
|
||||
overrideFlexformSettingsIfEmpty = cropMaxCharacters,dateField,timeRestriction,timeRestrictionHigh,archiveRestriction,orderBy,orderDirection,backPid,listPid,startingpoint,recursive,list.paginate.itemsPerPage,list.paginate.templatePath
|
||||
allowEmptyStringsForOverwriteDemand = 0
|
||||
|
||||
includeSubCategories = 0
|
||||
|
||||
analytics {
|
||||
social {
|
||||
facebookLike = 1
|
||||
facebookShare = 1
|
||||
twitter = 1
|
||||
}
|
||||
}
|
||||
|
||||
detailPidDetermination = flexform, categories, default
|
||||
|
||||
defaultDetailPid = 0
|
||||
dateField = datetime
|
||||
|
||||
link {
|
||||
typesOpeningInNewWindow = 2
|
||||
hrDate = 0
|
||||
hrDate {
|
||||
day = j
|
||||
month = n
|
||||
year = Y
|
||||
}
|
||||
}
|
||||
|
||||
cropMaxCharacters = 150
|
||||
orderBy = datetime
|
||||
orderDirection = desc
|
||||
topNewsFirst = 0
|
||||
orderByAllowed = sorting,author,uid,title,teaser,author,tstamp,crdate,datetime,categories.title
|
||||
|
||||
facebookLocale = en_US
|
||||
googlePlusLocale = en
|
||||
|
||||
demandClass =
|
||||
|
||||
# --------------
|
||||
# Search
|
||||
# --------------
|
||||
search {
|
||||
fields = teaser,title,bodytext
|
||||
splitSearchWord = 0
|
||||
}
|
||||
|
||||
# --------------
|
||||
# Detail
|
||||
# --------------
|
||||
detail {
|
||||
errorHandling = showStandaloneTemplate,EXT:news/Resources/Private/Templates/News/DetailNotFound.html,404
|
||||
checkPidOfNewsRecord = 0
|
||||
registerProperties = keywords,title
|
||||
showPrevNext = 0
|
||||
showSocialShareButtons = 1
|
||||
showMetaTags = 1
|
||||
|
||||
# media configuration
|
||||
media {
|
||||
image {
|
||||
lazyLoading = 0
|
||||
maxWidth = 282
|
||||
maxHeight =
|
||||
|
||||
# Get lightbox settings from fluid_styled_content
|
||||
lightbox {
|
||||
enabled = {$styles.content.textmedia.linkWrap.lightboxEnabled}
|
||||
class = {$styles.content.textmedia.linkWrap.lightboxCssClass}
|
||||
width = {$styles.content.textmedia.linkWrap.width}
|
||||
height = {$styles.content.textmedia.linkWrap.height}
|
||||
rel = lightbox[myImageSet]
|
||||
}
|
||||
}
|
||||
|
||||
video {
|
||||
width = 282
|
||||
height = 159
|
||||
}
|
||||
}
|
||||
|
||||
pageTitle = 1
|
||||
pageTitle {
|
||||
provider = GeorgRinger\News\Seo\NewsTitleProvider
|
||||
properties = title,teaser
|
||||
}
|
||||
}
|
||||
|
||||
# --------------
|
||||
# List
|
||||
# --------------
|
||||
list {
|
||||
# media configuration
|
||||
media {
|
||||
image {
|
||||
lazyLoading = 0
|
||||
maxWidth = 100
|
||||
maxHeight = 100
|
||||
}
|
||||
|
||||
dummyImage = EXT:news/Resources/Public/Images/dummy-preview-image.png
|
||||
}
|
||||
|
||||
# Paginate configuration.
|
||||
paginate {
|
||||
class = GeorgRinger\NumberedPagination\NumberedPagination
|
||||
itemsPerPage = 10
|
||||
insertAbove = 1
|
||||
insertBelow = 1
|
||||
maximumNumberOfLinks = 3
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# ==============================================
|
||||
# Persistence object mapping configuration
|
||||
# ==============================================
|
||||
config.tx_extbase.persistence.classes {
|
||||
GeorgRinger\News\Domain\Model\News {
|
||||
subclasses {
|
||||
0 = GeorgRinger\News\Domain\Model\NewsDefault
|
||||
1 = GeorgRinger\News\Domain\Model\NewsInternal
|
||||
2 = GeorgRinger\News\Domain\Model\NewsExternal
|
||||
}
|
||||
}
|
||||
|
||||
GeorgRinger\News\Domain\Model\NewsDefault {
|
||||
mapping {
|
||||
recordType = 0
|
||||
tableName = tx_news_domain_model_news
|
||||
}
|
||||
}
|
||||
|
||||
GeorgRinger\News\Domain\Model\NewsInternal {
|
||||
mapping {
|
||||
recordType = 1
|
||||
tableName = tx_news_domain_model_news
|
||||
}
|
||||
}
|
||||
|
||||
GeorgRinger\News\Domain\Model\NewsExternal {
|
||||
mapping {
|
||||
recordType = 2
|
||||
tableName = tx_news_domain_model_news
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
tx_news_domain_model_news,,,,
|
||||
,uid,pid,title
|
||||
,1,0,News1
|
||||
,2,0,News2
|
||||
,3,0,News3
|
||||
,4,0,News4
|
||||
,5,0,News5
|
||||
,6,0,News6
|
||||
,7,0,News7
|
||||
,8,0,News8
|
||||
,9,0,News9
|
||||
,10,0,News10
|
||||
,11,0,News11
|
||||
,12,0,News12
|
||||
,13,0,News13
|
||||
,14,0,News14
|
||||
,15,0,News15
|
||||
,16,0,News16
|
||||
,17,0,News17
|
||||
,18,0,News18
|
||||
,19,0,News19
|
||||
,20,0,News20
|
||||
|
@@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<dataset>
|
||||
|
||||
<!--findRecordsByImportSource-->
|
||||
<sys_category>
|
||||
<uid>456</uid>
|
||||
<pid>1</pid>
|
||||
<title>findRecordByImportSource</title>
|
||||
<import_source>functional_test</import_source>
|
||||
<import_id>2</import_id>
|
||||
<l10n_diffsource></l10n_diffsource>
|
||||
<description></description>
|
||||
</sys_category>
|
||||
|
||||
</dataset>
|
||||
@@ -1,32 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<dataset>
|
||||
<tx_news_domain_model_tag>
|
||||
<uid>1</uid>
|
||||
<pid>1</pid>
|
||||
<title>Tag 1</title>
|
||||
</tx_news_domain_model_tag>
|
||||
|
||||
<tx_news_domain_model_tag>
|
||||
<uid>2</uid>
|
||||
<pid>1</pid>
|
||||
<title>Tag 2</title>
|
||||
</tx_news_domain_model_tag>
|
||||
|
||||
<tx_news_domain_model_tag>
|
||||
<uid>3</uid>
|
||||
<pid>1</pid>
|
||||
<title>Tag 3</title>
|
||||
</tx_news_domain_model_tag>
|
||||
|
||||
<tx_news_domain_model_tag>
|
||||
<uid>4</uid>
|
||||
<pid>1</pid>
|
||||
<title>Tag 4</title>
|
||||
</tx_news_domain_model_tag>
|
||||
|
||||
<tx_news_domain_model_tag>
|
||||
<uid>5</uid>
|
||||
<pid>1</pid>
|
||||
<title>Tag 5</title>
|
||||
</tx_news_domain_model_tag>
|
||||
</dataset>
|
||||
@@ -1,251 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<dataset>
|
||||
<!--findRecordsByUid-->
|
||||
<tx_news_domain_model_news>
|
||||
<uid>1</uid>
|
||||
<pid>1</pid>
|
||||
<type>0</type>
|
||||
<title>findRecordsByUid</title>
|
||||
</tx_news_domain_model_news>
|
||||
|
||||
<!--findRecordsByImportSource-->
|
||||
<tx_news_domain_model_news>
|
||||
<uid>456</uid>
|
||||
<pid>1</pid>
|
||||
<type>0</type>
|
||||
<title>findRecordsByImportSource</title>
|
||||
<import_source>functional_test</import_source>
|
||||
<import_id>2</import_id>
|
||||
</tx_news_domain_model_news>
|
||||
|
||||
<!--findTopNewsRecords-->
|
||||
<tx_news_domain_model_news>
|
||||
<pid>2</pid>
|
||||
<type>1</type>
|
||||
<istopnews>1</istopnews>
|
||||
</tx_news_domain_model_news>
|
||||
<tx_news_domain_model_news>
|
||||
<pid>2</pid>
|
||||
<type>1</type>
|
||||
<istopnews>1</istopnews>
|
||||
</tx_news_domain_model_news>
|
||||
<tx_news_domain_model_news>
|
||||
<pid>2</pid>
|
||||
<type>2</type>
|
||||
<istopnews>1</istopnews>
|
||||
</tx_news_domain_model_news>
|
||||
<tx_news_domain_model_news>
|
||||
<pid>2</pid>
|
||||
<type>2</type>
|
||||
<istopnews>0</istopnews>
|
||||
</tx_news_domain_model_news>
|
||||
<tx_news_domain_model_news>
|
||||
<pid>2</pid>
|
||||
<type>2</type>
|
||||
<istopnews>0</istopnews>
|
||||
</tx_news_domain_model_news>
|
||||
|
||||
<!--findRecordsByStartingpointRestriction-->
|
||||
<tx_news_domain_model_news>
|
||||
<pid>3</pid>
|
||||
</tx_news_domain_model_news>
|
||||
<tx_news_domain_model_news>
|
||||
<pid>3</pid>
|
||||
</tx_news_domain_model_news>
|
||||
<tx_news_domain_model_news>
|
||||
<pid>4</pid>
|
||||
</tx_news_domain_model_news>
|
||||
<tx_news_domain_model_news>
|
||||
<pid>4</pid>
|
||||
</tx_news_domain_model_news>
|
||||
<tx_news_domain_model_news>
|
||||
<pid>4</pid>
|
||||
</tx_news_domain_model_news>
|
||||
<tx_news_domain_model_news>
|
||||
<pid>4</pid>
|
||||
</tx_news_domain_model_news>
|
||||
<tx_news_domain_model_news>
|
||||
<pid>5</pid>
|
||||
</tx_news_domain_model_news>
|
||||
|
||||
<!--findRecordsByArchiveRestriction-->
|
||||
<!--22.3.2014-->
|
||||
<tx_news_domain_model_news>
|
||||
<pid>7</pid>
|
||||
<archive>1395516100</archive>
|
||||
</tx_news_domain_model_news>
|
||||
|
||||
<!--27.3.-->
|
||||
<tx_news_domain_model_news>
|
||||
<pid>7</pid>
|
||||
<archive>1395948100</archive>
|
||||
</tx_news_domain_model_news>
|
||||
|
||||
<!--1.4.2014-->
|
||||
<tx_news_domain_model_news>
|
||||
<pid>7</pid>
|
||||
<archive>1396380100</archive>
|
||||
</tx_news_domain_model_news>
|
||||
|
||||
<!--6.4.2014-->
|
||||
<tx_news_domain_model_news>
|
||||
<pid>7</pid>
|
||||
<archive>1396812100</archive>
|
||||
</tx_news_domain_model_news>
|
||||
|
||||
<!--11.4.2014-->
|
||||
<tx_news_domain_model_news>
|
||||
<pid>7</pid>
|
||||
<archive>1397244100</archive>
|
||||
</tx_news_domain_model_news>
|
||||
|
||||
<!--findRecordsByMonthAndYear-->
|
||||
<tx_news_domain_model_news>
|
||||
<pid>8</pid>
|
||||
<datetime>1298156400</datetime>
|
||||
</tx_news_domain_model_news>
|
||||
<tx_news_domain_model_news>
|
||||
<pid>8</pid>
|
||||
<datetime>1298329200</datetime>
|
||||
</tx_news_domain_model_news>
|
||||
<tx_news_domain_model_news>
|
||||
<pid>8</pid>
|
||||
<datetime>1298934000</datetime>
|
||||
</tx_news_domain_model_news>
|
||||
<tx_news_domain_model_news>
|
||||
<pid>8</pid>
|
||||
<datetime>1298934000</datetime>
|
||||
</tx_news_domain_model_news>
|
||||
<tx_news_domain_model_news>
|
||||
<pid>8</pid>
|
||||
<datetime>1299711600</datetime>
|
||||
</tx_news_domain_model_news>
|
||||
<tx_news_domain_model_news>
|
||||
<pid>8</pid>
|
||||
<datetime>1301522400</datetime>
|
||||
</tx_news_domain_model_news>
|
||||
<tx_news_domain_model_news>
|
||||
<pid>8</pid>
|
||||
<datetime>1301608800</datetime>
|
||||
</tx_news_domain_model_news>
|
||||
|
||||
<!--findLatestLimitRecords-->
|
||||
<!--SimplePrevNextViewHelperTest-->
|
||||
<!--22.3.2014-->
|
||||
<tx_news_domain_model_news>
|
||||
<uid>101</uid>
|
||||
<pid>9</pid>
|
||||
<datetime>1395516730</datetime>
|
||||
</tx_news_domain_model_news>
|
||||
|
||||
<!--25.3.2014-->
|
||||
<tx_news_domain_model_news>
|
||||
<uid>102</uid>
|
||||
<pid>9</pid>
|
||||
<datetime>1395775956</datetime>
|
||||
</tx_news_domain_model_news>
|
||||
|
||||
<!--28.3.2014-->
|
||||
<tx_news_domain_model_news>
|
||||
<uid>103</uid>
|
||||
<pid>9</pid>
|
||||
<datetime>1396035186</datetime>
|
||||
</tx_news_domain_model_news>
|
||||
|
||||
<!--29.3.2014-->
|
||||
<tx_news_domain_model_news>
|
||||
<uid>104</uid>
|
||||
<pid>9</pid>
|
||||
<datetime>1396121600</datetime>
|
||||
</tx_news_domain_model_news>
|
||||
|
||||
<!--2.4.2014-->
|
||||
<tx_news_domain_model_news>
|
||||
<uid>105</uid>
|
||||
<pid>9</pid>
|
||||
<datetime>1396467221</datetime>
|
||||
</tx_news_domain_model_news>
|
||||
|
||||
<!--4.4.2014 -->
|
||||
<tx_news_domain_model_news>
|
||||
<uid>106</uid>
|
||||
<pid>9</pid>
|
||||
<datetime>1396640035</datetime>
|
||||
</tx_news_domain_model_news>
|
||||
|
||||
<!--Tags-->
|
||||
<tx_news_domain_model_news>
|
||||
<uid>130</uid>
|
||||
<pid>10</pid>
|
||||
<title>tag1,tag2,tag3</title>
|
||||
<tags>3</tags>
|
||||
</tx_news_domain_model_news>
|
||||
<tx_news_domain_model_news_tag_mm>
|
||||
<uid_local>130</uid_local>
|
||||
<uid_foreign>1</uid_foreign>
|
||||
<sorting>1</sorting>
|
||||
</tx_news_domain_model_news_tag_mm>
|
||||
<tx_news_domain_model_news_tag_mm>
|
||||
<uid_local>130</uid_local>
|
||||
<uid_foreign>2</uid_foreign>
|
||||
<sorting>2</sorting>
|
||||
</tx_news_domain_model_news_tag_mm>
|
||||
<tx_news_domain_model_news_tag_mm>
|
||||
<uid_local>130</uid_local>
|
||||
<uid_foreign>3</uid_foreign>
|
||||
<sorting>3</sorting>
|
||||
</tx_news_domain_model_news_tag_mm>
|
||||
|
||||
<tx_news_domain_model_news>
|
||||
<uid>131</uid>
|
||||
<pid>10</pid>
|
||||
<title>tag3</title>
|
||||
<tags>1</tags>
|
||||
</tx_news_domain_model_news>
|
||||
<tx_news_domain_model_news_tag_mm>
|
||||
<uid_local>131</uid_local>
|
||||
<uid_foreign>3</uid_foreign>
|
||||
<sorting>1</sorting>
|
||||
</tx_news_domain_model_news_tag_mm>
|
||||
|
||||
<tx_news_domain_model_news>
|
||||
<uid>132</uid>
|
||||
<pid>10</pid>
|
||||
<title>tag4</title>
|
||||
<tags>1</tags>
|
||||
</tx_news_domain_model_news>
|
||||
<tx_news_domain_model_news_tag_mm>
|
||||
<uid_local>132</uid_local>
|
||||
<uid_foreign>4</uid_foreign>
|
||||
<sorting>1</sorting>
|
||||
</tx_news_domain_model_news_tag_mm>
|
||||
|
||||
<tx_news_domain_model_news>
|
||||
<uid>133</uid>
|
||||
<pid>10</pid>
|
||||
<title>tag5</title>
|
||||
<tags>1</tags>
|
||||
</tx_news_domain_model_news>
|
||||
<tx_news_domain_model_news_tag_mm>
|
||||
<uid_local>133</uid_local>
|
||||
<uid_foreign>5</uid_foreign>
|
||||
<sorting>1</sorting>
|
||||
</tx_news_domain_model_news_tag_mm>
|
||||
|
||||
<tx_news_domain_model_news>
|
||||
<uid>134</uid>
|
||||
<pid>10</pid>
|
||||
<title>tag4,tag5</title>
|
||||
<tags>2</tags>
|
||||
</tx_news_domain_model_news>
|
||||
<tx_news_domain_model_news_tag_mm>
|
||||
<uid_local>134</uid_local>
|
||||
<uid_foreign>4</uid_foreign>
|
||||
<sorting>1</sorting>
|
||||
</tx_news_domain_model_news_tag_mm>
|
||||
<tx_news_domain_model_news_tag_mm>
|
||||
<uid_local>134</uid_local>
|
||||
<uid_foreign>5</uid_foreign>
|
||||
<sorting>2</sorting>
|
||||
</tx_news_domain_model_news_tag_mm>
|
||||
</dataset>
|
||||
@@ -1,206 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Functional\Pagination;
|
||||
|
||||
/**
|
||||
* 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\Dto\NewsDemand;
|
||||
use GeorgRinger\News\Domain\Repository\NewsRepository;
|
||||
use GeorgRinger\News\Pagination\QueryResultPaginator;
|
||||
use TYPO3\CMS\Core\Information\Typo3Version;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\CMS\Extbase\Object\ObjectManager;
|
||||
use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
|
||||
|
||||
class QueryResultPaginatorTest extends FunctionalTestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* @var NewsRepository
|
||||
*/
|
||||
protected $newsRepository;
|
||||
|
||||
protected $testExtensionsToLoad = ['typo3conf/ext/news'];
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
$this->importCSVDataSet(__DIR__ . '/../Fixtures/news_pagination.csv');
|
||||
$versionInformation = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(Typo3Version::class);
|
||||
if ($versionInformation->getMajorVersion() === 11) {
|
||||
$this->newsRepository = $this->getContainer()->get(NewsRepository::class);
|
||||
} else {
|
||||
$this->newsRepository = GeneralUtility::makeInstance(ObjectManager::class)->get(NewsRepository::class);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A short integration test to check that the fixtures are as expected
|
||||
*
|
||||
* @test
|
||||
*/
|
||||
public function integration(): void
|
||||
{
|
||||
$queryResult = $this->newsRepository->findAll();
|
||||
self::assertCount(20, $queryResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function checkPaginatorWithDefaultConfiguration(): void
|
||||
{
|
||||
$paginator = new QueryResultPaginator($this->newsRepository->findAll());
|
||||
|
||||
self::assertSame(2, $paginator->getNumberOfPages());
|
||||
self::assertSame(0, $paginator->getKeyOfFirstPaginatedItem());
|
||||
self::assertSame(9, $paginator->getKeyOfLastPaginatedItem());
|
||||
self::assertCount(10, $paginator->getPaginatedItems());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function paginatorRespectsItemsPerPageConfiguration(): void
|
||||
{
|
||||
$paginator = new QueryResultPaginator(
|
||||
$this->newsRepository->findAll(),
|
||||
1,
|
||||
3
|
||||
);
|
||||
|
||||
self::assertSame(7, $paginator->getNumberOfPages());
|
||||
self::assertSame(0, $paginator->getKeyOfFirstPaginatedItem());
|
||||
self::assertSame(2, $paginator->getKeyOfLastPaginatedItem());
|
||||
self::assertCount(3, $paginator->getPaginatedItems());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function paginatorRespectsItemsPerPageConfigurationAndCurrentPage(): void
|
||||
{
|
||||
$paginator = new QueryResultPaginator(
|
||||
$this->newsRepository->findAll(),
|
||||
3,
|
||||
3
|
||||
);
|
||||
|
||||
self::assertSame(7, $paginator->getNumberOfPages());
|
||||
self::assertSame(6, $paginator->getKeyOfFirstPaginatedItem());
|
||||
self::assertSame(8, $paginator->getKeyOfLastPaginatedItem());
|
||||
self::assertCount(3, $paginator->getPaginatedItems());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function paginatorProperlyCalculatesLastPage(): void
|
||||
{
|
||||
$paginator = new QueryResultPaginator(
|
||||
$this->newsRepository->findAll(),
|
||||
7,
|
||||
3
|
||||
);
|
||||
|
||||
self::assertSame(7, $paginator->getNumberOfPages());
|
||||
self::assertSame(18, $paginator->getKeyOfFirstPaginatedItem());
|
||||
self::assertSame(19, $paginator->getKeyOfLastPaginatedItem());
|
||||
self::assertCount(2, $paginator->getPaginatedItems());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function withCurrentPageNumberThrowsInvalidArgumentExceptionIfCurrentPageIsLowerThanOne(): void
|
||||
{
|
||||
$this->expectExceptionCode(1573047338);
|
||||
|
||||
$paginator = new QueryResultPaginator(
|
||||
$this->newsRepository->findAll(),
|
||||
1,
|
||||
3
|
||||
);
|
||||
$paginator->withCurrentPageNumber(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function paginatorSetsCurrentPageToLastPageIfCurrentPageExceedsMaximum(): void
|
||||
{
|
||||
$paginator = new QueryResultPaginator(
|
||||
$this->newsRepository->findAll(),
|
||||
3,
|
||||
10
|
||||
);
|
||||
|
||||
self::assertEquals(2, $paginator->getCurrentPageNumber());
|
||||
self::assertEquals(2, $paginator->getNumberOfPages());
|
||||
self::assertCount(10, $paginator->getPaginatedItems()); // true?
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function paginatorProperlyCalculatesOnlyOnePage(): void
|
||||
{
|
||||
$paginator = new QueryResultPaginator(
|
||||
$this->newsRepository->findAll(),
|
||||
1,
|
||||
50
|
||||
);
|
||||
|
||||
self::assertSame(1, $paginator->getNumberOfPages());
|
||||
self::assertSame(0, $paginator->getKeyOfFirstPaginatedItem());
|
||||
self::assertSame(19, $paginator->getKeyOfLastPaginatedItem());
|
||||
self::assertCount(20, $paginator->getPaginatedItems());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @dataProvider paginatorProperlyCalculatesWithLimitAndOffsetDataProvider
|
||||
*/
|
||||
public function paginatorProperlyCalculatesWithLimitAndOffset(array $given, array $expected): void
|
||||
{
|
||||
$demand = new NewsDemand();
|
||||
$demand->setOrder('uid asc');
|
||||
$demand->setOrderByAllowed('uid');
|
||||
$demand->setLimit($given['limit']);
|
||||
$demand->setOffset($given['offset']);
|
||||
$paginator = new QueryResultPaginator(
|
||||
$this->newsRepository->findDemanded($demand),
|
||||
$given['currentPage'],
|
||||
3,
|
||||
$given['limit'],
|
||||
$given['offset']
|
||||
);
|
||||
|
||||
self::assertSame($expected['firstItemTitle'], $paginator->getPaginatedItems()[0]->getTitle());
|
||||
self::assertCount($expected['itemCount'], $paginator->getPaginatedItems());
|
||||
self::assertSame($expected['numberOfPages'], $paginator->getNumberOfPages());
|
||||
}
|
||||
|
||||
public function paginatorProperlyCalculatesWithLimitAndOffsetDataProvider(): array
|
||||
{
|
||||
return [
|
||||
'with offset' => [
|
||||
['currentPage' => 3, 'limit' => 0, 'offset' => 3],
|
||||
['itemCount' => 3, 'firstItemTitle' => 'News10', 'numberOfPages' => 6],
|
||||
],
|
||||
'with limit' => [
|
||||
['currentPage' => 2, 'limit' => 4, 'offset' => 0],
|
||||
['itemCount' => 1, 'firstItemTitle' => 'News4', 'numberOfPages' => 2],
|
||||
],
|
||||
'with limit and offset' => [
|
||||
['currentPage' => 2, 'limit' => 12, 'offset' => 5],
|
||||
['itemCount' => 3, 'firstItemTitle' => 'News9', 'numberOfPages' => 4],
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Functional\Repository;
|
||||
|
||||
/**
|
||||
* 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\Repository\CategoryRepository;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\CMS\Extbase\Object\ObjectManager;
|
||||
use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
|
||||
|
||||
/**
|
||||
* Functional test for the DataHandler
|
||||
*/
|
||||
class CategoryRepositoryTest extends FunctionalTestCase
|
||||
{
|
||||
|
||||
/** @var \GeorgRinger\News\Domain\Repository\CategoryRepository */
|
||||
protected $categoryRepository;
|
||||
|
||||
protected $testExtensionsToLoad = ['typo3conf/ext/news'];
|
||||
|
||||
public function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
$versionInformation = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Information\Typo3Version::class);
|
||||
if ($versionInformation->getMajorVersion() === 11) {
|
||||
$this->categoryRepository = $this->getContainer()->get(CategoryRepository::class);
|
||||
} else {
|
||||
$this->categoryRepository = GeneralUtility::makeInstance(ObjectManager::class)->get(CategoryRepository::class);
|
||||
}
|
||||
|
||||
$this->importDataSet(__DIR__ . '/../Fixtures/sys_category.xml');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if by import source is done
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function findRecordByImportSource(): void
|
||||
{
|
||||
$category = $this->categoryRepository->findOneByImportSourceAndImportId('functional_test', '2');
|
||||
|
||||
$this->assertEquals($category->getTitle(), 'findRecordByImportSource');
|
||||
}
|
||||
}
|
||||
@@ -1,288 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Functional\Repository;
|
||||
|
||||
use GeorgRinger\News\Domain\Model\Dto\NewsDemand;
|
||||
use GeorgRinger\News\Domain\Repository\NewsRepository;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\CMS\Extbase\Object\ObjectManager;
|
||||
use TYPO3\CMS\Extbase\Persistence\QueryResultInterface;
|
||||
use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Functional test for the \GeorgRinger\News\Domain\Repository\NewsRepository
|
||||
*/
|
||||
class NewsRepositoryTest extends FunctionalTestCase
|
||||
{
|
||||
|
||||
/** @var \GeorgRinger\News\Domain\Repository\NewsRepository */
|
||||
protected $newsRepository;
|
||||
|
||||
protected $testExtensionsToLoad = ['typo3conf/ext/news'];
|
||||
|
||||
protected $coreExtensionsToLoad = ['fluid'];
|
||||
|
||||
public function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$versionInformation = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Information\Typo3Version::class);
|
||||
if ($versionInformation->getMajorVersion() === 11) {
|
||||
$this->newsRepository = $this->getContainer()->get(NewsRepository::class);
|
||||
} else {
|
||||
$this->newsRepository = GeneralUtility::makeInstance(ObjectManager::class)->get(NewsRepository::class);
|
||||
}
|
||||
|
||||
$this->importDataSet(__DIR__ . '/../Fixtures/tags.xml');
|
||||
$this->importDataSet(__DIR__ . '/../Fixtures/tx_news_domain_model_news.xml');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if startingpoint is working
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function findRecordsByUid(): void
|
||||
{
|
||||
$news = $this->newsRepository->findByUid(1);
|
||||
|
||||
$this->assertEquals($news->getTitle(), 'findRecordsByUid');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if by import source is done
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function findRecordsByImportSource(): void
|
||||
{
|
||||
$news = $this->newsRepository->findOneByImportSourceAndImportId('functional_test', '2');
|
||||
|
||||
$this->assertEquals($news->getTitle(), 'findRecordsByImportSource');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if top news constraint works
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function findTopNewsRecords(): void
|
||||
{
|
||||
$demand = new NewsDemand();
|
||||
$demand->setStoragePage(2);
|
||||
|
||||
// no matter about top news
|
||||
$demand->setTopNewsRestriction(0);
|
||||
$this->assertEquals((int)$this->newsRepository->findDemanded($demand)->count(), 5);
|
||||
|
||||
// Only Top news
|
||||
$demand->setTopNewsRestriction(1);
|
||||
$this->assertEquals((int)$this->newsRepository->findDemanded($demand)->count(), 3);
|
||||
|
||||
// Only non Top news
|
||||
$demand->setTopNewsRestriction(2);
|
||||
$this->assertEquals((int)$this->newsRepository->findDemanded($demand)->count(), 2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if startingpoint is working
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function findRecordsByStartingpointRestriction(): void
|
||||
{
|
||||
$demand = new NewsDemand();
|
||||
|
||||
// simple starting point
|
||||
$demand->setStoragePage(3);
|
||||
$this->assertEquals((int)$this->newsRepository->findDemanded($demand)->count(), 2);
|
||||
|
||||
// multiple starting points
|
||||
$demand->setStoragePage('4,5');
|
||||
$this->assertEquals((int)$this->newsRepository->findDemanded($demand)->count(), 5);
|
||||
|
||||
// multiple starting points, including invalid values and commas
|
||||
$demand->setStoragePage('5 , x ,3');
|
||||
$this->assertEquals((int)$this->newsRepository->findDemanded($demand)->count(), 3);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if record are found by archived/non archived flag
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function findRecordsByArchiveRestriction(): void
|
||||
{
|
||||
$GLOBALS['SIM_EXEC_TIME'] = 1396812099;
|
||||
|
||||
$demand = new NewsDemand();
|
||||
$demand->setStoragePage(7);
|
||||
|
||||
// Archived means: archive date must be lower than current time AND != 0
|
||||
$demand->setArchiveRestriction('archived');
|
||||
$this->assertEquals((int)$this->newsRepository->findDemanded($demand)->count(), 3);
|
||||
|
||||
// Active means: archive date must be in future or no archive date
|
||||
$demand->setArchiveRestriction('active');
|
||||
$this->assertEquals((int)$this->newsRepository->findDemanded($demand)->count(), 2);
|
||||
|
||||
// no value means: give all
|
||||
$demand->setArchiveRestriction('');
|
||||
$this->assertEquals((int)$this->newsRepository->findDemanded($demand)->count(), 5);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if record by month/year constraint works
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function findRecordsByMonthAndYear(): void
|
||||
{
|
||||
$this->markTestSkipped('Does not work in travis');
|
||||
$demand = new NewsDemand();
|
||||
$demand->setStoragePage(8);
|
||||
|
||||
$demand->setDateField('datetime');
|
||||
$demand->setMonth('4');
|
||||
$demand->setYear('2011');
|
||||
$this->assertEquals((int)$this->newsRepository->findDemanded($demand)->count(), 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if latest limit constraint works
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function findLatestLimitRecords(): void
|
||||
{
|
||||
$demand = new NewsDemand();
|
||||
$demand->setStoragePage(9);
|
||||
|
||||
$GLOBALS['SIM_EXEC_TIME'] = strtotime('2014-04-03');
|
||||
|
||||
// get all news maximum 6 days old
|
||||
$demand->setTimeRestriction((6 * 86400));
|
||||
$this->assertEquals((int)$this->newsRepository->findDemanded($demand)->count(), 4);
|
||||
|
||||
// no restriction should get you all
|
||||
$demand->setTimeRestriction(0);
|
||||
$this->assertEquals((int)$this->newsRepository->findDemanded($demand)->count(), 6);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if by import source is done
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function findRecordsByTags(): void
|
||||
{
|
||||
$demand = new NewsDemand();
|
||||
$demand->setStoragePage(10);
|
||||
$demand->setOrder('uid');
|
||||
$demand->setOrderByAllowed('uid');
|
||||
|
||||
// given is 1 tag
|
||||
$demand->setTags('3');
|
||||
$news = $this->newsRepository->findDemanded($demand);
|
||||
$this->assertEquals('130,131', $this->getIdListOfNews($news));
|
||||
|
||||
// given are 2 tags
|
||||
$demand->setTags('1,5');
|
||||
$news = $this->newsRepository->findDemanded($demand);
|
||||
$this->assertEquals('130,133,134', $this->getIdListOfNews($news));
|
||||
|
||||
// given are 3 real tags & 1 not existing
|
||||
$demand->setTags('5,3,1,10');
|
||||
$news = $this->newsRepository->findDemanded($demand);
|
||||
$this->assertEquals('130,131,133,134', $this->getIdListOfNews($news));
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function findRecordsForDateMenu(): void
|
||||
{
|
||||
$demand = new NewsDemand();
|
||||
$demand->setStoragePage('9');
|
||||
$demand->setDateField('datetime');
|
||||
$expected = [
|
||||
'single' => [
|
||||
'2014' => [
|
||||
'03' => 4,
|
||||
'04' => 2
|
||||
]
|
||||
],
|
||||
'total' => [
|
||||
'2014' => 6
|
||||
]
|
||||
];
|
||||
$dateMenuData = $this->newsRepository->countByDate($demand);
|
||||
$this->assertEquals($expected, $dateMenuData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if records are found by type
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function findRecordsByType(): void
|
||||
{
|
||||
$demand = new NewsDemand();
|
||||
$demand->setStoragePage('1,2');
|
||||
|
||||
// given is 1 tag
|
||||
$demand->setTypes(['1']);
|
||||
$count = $this->newsRepository->findDemanded($demand)->count();
|
||||
$this->assertEquals(2, $count);
|
||||
|
||||
// given are 2 tags
|
||||
$demand->setTypes(['1', 2]);
|
||||
$count = $this->newsRepository->findDemanded($demand)->count();
|
||||
$this->assertEquals(5, $count);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \TYPO3\CMS\Extbase\Persistence\QueryResultInterface $newsList
|
||||
* @return string
|
||||
*/
|
||||
protected function getIdListOfNews(QueryResultInterface $newsList)
|
||||
{
|
||||
$idList = [];
|
||||
foreach ($newsList as $news) {
|
||||
$idList[] = $news->getUid();
|
||||
}
|
||||
return implode(',', $idList);
|
||||
}
|
||||
|
||||
public function tearDown(): void
|
||||
{
|
||||
unset($this->newsRepository);
|
||||
}
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Functional\ViewHelpers\Iterator;
|
||||
|
||||
/**
|
||||
* 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 TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\CMS\Fluid\View\StandaloneView;
|
||||
use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
|
||||
|
||||
/**
|
||||
* Test for ChunkViewHelper
|
||||
*/
|
||||
class ChunkViewHelperTest extends FunctionalTestCase
|
||||
{
|
||||
protected $testExtensionsToLoad = ['typo3conf/ext/news'];
|
||||
protected $coreExtensionsToLoad = ['extbase', 'fluid'];
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function chunkIsProperlyCreated(): void
|
||||
{
|
||||
$standaloneView = GeneralUtility::makeInstance(StandaloneView::class);
|
||||
$standaloneView->setTemplateSource(
|
||||
'{namespace n=GeorgRinger\News\ViewHelpers}' . LF .
|
||||
'<f:for each="{news -> n:iterator.chunk(count: 3)}" as="col" iteration="cycle">' .
|
||||
'<div class="row"><f:for each="{col}" as="item"><div class="col">{item.title}</div></f:for></div>' .
|
||||
'</f:for>'
|
||||
);
|
||||
$standaloneView->assign('news', [
|
||||
['title' => 'el1'],
|
||||
['title' => 'el2'],
|
||||
['title' => 'el3'],
|
||||
['title' => 'el4'],
|
||||
]);
|
||||
|
||||
$expected = '<div class="row">' .
|
||||
'<div class="col">el1</div>' .
|
||||
'<div class="col">el2</div>' .
|
||||
'<div class="col">el3</div>' .
|
||||
'</div>' .
|
||||
'<div class="row">' .
|
||||
'<div class="col">el4</div>' .
|
||||
'</div>';
|
||||
$this->assertEquals(trim($expected), trim($standaloneView->render()));
|
||||
}
|
||||
}
|
||||
@@ -1,124 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Functional\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 DateTime;
|
||||
use GeorgRinger\News\Domain\Model\News;
|
||||
use GeorgRinger\News\ViewHelpers\SimplePrevNextViewHelper;
|
||||
use TYPO3\CMS\Core\Database\ConnectionPool;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
|
||||
|
||||
/**
|
||||
* Class SimplePrevNextViewHelperTest
|
||||
*
|
||||
*/
|
||||
class SimplePrevNextViewHelperTest extends FunctionalTestCase
|
||||
{
|
||||
|
||||
/** @var \GeorgRinger\News\ViewHelpers\SimplePrevNextViewHelper|\PHPUnit\Framework\MockObject\MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface */
|
||||
protected $mockedViewHelper;
|
||||
|
||||
/** @var News */
|
||||
protected $news;
|
||||
|
||||
protected $testExtensionsToLoad = ['typo3conf/ext/news'];
|
||||
protected $coreExtensionsToLoad = ['extbase', 'fluid'];
|
||||
|
||||
public function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
$this->mockedViewHelper = $this->getAccessibleMock(SimplePrevNextViewHelper::class, ['dummy'], [], '', true, true, false);
|
||||
|
||||
$this->news = new News();
|
||||
$this->news->_setProperty('uid', 123);
|
||||
$this->news->setPid(9);
|
||||
|
||||
$this->importDataSet(__DIR__ . '/../Fixtures/tx_news_domain_model_news.xml');
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function allNeighboursCanBeFound(): void
|
||||
{
|
||||
$this->setDate(1396035186);
|
||||
$actual = $this->mockedViewHelper->_call('getNeighbours', $this->news, '', 'datetime');
|
||||
|
||||
$exp = [
|
||||
'prev' => $this->getRow(102),
|
||||
'next' => $this->getRow(104)
|
||||
];
|
||||
$this->assertEquals($exp, $actual);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function nextNeighbourCanBeFound(): void
|
||||
{
|
||||
$this->setDate(1395516730);
|
||||
|
||||
$actual = $this->mockedViewHelper->_call('getNeighbours', $this->news, '', 'datetime');
|
||||
|
||||
$exp = [
|
||||
'next' => $this->getRow(102)
|
||||
];
|
||||
$this->assertEquals($exp, $actual);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function previousNeighbourCanBeFound(): void
|
||||
{
|
||||
$this->setDate(1396640035);
|
||||
$actual = $this->mockedViewHelper->_call('getNeighbours', $this->news, '', 'datetime');
|
||||
$exp = [
|
||||
'prev' => $this->getRow(105)
|
||||
];
|
||||
$this->assertEquals($exp, $actual);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $timestamp
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function setDate($timestamp): void
|
||||
{
|
||||
$date = new DateTime();
|
||||
$date->setTimestamp($timestamp);
|
||||
$this->news->_setProperty('datetime', $date);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $id
|
||||
*/
|
||||
protected function getRow(int $id)
|
||||
{
|
||||
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
|
||||
->getQueryBuilderForTable('tx_news_domain_model_news');
|
||||
return $queryBuilder
|
||||
->select('*')
|
||||
->from('tx_news_domain_model_news')
|
||||
->where(
|
||||
$queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($id, \PDO::PARAM_INT))
|
||||
)
|
||||
->setMaxResults(1)
|
||||
->execute()->fetch();
|
||||
}
|
||||
}
|
||||
@@ -1,198 +0,0 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace GeorgRinger\News\Tests\Unit\Backend\FieldInformation;
|
||||
|
||||
/**
|
||||
* 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\Backend\FieldInformation\StaticText;
|
||||
use Prophecy\PhpUnit\ProphecyTrait;
|
||||
use Prophecy\Prophecy\ObjectProphecy;
|
||||
use TYPO3\CMS\Backend\Form\NodeFactory;
|
||||
use TYPO3\CMS\Core\Localization\LanguageService;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
class StaticTextTest extends BaseTestCase
|
||||
{
|
||||
use ProphecyTrait;
|
||||
|
||||
/**
|
||||
* @var StaticText
|
||||
*/
|
||||
protected $subject;
|
||||
|
||||
/**
|
||||
* @var NodeFactory|ObjectProphecy
|
||||
*/
|
||||
protected $nodeFactoryProphecy;
|
||||
|
||||
/**
|
||||
* @var LanguageService|ObjectProphecy
|
||||
*/
|
||||
protected $languageServiceProphecy;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->languageServiceProphecy = $this->prophesize(LanguageService::class);
|
||||
$this->languageServiceProphecy
|
||||
->sL('label1')
|
||||
->willReturn('label bold');
|
||||
$this->languageServiceProphecy
|
||||
->sL('label2')
|
||||
->willReturn('label italic');
|
||||
$this->languageServiceProphecy
|
||||
->sL('label3')
|
||||
->willReturn('label both');
|
||||
$this->languageServiceProphecy
|
||||
->sL('label4')
|
||||
->willReturn('label unformatted');
|
||||
|
||||
$GLOBALS['LANG'] = $this->languageServiceProphecy->reveal();
|
||||
|
||||
$this->nodeFactoryProphecy = $this->prophesize(NodeFactory::class);
|
||||
}
|
||||
|
||||
protected function tearDown(): void
|
||||
{
|
||||
unset(
|
||||
$this->subject,
|
||||
$this->nodeFactoryProphecy
|
||||
);
|
||||
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function renderWillNotAddAnyLabels(): void
|
||||
{
|
||||
$this->subject = new StaticText(
|
||||
$this->nodeFactoryProphecy->reveal(),
|
||||
[]
|
||||
);
|
||||
|
||||
$nodeConfiguration = $this->subject->render();
|
||||
|
||||
$this->assertArrayHasKey(
|
||||
'requireJsModules',
|
||||
$nodeConfiguration
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
['TYPO3/CMS/News/TagSuggestWizard'],
|
||||
$nodeConfiguration['requireJsModules']
|
||||
);
|
||||
$this->assertArrayHasKey(
|
||||
'html',
|
||||
$nodeConfiguration
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
'<div class="form-control-wrap news-taggable"></div>',
|
||||
$nodeConfiguration['html']
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function renderWillAddVariousFormattedLabels(): void
|
||||
{
|
||||
$this->subject = new StaticText(
|
||||
$this->nodeFactoryProphecy->reveal(),
|
||||
[
|
||||
'renderData' => [
|
||||
'fieldInformationOptions' => [
|
||||
'labels' => [
|
||||
0 => [
|
||||
'label' => 'label1',
|
||||
'bold' => '1'
|
||||
],
|
||||
1 => [
|
||||
'label' => 'label2',
|
||||
'italic' => 'something'
|
||||
],
|
||||
2 => [
|
||||
'label' => 'label3',
|
||||
'italic' => 30,
|
||||
'bold' => 'hello',
|
||||
],
|
||||
3 => [
|
||||
'label' => 'label4',
|
||||
],
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
);
|
||||
|
||||
$nodeConfiguration = $this->subject->render();
|
||||
|
||||
$this->assertArrayHasKey(
|
||||
'html',
|
||||
$nodeConfiguration
|
||||
);
|
||||
|
||||
$this->assertStringContainsString(
|
||||
'<strong>label bold</strong>',
|
||||
$nodeConfiguration['html']
|
||||
);
|
||||
$this->assertStringContainsString(
|
||||
'<em>label italic</em>',
|
||||
$nodeConfiguration['html']
|
||||
);
|
||||
$this->assertStringContainsString(
|
||||
'<strong><em>label both</em></strong>',
|
||||
$nodeConfiguration['html']
|
||||
);
|
||||
$this->assertStringContainsString(
|
||||
'label unformatted',
|
||||
$nodeConfiguration['html']
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function renderWillDivideLabelsWithBreak(): void
|
||||
{
|
||||
$this->subject = new StaticText(
|
||||
$this->nodeFactoryProphecy->reveal(),
|
||||
[
|
||||
'renderData' => [
|
||||
'fieldInformationOptions' => [
|
||||
'labels' => [
|
||||
0 => [
|
||||
'label' => 'label1',
|
||||
],
|
||||
1 => [
|
||||
'label' => 'label2',
|
||||
],
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
);
|
||||
|
||||
$nodeConfiguration = $this->subject->render();
|
||||
|
||||
$this->assertArrayHasKey(
|
||||
'html',
|
||||
$nodeConfiguration
|
||||
);
|
||||
|
||||
$this->assertStringContainsString(
|
||||
'label bold<br />label italic',
|
||||
$nodeConfiguration['html']
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,107 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Unit\Backend\FormDataProvider;
|
||||
|
||||
/**
|
||||
* 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\Backend\FormDataProvider\NewsRowInitializeNew;
|
||||
use GeorgRinger\News\Domain\Model\Dto\EmConfiguration;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
class NewsRowInitializeNewTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function dateTimeIsFilled(): void
|
||||
{
|
||||
$provider = $this->getAccessibleMock(NewsRowInitializeNew::class, ['dummy'], [], '', false);
|
||||
$mockedEmConfiguration = $this->getAccessibleMock(EmConfiguration::class, ['getDateTimeRequired'], [], '', false);
|
||||
$mockedEmConfiguration->expects($this->once())->method('getDateTimeRequired')->will($this->returnValue(true));
|
||||
|
||||
$provider->_set('emConfiguration', $mockedEmConfiguration);
|
||||
|
||||
$GLOBALS['EXEC_TIME'] = time();
|
||||
|
||||
$result = [
|
||||
'command' => 'new',
|
||||
'tableName' => 'tx_news_domain_model_news'
|
||||
];
|
||||
|
||||
$expected = [
|
||||
'command' => 'new',
|
||||
'tableName' => 'tx_news_domain_model_news',
|
||||
'databaseRow' => [
|
||||
'datetime' => $GLOBALS['EXEC_TIME']
|
||||
]
|
||||
];
|
||||
|
||||
$this->assertEquals($expected, $provider->addData($result));
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function dateTimeIsNotFilledIfSetInExtensionManagerConfiguration(): void
|
||||
{
|
||||
$mockedProvider = $this->getAccessibleMock(NewsRowInitializeNew::class, ['dummy'], [], '', false);
|
||||
$configuration = ['dateTimeNotRequired' => true];
|
||||
$settings = new EmConfiguration($configuration);
|
||||
$mockedProvider->_set('emConfiguration', $settings);
|
||||
|
||||
$result = [
|
||||
'command' => 'new',
|
||||
'tableName' => 'tx_news_domain_model_news'
|
||||
];
|
||||
$expected = [
|
||||
'command' => 'new',
|
||||
'tableName' => 'tx_news_domain_model_news',
|
||||
];
|
||||
|
||||
$this->assertEquals($expected, $mockedProvider->addData($result));
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function archiveTimeIsFilled(): void
|
||||
{
|
||||
$provider = $this->getAccessibleMock(NewsRowInitializeNew::class, ['dummy'], [], '', false);
|
||||
$mockedEmConfiguration = $this->getAccessibleMock(EmConfiguration::class, ['getDateTimeRequired'], [], '', false);
|
||||
$mockedEmConfiguration->expects($this->once())->method('getDateTimeRequired')->will($this->returnValue(true));
|
||||
|
||||
$provider->_set('emConfiguration', $mockedEmConfiguration);
|
||||
|
||||
$GLOBALS['EXEC_TIME'] = time();
|
||||
|
||||
$result = [
|
||||
'command' => 'new',
|
||||
'tableName' => 'tx_news_domain_model_news',
|
||||
'pageTsConfig' => [
|
||||
'tx_news.' => [
|
||||
'predefine.' => [
|
||||
'archive' => '+10 days'
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
|
||||
$expected = $result;
|
||||
$expected['databaseRow']['datetime'] = $GLOBALS['EXEC_TIME'];
|
||||
$expected['databaseRow']['archive'] = strtotime('+10 days');
|
||||
|
||||
$this->assertEquals($expected, $provider->addData($result));
|
||||
}
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Unit\Controller;
|
||||
|
||||
/**
|
||||
* 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\Controller\TagController;
|
||||
use GeorgRinger\News\Domain\Model\Dto\NewsDemand;
|
||||
use GeorgRinger\News\Domain\Repository\TagRepository;
|
||||
use TYPO3\CMS\Fluid\View\TemplateView;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* Testcase for the TagController class.
|
||||
*
|
||||
*
|
||||
*/
|
||||
class TagControllerTest extends BaseTestCase
|
||||
{
|
||||
private $tagRepository = null;
|
||||
|
||||
/**
|
||||
* Set up framework
|
||||
*
|
||||
*/
|
||||
public function setup(): void
|
||||
{
|
||||
$this->tagRepository = $this->prophesize(TagRepository::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for creating correct demand call
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function listActionFindsDemandedTagsByDemandFromSettings(): void
|
||||
{
|
||||
$this->markTestSkipped('May not be relevant anymore. Reason: failing because of using DI');
|
||||
$demand = new NewsDemand();
|
||||
$settings = ['list' => 'foo', 'orderBy' => 'datetime'];
|
||||
|
||||
$fixture->_set('tagRepository', $this->tagRepository->reveal());
|
||||
$fixture->setView($this->getMockBuilder(TemplateView::class)->disableOriginalConstructor()->getMock());
|
||||
$fixture->_set('settings', $settings);
|
||||
|
||||
$fixture->expects($this->once())->method('createDemandObjectFromSettings')
|
||||
->will($this->returnValue($demand));
|
||||
|
||||
$this->tagRepository->findDemanded($demand)->shouldBeCalled();
|
||||
|
||||
$fixture->listAction();
|
||||
|
||||
// datetime must be removed
|
||||
$this->assertEquals($fixture->_get('settings'), ['list' => 'foo']);
|
||||
}
|
||||
}
|
||||
@@ -1,847 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Unit\Domain\Model;
|
||||
|
||||
use GeorgRinger\News\Domain\Model\Category;
|
||||
use GeorgRinger\News\Domain\Model\FileReference;
|
||||
/**
|
||||
* 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 TYPO3\CMS\Extbase\Persistence\ObjectStorage;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* Tests for \GeorgRinger\News\Domain\Model\Category
|
||||
*
|
||||
*/
|
||||
class CategoryTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* @var Category
|
||||
*/
|
||||
protected $instance;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->instance = new Category();
|
||||
}
|
||||
|
||||
protected function tearDown(): void
|
||||
{
|
||||
unset($this->instance);
|
||||
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getSortingInitiallyReturnsZero(): void
|
||||
{
|
||||
$this->assertSame(
|
||||
0,
|
||||
$this->instance->getSorting()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setSortingWithStringConvertsValueToInt(): void
|
||||
{
|
||||
$this->instance->setSorting('123');
|
||||
$this->assertSame(
|
||||
123,
|
||||
$this->instance->getSorting()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setSortingWithIntSetsSorting(): void
|
||||
{
|
||||
$value = 123;
|
||||
$this->instance->setSorting($value);
|
||||
$this->assertSame(
|
||||
$value,
|
||||
$this->instance->getSorting()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getCrdateInitiallyReturnsNull(): void
|
||||
{
|
||||
$this->assertNull(
|
||||
$this->instance->getCrdate()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setCrdateSetsCrdate(): void
|
||||
{
|
||||
$date = new \DateTime('now');
|
||||
$this->instance->setCrdate($date);
|
||||
$this->assertSame(
|
||||
$date,
|
||||
$this->instance->getCrdate()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getTstampInitiallyReturnsNull(): void
|
||||
{
|
||||
$this->assertNull(
|
||||
$this->instance->getTstamp()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setTstampSetsTstamp(): void
|
||||
{
|
||||
$date = new \DateTime('now');
|
||||
$this->instance->setTstamp($date);
|
||||
$this->assertSame(
|
||||
$date,
|
||||
$this->instance->getTstamp()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getStarttimeInitiallyReturnsNull(): void
|
||||
{
|
||||
$this->assertNull(
|
||||
$this->instance->getStarttime()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setStarttimeSetsStarttime(): void
|
||||
{
|
||||
$date = new \DateTime('now');
|
||||
$this->instance->setStarttime($date);
|
||||
$this->assertSame(
|
||||
$date,
|
||||
$this->instance->getStarttime()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getEndtimeInitiallyReturnsNull(): void
|
||||
{
|
||||
$this->assertNull(
|
||||
$this->instance->getEndtime()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setEndtimeSetsEndtime(): void
|
||||
{
|
||||
$date = new \DateTime('now');
|
||||
$this->instance->setEndtime($date);
|
||||
$this->assertSame(
|
||||
$date,
|
||||
$this->instance->getEndtime()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getHiddenInitiallyReturnsFalse(): void
|
||||
{
|
||||
$this->assertFalse(
|
||||
$this->instance->getHidden()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setHiddenWithStringSetsHidden(): void
|
||||
{
|
||||
$this->instance->setHidden('1');
|
||||
$this->assertTrue(
|
||||
$this->instance->getHidden()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setHiddenWithIntSetsHidden(): void
|
||||
{
|
||||
$this->instance->setHidden(1);
|
||||
$this->assertTrue(
|
||||
$this->instance->getHidden()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setHiddenWithTrueSetsHidden(): void
|
||||
{
|
||||
$this->instance->setHidden(true);
|
||||
$this->assertTrue(
|
||||
$this->instance->getHidden()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setHiddenWithFalseSetsHidden(): void
|
||||
{
|
||||
$this->instance->setHidden(false);
|
||||
$this->assertFalse(
|
||||
$this->instance->getHidden()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getSysLanguageUidInitiallyReturnsZero(): void
|
||||
{
|
||||
$this->assertSame(
|
||||
0,
|
||||
$this->instance->getSysLanguageUid()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setSysLanguageUidWithStringConvertsToInt(): void
|
||||
{
|
||||
$this->instance->setSysLanguageUid('2');
|
||||
$this->assertSame(
|
||||
2,
|
||||
$this->instance->getSysLanguageUid()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setSysLanguageUidSetsSysLanguageUid(): void
|
||||
{
|
||||
$value = 3;
|
||||
$this->instance->setSysLanguageUid($value);
|
||||
$this->assertSame(
|
||||
$value,
|
||||
$this->instance->getSysLanguageUid()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getL10nParentInitiallyReturnsZero(): void
|
||||
{
|
||||
$this->assertSame(
|
||||
0,
|
||||
$this->instance->getL10nParent()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setL10nParentWithStringConvertsToInt(): void
|
||||
{
|
||||
$this->instance->setL10nParent('2');
|
||||
$this->assertSame(
|
||||
2,
|
||||
$this->instance->getL10nParent()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setL10nParentSetsL10nParent(): void
|
||||
{
|
||||
$value = 3;
|
||||
$this->instance->setL10nParent($value);
|
||||
$this->assertSame(
|
||||
$value,
|
||||
$this->instance->getL10nParent()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getTitleInitiallyReturnsEmptyString(): void
|
||||
{
|
||||
$this->assertSame(
|
||||
'',
|
||||
$this->instance->getTitle()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setTitleWithIntConvertsToSting(): void
|
||||
{
|
||||
$this->instance->setTitle(123);
|
||||
$this->assertSame(
|
||||
'123',
|
||||
$this->instance->getTitle()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setTitleSetsTitle(): void
|
||||
{
|
||||
$value = 'Hello';
|
||||
$this->instance->setTitle($value);
|
||||
$this->assertSame(
|
||||
$value,
|
||||
$this->instance->getTitle()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getDescriptionInitiallyReturnsEmptyString(): void
|
||||
{
|
||||
$this->assertSame(
|
||||
'',
|
||||
$this->instance->getDescription()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setDescriptionWithIntConvertsToSting(): void
|
||||
{
|
||||
$this->instance->setDescription(123);
|
||||
$this->assertSame(
|
||||
'123',
|
||||
$this->instance->getDescription()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setDescriptionSetsDescription(): void
|
||||
{
|
||||
$value = 'Hello';
|
||||
$this->instance->setDescription($value);
|
||||
$this->assertSame(
|
||||
$value,
|
||||
$this->instance->getDescription()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getParentcategoryInitiallyReturnsNull(): void
|
||||
{
|
||||
$this->assertNull(
|
||||
$this->instance->getParentcategory()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setParentcategorySetsParentcategory(): void
|
||||
{
|
||||
$value = new Category();
|
||||
$value->setTitle('TYPO3');
|
||||
$this->instance->setParentcategory($value);
|
||||
$this->assertSame(
|
||||
$value,
|
||||
$this->instance->getParentcategory()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getImagesInitiallyReturnsObjectStorage(): void
|
||||
{
|
||||
$value = new ObjectStorage();
|
||||
$this->assertEquals(
|
||||
$value,
|
||||
$this->instance->getImages()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setImagesSetsImages(): void
|
||||
{
|
||||
$value = new ObjectStorage();
|
||||
$this->instance->setImages($value);
|
||||
$this->assertSame(
|
||||
$value,
|
||||
$this->instance->getImages()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function addImageAddsImage(): void
|
||||
{
|
||||
$fileReference = new FileReference();
|
||||
|
||||
$images = new ObjectStorage();
|
||||
$images->attach($fileReference);
|
||||
|
||||
$this->instance->addImage($fileReference);
|
||||
$this->assertEquals(
|
||||
$images,
|
||||
$this->instance->getImages()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function removeImageRemovesImage(): void
|
||||
{
|
||||
$fileReference = new FileReference();
|
||||
|
||||
$images = new ObjectStorage();
|
||||
$images->attach($fileReference);
|
||||
|
||||
$expectedImages = clone $images;
|
||||
$expectedImages->detach($fileReference);
|
||||
|
||||
$this->instance->setImages($images);
|
||||
|
||||
$this->instance->removeImage($fileReference);
|
||||
$this->assertEquals(
|
||||
$expectedImages,
|
||||
$this->instance->getImages()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getFirstImageInitiallyReturnsNull(): void
|
||||
{
|
||||
$this->assertNull(
|
||||
$this->instance->getFirstImage()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getFirstImageReturnsFileReference(): void
|
||||
{
|
||||
$fileReference1 = new FileReference();
|
||||
$fileReference1->setTitle('Image 1');
|
||||
|
||||
$fileReference2 = new FileReference();
|
||||
$fileReference2->setTitle('Image 2');
|
||||
|
||||
$images = new ObjectStorage();
|
||||
$images->attach($fileReference1);
|
||||
$images->attach($fileReference2);
|
||||
|
||||
$this->instance->setImages($images);
|
||||
|
||||
$this->assertSame(
|
||||
$fileReference1,
|
||||
$this->instance->getFirstImage()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getShortcutInitiallyReturnsZero(): void
|
||||
{
|
||||
$this->assertSame(
|
||||
0,
|
||||
$this->instance->getShortcut()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setShortcutWithStringConvertsToInt(): void
|
||||
{
|
||||
$this->instance->setShortcut('43');
|
||||
$this->assertSame(
|
||||
43,
|
||||
$this->instance->getShortcut()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setShortcutSetsShortcut(): void
|
||||
{
|
||||
$value = 23;
|
||||
$this->instance->setShortcut($value);
|
||||
$this->assertSame(
|
||||
$value,
|
||||
$this->instance->getShortcut()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getSinglePidInitiallyReturnsZero(): void
|
||||
{
|
||||
$this->assertSame(
|
||||
0,
|
||||
$this->instance->getSinglePid()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setSinglePidWithStringConvertsToInt(): void
|
||||
{
|
||||
$this->instance->setSinglePid('43');
|
||||
$this->assertSame(
|
||||
43,
|
||||
$this->instance->getSinglePid()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setSinglePidSetsSinglePid(): void
|
||||
{
|
||||
$value = 23;
|
||||
$this->instance->setSinglePid($value);
|
||||
$this->assertSame(
|
||||
$value,
|
||||
$this->instance->getSinglePid()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getImportIdInitiallyReturnsEmptyString(): void
|
||||
{
|
||||
$this->assertSame(
|
||||
'',
|
||||
$this->instance->getImportId()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setImportIdWithIntConvertsToString(): void
|
||||
{
|
||||
$this->instance->setImportId(24);
|
||||
$this->assertSame(
|
||||
'24',
|
||||
$this->instance->getImportId()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setImportIdSetsImportId(): void
|
||||
{
|
||||
$value = '1324';
|
||||
$this->instance->setImportId($value);
|
||||
$this->assertSame(
|
||||
$value,
|
||||
$this->instance->getImportId()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getImportSourceInitiallyReturnsEmptyString(): void
|
||||
{
|
||||
$this->assertSame(
|
||||
'',
|
||||
$this->instance->getImportSource()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setImportSourceWithIntConvertsToString(): void
|
||||
{
|
||||
$this->instance->setImportSource(24);
|
||||
$this->assertSame(
|
||||
'24',
|
||||
$this->instance->getImportSource()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setImportSourceSetsImportSource(): void
|
||||
{
|
||||
$value = '1324';
|
||||
$this->instance->setImportSource($value);
|
||||
$this->assertSame(
|
||||
$value,
|
||||
$this->instance->getImportSource()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getFeGroupInitiallyReturnsEmptyString(): void
|
||||
{
|
||||
$this->assertSame(
|
||||
'',
|
||||
$this->instance->getImportSource()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setFeGroupWithIntConvertsToString(): void
|
||||
{
|
||||
$this->instance->setFeGroup(24);
|
||||
$this->assertSame(
|
||||
'24',
|
||||
$this->instance->getFeGroup()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setFeGroupSetsFeGroup(): void
|
||||
{
|
||||
$value = '1324';
|
||||
$this->instance->setFeGroup($value);
|
||||
$this->assertSame(
|
||||
$value,
|
||||
$this->instance->getFeGroup()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getSeoTitleInitiallyReturnsEmptyString(): void
|
||||
{
|
||||
$this->assertSame(
|
||||
'',
|
||||
$this->instance->getSeoTitle()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setSeoTitleWithIntConvertsToString(): void
|
||||
{
|
||||
$this->instance->setSeoTitle(24);
|
||||
$this->assertSame(
|
||||
'24',
|
||||
$this->instance->getSeoTitle()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setSeoTitleSetsSeoTitle(): void
|
||||
{
|
||||
$value = 'TYPO3';
|
||||
$this->instance->setSeoTitle($value);
|
||||
$this->assertSame(
|
||||
$value,
|
||||
$this->instance->getSeoTitle()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getSeoDescriptionInitiallyReturnsEmptyString(): void
|
||||
{
|
||||
$this->assertSame(
|
||||
'',
|
||||
$this->instance->getSeoDescription()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setSeoDescriptionWithIntConvertsToString(): void
|
||||
{
|
||||
$this->instance->setSeoDescription(24);
|
||||
$this->assertSame(
|
||||
'24',
|
||||
$this->instance->getSeoDescription()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setSeoDescriptionSetsSeoDescription(): void
|
||||
{
|
||||
$value = 'TYPO3';
|
||||
$this->instance->setSeoDescription($value);
|
||||
$this->assertSame(
|
||||
$value,
|
||||
$this->instance->getSeoDescription()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getSeoHeadlineInitiallyReturnsEmptyString(): void
|
||||
{
|
||||
$this->assertSame(
|
||||
'',
|
||||
$this->instance->getSeoHeadline()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setSeoHeadlineWithIntConvertsToString(): void
|
||||
{
|
||||
$this->instance->setSeoHeadline(24);
|
||||
$this->assertSame(
|
||||
'24',
|
||||
$this->instance->getSeoHeadline()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setSeoHeadlineSetsSeoHeadline(): void
|
||||
{
|
||||
$value = 'TYPO3';
|
||||
$this->instance->setSeoHeadline($value);
|
||||
$this->assertSame(
|
||||
$value,
|
||||
$this->instance->getSeoHeadline()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getSeoTextInitiallyReturnsEmptyString(): void
|
||||
{
|
||||
$this->assertSame(
|
||||
'',
|
||||
$this->instance->getSeoText()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setSeoTextWithIntConvertsToString(): void
|
||||
{
|
||||
$this->instance->setSeoText(24);
|
||||
$this->assertSame(
|
||||
'24',
|
||||
$this->instance->getSeoText()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setSeoTextSetsSeoText(): void
|
||||
{
|
||||
$value = 'TYPO3';
|
||||
$this->instance->setSeoText($value);
|
||||
$this->assertSame(
|
||||
$value,
|
||||
$this->instance->getSeoText()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function getSlugInitiallyReturnsEmptyString(): void
|
||||
{
|
||||
$this->assertSame(
|
||||
'',
|
||||
$this->instance->getSlug()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setSlugWithIntConvertsToString(): void
|
||||
{
|
||||
$this->instance->setSlug(24);
|
||||
$this->assertSame(
|
||||
'24',
|
||||
$this->instance->getSlug()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function setSlugSetsSlug(): void
|
||||
{
|
||||
$value = 'TYPO3';
|
||||
$this->instance->setSlug($value);
|
||||
$this->assertSame(
|
||||
$value,
|
||||
$this->instance->getSlug()
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,96 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Unit\Domain\Model\Dto;
|
||||
|
||||
/**
|
||||
* 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\Dto\AdministrationDemand;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* Tests for AdministrationDemand
|
||||
*
|
||||
*/
|
||||
class AdministrationDemandTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/** @var AdministrationDemand */
|
||||
protected $instance;
|
||||
|
||||
public function setup(): void
|
||||
{
|
||||
$this->instance = new AdministrationDemand();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if recursive can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function recursiveCanBeSet(): void
|
||||
{
|
||||
$value = 'Test 123';
|
||||
$this->instance->setRecursive($value);
|
||||
$this->assertEquals($value, $this->instance->getRecursive());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if selectedCategories can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function selectedCategoriesCanBeSet(): void
|
||||
{
|
||||
$value = ['Test 123'];
|
||||
$this->instance->setCategories($value);
|
||||
$this->assertEquals($value, $this->instance->getCategories());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if sortingField can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function sortingFieldCanBeSet(): void
|
||||
{
|
||||
$value = 'title';
|
||||
$this->instance->setSortingField($value);
|
||||
$this->assertEquals($value, $this->instance->getSortingField());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if sortingDirection can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function sortingDirectionCanBeSet(): void
|
||||
{
|
||||
$value = 'asc';
|
||||
$this->instance->setSortingDirection($value);
|
||||
$this->assertEquals($value, $this->instance->getSortingDirection());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function hiddenCanBeSet(): void
|
||||
{
|
||||
$value = 2;
|
||||
$this->instance->setHidden($value);
|
||||
$this->assertEquals($value, $this->instance->getHidden());
|
||||
}
|
||||
}
|
||||
@@ -1,91 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Unit\Domain\Model\Dto;
|
||||
|
||||
/**
|
||||
* 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\Dto\EmConfiguration;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* Tests for domains model News
|
||||
*
|
||||
*/
|
||||
class EmConfigurationTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* Test if the settings can be read
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function settingsCanBeRead(): void
|
||||
{
|
||||
$configuration = [
|
||||
'tagPid' => 123,
|
||||
'prependAtCopy' => true,
|
||||
'categoryRestriction' => 'fo',
|
||||
'contentElementRelation' => false,
|
||||
'manualSorting' => false,
|
||||
'archiveDate' => 'bar',
|
||||
'dateTimeNotRequired' => true,
|
||||
'showImporter' => true,
|
||||
'showAdministrationModule' => false,
|
||||
'rteForTeaser' => false,
|
||||
'storageUidImporter' => 1,
|
||||
'resourceFolderImporter' => 'fo',
|
||||
'hidePageTreeForAdministrationModule' => true,
|
||||
'slugBehaviour' => 'uniqueInSite',
|
||||
];
|
||||
|
||||
$configurationInstance = $this->getAccessibleMock(EmConfiguration::class, ['dummy'], [], '', false);
|
||||
foreach ($configuration as $key => $value) {
|
||||
$configurationInstance->_set($key, $value);
|
||||
}
|
||||
foreach ($configuration as $key => $value) {
|
||||
$functionName = 'get' . ucwords($key);
|
||||
$this->assertEquals($value, $configurationInstance->$functionName());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if default settings can be read
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function defaultSettingsCanBeRead(): void
|
||||
{
|
||||
$configuration = [
|
||||
'tagPid' => 0,
|
||||
'prependAtCopy' => true,
|
||||
'categoryRestriction' => '',
|
||||
'contentElementRelation' => true,
|
||||
'manualSorting' => false,
|
||||
'archiveDate' => 'date',
|
||||
'dateTimeNotRequired' => false,
|
||||
'showImporter' => false,
|
||||
'showAdministrationModule' => true,
|
||||
'rteForTeaser' => false,
|
||||
'storageUidImporter' => 1,
|
||||
'resourceFolderImporter' => '/news_import',
|
||||
'hidePageTreeForAdministrationModule' => false,
|
||||
'slugBehaviour' => 'unique',
|
||||
];
|
||||
|
||||
$configurationInstance = $this->getAccessibleMock(EmConfiguration::class, ['dummy'], [], '', false);
|
||||
|
||||
foreach ($configuration as $key => $value) {
|
||||
$functionName = 'get' . ucwords($key);
|
||||
$this->assertEquals($value, $configurationInstance->$functionName());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,349 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Unit\Domain\Model\Dto;
|
||||
|
||||
/**
|
||||
* 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\Dto\NewsDemand;
|
||||
use GeorgRinger\News\Domain\Model\Dto\Search;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* Tests for NewsDemand
|
||||
*/
|
||||
class NewsDemandTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/** @var NewsDemand */
|
||||
protected $instance;
|
||||
|
||||
public function setup(): void
|
||||
{
|
||||
$this->instance = new NewsDemand();
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function categoriesCanBeSet(): void
|
||||
{
|
||||
$value = ['Test 123'];
|
||||
$this->instance->setCategories($value);
|
||||
$this->assertEquals($value, $this->instance->getCategories());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function categoryConjunctionCanBeSet(): void
|
||||
{
|
||||
$value = 'AND';
|
||||
$this->instance->setCategoryConjunction($value);
|
||||
$this->assertEquals($value, $this->instance->getCategoryConjunction());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function includeSubCategoriesCanBeSet(): void
|
||||
{
|
||||
$value = true;
|
||||
$this->instance->setIncludeSubCategories($value);
|
||||
$this->assertEquals($value, $this->instance->getIncludeSubCategories());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function authorCanBeSet(): void
|
||||
{
|
||||
$value = '7elix';
|
||||
$this->instance->setAuthor($value);
|
||||
$this->assertEquals($value, $this->instance->getAuthor());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function tagsCanBeSet(): void
|
||||
{
|
||||
$value = '1,2,3';
|
||||
$this->instance->setTags($value);
|
||||
$this->assertEquals($value, $this->instance->getTags());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function archiveRestrictionCanBeSet(): void
|
||||
{
|
||||
$value = 'archive';
|
||||
$this->instance->setArchiveRestriction($value);
|
||||
$this->assertEquals($value, $this->instance->getArchiveRestriction());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function timeRestrictionCanBeSet(): void
|
||||
{
|
||||
$value = '2014-04-01';
|
||||
$this->instance->setTimeRestriction($value);
|
||||
$this->assertEquals($value, $this->instance->getTimeRestriction());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function timeRestrictionHighCanBeSet(): void
|
||||
{
|
||||
$value = '2014-05-01';
|
||||
$this->instance->setTimeRestrictionHigh($value);
|
||||
$this->assertEquals($value, $this->instance->getTimeRestrictionHigh());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function topNewsRestrictionCanBeSet(): void
|
||||
{
|
||||
$value = 1;
|
||||
$this->instance->setTopNewsRestriction($value);
|
||||
$this->assertEquals($value, $this->instance->getTopNewsRestriction());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function dateFieldCanBeSet(): void
|
||||
{
|
||||
$value = 'datetime';
|
||||
$this->instance->setDateField($value);
|
||||
$this->assertEquals($value, $this->instance->getDateField());
|
||||
|
||||
$value = 'archive';
|
||||
$this->instance->setDateField($value);
|
||||
$this->assertEquals($value, $this->instance->getDateField());
|
||||
|
||||
$value = 'invalid';
|
||||
$this->instance->setDateField($value);
|
||||
$this->assertEquals('', $this->instance->getDateField());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function monthCanBeSet(): void
|
||||
{
|
||||
$value = 4;
|
||||
$this->instance->setMonth($value);
|
||||
$this->assertEquals($value, $this->instance->getMonth());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function yearCanBeSet(): void
|
||||
{
|
||||
$value = 2014;
|
||||
$this->instance->setYear($value);
|
||||
$this->assertEquals($value, $this->instance->getYear());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function dayCanBeSet(): void
|
||||
{
|
||||
$value = 1;
|
||||
$this->instance->setDay($value);
|
||||
$this->assertEquals($value, $this->instance->getDay());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function searchFieldsCanBeSet(): void
|
||||
{
|
||||
$value = 'field1,field2';
|
||||
$this->instance->setSearchFields($value);
|
||||
$this->assertEquals($value, $this->instance->getSearchFields());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function searchCanBeSet(): void
|
||||
{
|
||||
$value = new Search();
|
||||
$value->setSubject('fo');
|
||||
$this->instance->setSearch($value);
|
||||
$this->assertEquals($value, $this->instance->getSearch());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function orderCanBeSet(): void
|
||||
{
|
||||
$value = 'order';
|
||||
$this->instance->setOrder($value);
|
||||
$this->assertEquals($value, $this->instance->getOrder());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function orderByAllowedCanBeSet(): void
|
||||
{
|
||||
$value = 'order,order2';
|
||||
$this->instance->setOrderByAllowed($value);
|
||||
$this->assertEquals($value, $this->instance->getOrderByAllowed());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function topNewsFirstCanBeSet(): void
|
||||
{
|
||||
$value = true;
|
||||
$this->instance->setTopNewsFirst($value);
|
||||
$this->assertEquals($value, $this->instance->getTopNewsFirst());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function storagePageCanBeSet(): void
|
||||
{
|
||||
$value = 456;
|
||||
$this->instance->setStoragePage($value);
|
||||
$this->assertEquals($value, $this->instance->getStoragePage());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function limitCanBeSet(): void
|
||||
{
|
||||
$value = 10;
|
||||
$this->instance->setLimit($value);
|
||||
$this->assertEquals($value, $this->instance->getLimit());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function offsetCanBeSet(): void
|
||||
{
|
||||
$value = 20;
|
||||
$this->instance->setOffset($value);
|
||||
$this->assertEquals($value, $this->instance->getOffset());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function excludeAlreadyDisplayedNewsCanBeSet(): void
|
||||
{
|
||||
$value = true;
|
||||
$this->instance->setExcludeAlreadyDisplayedNews($value);
|
||||
$this->assertEquals($value, $this->instance->getExcludeAlreadyDisplayedNews());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function hideIdListCanBeSet(): void
|
||||
{
|
||||
$value = '123,456';
|
||||
$this->instance->setHideIdList($value);
|
||||
$this->assertEquals($value, $this->instance->getHideIdList());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function actionCanBeSet(): void
|
||||
{
|
||||
$value = 'anAction';
|
||||
$this->instance->setAction($value);
|
||||
$this->assertEquals($value, $this->instance->getAction());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function classCanBeSet(): void
|
||||
{
|
||||
$value = 'FooBar';
|
||||
$this->instance->setClass($value);
|
||||
$this->assertEquals($value, $this->instance->getClass());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function typesCanBeSet(): void
|
||||
{
|
||||
$value = ['12', '34'];
|
||||
$this->instance->setTypes($value);
|
||||
$this->assertEquals($value, $this->instance->getTypes());
|
||||
}
|
||||
}
|
||||
@@ -1,80 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Unit\Domain\Model\Dto;
|
||||
|
||||
/**
|
||||
* 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\Dto\Search;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* Tests for domains model News
|
||||
*
|
||||
*/
|
||||
class SearchTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* Test if subject can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function subjectCanBeSet(): void
|
||||
{
|
||||
$domainModelInstance = new Search();
|
||||
$subject = 'Test 123';
|
||||
$domainModelInstance->setSubject($subject);
|
||||
$this->assertEquals($subject, $domainModelInstance->getSubject());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if fields can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function fieldsCanBeSet(): void
|
||||
{
|
||||
$domainModelInstance = new Search();
|
||||
$fields = 'field1,field2';
|
||||
$domainModelInstance->setFields($fields);
|
||||
$this->assertEquals($fields, $domainModelInstance->getFields());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if minimumDate can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function minimumDateCanBeSet(): void
|
||||
{
|
||||
$domainModelInstance = new Search();
|
||||
$value = '123';
|
||||
$domainModelInstance->setMinimumDate($value);
|
||||
$this->assertEquals($value, $domainModelInstance->getMinimumDate());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if minimumDate can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function maximumDateCanBeSet(): void
|
||||
{
|
||||
$domainModelInstance = new Search();
|
||||
$value = '456';
|
||||
$domainModelInstance->setMaximumDate($value);
|
||||
$this->assertEquals($value, $domainModelInstance->getMaximumDate());
|
||||
}
|
||||
}
|
||||
@@ -1,109 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Unit\Domain\Model;
|
||||
|
||||
/**
|
||||
* 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\FileReference;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* Tests for GeorgRinger\News\Domain\Model\FileReference
|
||||
*/
|
||||
class FileReferenceTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* Test if fileUid can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function fileUidCanBeSet(): void
|
||||
{
|
||||
$domainModelInstance = new FileReference();
|
||||
$value = 781;
|
||||
$domainModelInstance->setFileUid($value);
|
||||
$this->assertEquals($value, $domainModelInstance->getFileUid());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if alternative can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function alternativeBeSet(): void
|
||||
{
|
||||
$domainModelInstance = new FileReference();
|
||||
$value = 'Test 123';
|
||||
$domainModelInstance->setAlternative($value);
|
||||
$this->assertEquals($value, $domainModelInstance->getAlternative());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if description can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function descriptionBeSet(): void
|
||||
{
|
||||
$domainModelInstance = new FileReference();
|
||||
$value = 'Test 123';
|
||||
$domainModelInstance->setDescription($value);
|
||||
$this->assertEquals($value, $domainModelInstance->getDescription());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if link can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function linkBeSet(): void
|
||||
{
|
||||
$domainModelInstance = new FileReference();
|
||||
$value = 'Test 123';
|
||||
$domainModelInstance->setLink($value);
|
||||
$this->assertEquals($value, $domainModelInstance->getLink());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if title can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function titleBeSet(): void
|
||||
{
|
||||
$domainModelInstance = new FileReference();
|
||||
$value = 'Test 123';
|
||||
$domainModelInstance->setTitle($value);
|
||||
$this->assertEquals($value, $domainModelInstance->getTitle());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if showInPreview can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function showInPreviewBeSet(): void
|
||||
{
|
||||
$domainModelInstance = new FileReference();
|
||||
$value = 2;
|
||||
$domainModelInstance->setShowinpreview($value);
|
||||
$this->assertEquals($value, $domainModelInstance->getShowinpreview());
|
||||
}
|
||||
}
|
||||
@@ -1,103 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Unit\Domain\Model;
|
||||
|
||||
/**
|
||||
* 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\Link;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* Tests for domains model Link
|
||||
*/
|
||||
class LinkTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* @var Link
|
||||
*/
|
||||
protected $linkDomainModelInstance;
|
||||
|
||||
/**
|
||||
* Setup
|
||||
*
|
||||
*/
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->linkDomainModelInstance = new Link();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if title can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function titleCanBeSet(): void
|
||||
{
|
||||
$title = 'File title';
|
||||
$this->linkDomainModelInstance->setTitle($title);
|
||||
$this->assertEquals($title, $this->linkDomainModelInstance->getTitle());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if crdate can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function crdateCanBeSet(): void
|
||||
{
|
||||
$time = new \DateTime();
|
||||
$this->linkDomainModelInstance->setCrdate($time);
|
||||
$this->assertEquals($time, $this->linkDomainModelInstance->getCrdate());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if tstamp can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function tstampCanBeSet(): void
|
||||
{
|
||||
$time = new \DateTime();
|
||||
$this->linkDomainModelInstance->setTstamp($time);
|
||||
$this->assertEquals($time, $this->linkDomainModelInstance->getTstamp());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if description can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function descriptionCanBeSet(): void
|
||||
{
|
||||
$description = 'This is a description';
|
||||
$this->linkDomainModelInstance->setDescription($description);
|
||||
$this->assertEquals($description, $this->linkDomainModelInstance->getDescription());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if uri can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function uriCanBeSet(): void
|
||||
{
|
||||
$uri = 'http://typo3.org';
|
||||
$this->linkDomainModelInstance->setUri($uri);
|
||||
$this->assertEquals($uri, $this->linkDomainModelInstance->getUri());
|
||||
}
|
||||
}
|
||||
@@ -1,408 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Unit\Domain\Model;
|
||||
|
||||
use GeorgRinger\News\Domain\Model\Category;
|
||||
/**
|
||||
* 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\FileReference;
|
||||
use GeorgRinger\News\Domain\Model\Link;
|
||||
use GeorgRinger\News\Domain\Model\News;
|
||||
use GeorgRinger\News\Domain\Model\Tag;
|
||||
use TYPO3\CMS\Extbase\Persistence\ObjectStorage;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* Tests for domains model News
|
||||
*
|
||||
*/
|
||||
class NewsTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* @var News
|
||||
*/
|
||||
protected $newsDomainModelInstance;
|
||||
|
||||
/**
|
||||
* Set up framework
|
||||
*
|
||||
*/
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->newsDomainModelInstance = new News();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if title can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function titleCanBeSet(): void
|
||||
{
|
||||
$title = 'News title';
|
||||
$this->newsDomainModelInstance->setTitle($title);
|
||||
$this->assertEquals($title, $this->newsDomainModelInstance->getTitle());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if teaser can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function teaserCanBeSet(): void
|
||||
{
|
||||
$teaser = 'News teaser';
|
||||
$this->newsDomainModelInstance->setTeaser($teaser);
|
||||
$this->assertEquals($teaser, $this->newsDomainModelInstance->getTeaser());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if bodytext can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function bodytextCanBeSet(): void
|
||||
{
|
||||
$bodytext = 'News bodytext';
|
||||
$this->newsDomainModelInstance->setBodytext($bodytext);
|
||||
$this->assertEquals($bodytext, $this->newsDomainModelInstance->getBodytext());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if datetime can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function datetimeCanBeSet(): void
|
||||
{
|
||||
$datetime = new \DateTime();
|
||||
$this->newsDomainModelInstance->setDatetime($datetime);
|
||||
$this->assertEquals($datetime, $this->newsDomainModelInstance->getDatetime());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if archive can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function archiveCanBeSet(): void
|
||||
{
|
||||
$archive = new \DateTime();
|
||||
$this->newsDomainModelInstance->setArchive($archive);
|
||||
$this->assertEquals($archive, $this->newsDomainModelInstance->getArchive());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if author can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function authorCanBeSet(): void
|
||||
{
|
||||
$author = 'News author';
|
||||
$this->newsDomainModelInstance->setAuthor($author);
|
||||
$this->assertEquals($author, $this->newsDomainModelInstance->getAuthor());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if emailadr can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function authorEmailCanBeSet(): void
|
||||
{
|
||||
$authorEmail = 'author@news.org';
|
||||
$this->newsDomainModelInstance->setAuthorEmail($authorEmail);
|
||||
$this->assertEquals($authorEmail, $this->newsDomainModelInstance->getAuthorEmail());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if type can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function typeCanBeSet(): void
|
||||
{
|
||||
$type = 123;
|
||||
$this->newsDomainModelInstance->setType($type);
|
||||
$this->assertEquals($type, $this->newsDomainModelInstance->getType());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if keyword can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function keywordsCanBeSet(): void
|
||||
{
|
||||
$keywords = 'news1 keyword, news keyword';
|
||||
$this->newsDomainModelInstance->setKeywords($keywords);
|
||||
$this->assertEquals($keywords, $this->newsDomainModelInstance->getKeywords());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if internalurl can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function internalurlCanBeSet(): void
|
||||
{
|
||||
$internalurl = 'http://foo.org/';
|
||||
$this->newsDomainModelInstance->setInternalurl($internalurl);
|
||||
$this->assertEquals($internalurl, $this->newsDomainModelInstance->getInternalurl());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if externalurl can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function externalurlCanBeSet(): void
|
||||
{
|
||||
$externalurl = 'http://bar.org/';
|
||||
$this->newsDomainModelInstance->setExternalurl($externalurl);
|
||||
$this->assertEquals($externalurl, $this->newsDomainModelInstance->getExternalurl());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if topnews can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function isttopnewsCanBeSet(): void
|
||||
{
|
||||
$istopnews = true;
|
||||
$this->newsDomainModelInstance->setIstopnews($istopnews);
|
||||
$this->assertEquals($istopnews, $this->newsDomainModelInstance->getIstopnews());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if editlock can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function editlockCanBeSet(): void
|
||||
{
|
||||
$editlock = 2;
|
||||
$this->newsDomainModelInstance->setEditlock($editlock);
|
||||
$this->assertEquals($editlock, $this->newsDomainModelInstance->getEditlock());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if importid can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function importIdCanBeSet(): void
|
||||
{
|
||||
$importId = 2;
|
||||
$this->newsDomainModelInstance->setImportId($importId);
|
||||
$this->assertEquals($importId, $this->newsDomainModelInstance->getImportId());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if importSource can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function importSourceCanBeSet(): void
|
||||
{
|
||||
$importSource = 'test';
|
||||
$this->newsDomainModelInstance->setImportSource($importSource);
|
||||
$this->assertEquals($importSource, $this->newsDomainModelInstance->getImportSource());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if sorting can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function sortingCanBeSet(): void
|
||||
{
|
||||
$sorting = 2;
|
||||
$this->newsDomainModelInstance->setSorting($sorting);
|
||||
$this->assertEquals($sorting, $this->newsDomainModelInstance->getSorting());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if tag can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function tagsCanBeSet(): void
|
||||
{
|
||||
$tags = new ObjectStorage();
|
||||
|
||||
$tag = new Tag();
|
||||
$tag->setTitle('Tag');
|
||||
$tags->attach($tag);
|
||||
$this->newsDomainModelInstance->setTags($tags);
|
||||
$this->assertEquals($tags, $this->newsDomainModelInstance->getTags());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if content elements can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function contentElementsCanBeSet(): void
|
||||
{
|
||||
$ce = new ObjectStorage();
|
||||
|
||||
$item = new \SplObjectStorage();
|
||||
$ce->attach($item);
|
||||
|
||||
$this->newsDomainModelInstance->setContentElements($ce);
|
||||
$this->assertEquals($ce, $this->newsDomainModelInstance->getContentElements());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if category can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function categoryCanBeSet(): void
|
||||
{
|
||||
$category = new Category();
|
||||
$category->setTitle('fo');
|
||||
$categories = new ObjectStorage();
|
||||
$categories->attach($category);
|
||||
$this->newsDomainModelInstance->setCategories($categories);
|
||||
$this->assertEquals($categories, $this->newsDomainModelInstance->getCategories());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if related links can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function relatedLinksCanBeSet(): void
|
||||
{
|
||||
$link = new Link();
|
||||
$link->setTitle('fo');
|
||||
|
||||
$related = new ObjectStorage();
|
||||
$related->attach($link);
|
||||
$this->newsDomainModelInstance->setRelatedLinks($related);
|
||||
$this->assertEquals($related, $this->newsDomainModelInstance->getRelatedLinks());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function falMediaCanBeAdded(): void
|
||||
{
|
||||
$mediaItem = new FileReference();
|
||||
$mediaItem->setTitle('Fo');
|
||||
|
||||
$news = new News();
|
||||
$news->addFalMedia($mediaItem);
|
||||
|
||||
$this->assertEquals($news->getFalMedia()->current(), $mediaItem);
|
||||
$this->assertEquals($news->getMedia()->current(), $mediaItem);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function falMediaPreviewsAreReturned(): void
|
||||
{
|
||||
$news = new News();
|
||||
|
||||
$mockedElement1 = $this->getAccessibleMock(FileReference::class, ['getProperty']);
|
||||
$mockedElement1->_set('uid', 1);
|
||||
$mockedElement1->_set('showinpreview', 1);
|
||||
$mockedElement1->expects($this->any())->method('getProperty')->will($this->returnValue(1));
|
||||
|
||||
$mediaItem1 = new FileReference();
|
||||
$mediaItem1->_setProperty('originalResource', $mockedElement1);
|
||||
$mediaItem1->_setProperty('uid', 1);
|
||||
$news->addFalMedia($mediaItem1);
|
||||
|
||||
$mockedElement2 = $this->getAccessibleMock(FileReference::class, ['getProperty']);
|
||||
$mockedElement2->_set('uid', 2);
|
||||
$mockedElement2->_set('showinpreview', 0);
|
||||
$mockedElement2->expects($this->any())->method('getProperty')->will($this->returnValue(0));
|
||||
|
||||
$mediaItem2 = new FileReference();
|
||||
$mediaItem2->_setProperty('originalResource', $mockedElement2);
|
||||
$mediaItem2->_setProperty('uid', 2);
|
||||
$news->addFalMedia($mediaItem2);
|
||||
|
||||
$mockedElement3 = $this->getAccessibleMock(FileReference::class, ['getProperty']);
|
||||
$mockedElement3->_set('uid', 3);
|
||||
$mockedElement3->_set('showinpreview', 1);
|
||||
$mockedElement3->expects($this->any())->method('getProperty')->will($this->returnValue(1));
|
||||
|
||||
$mediaItem3 = new FileReference();
|
||||
$mediaItem3->_setProperty('uid', 3);
|
||||
$mediaItem3->_setProperty('originalResource', $mockedElement3);
|
||||
$news->addFalMedia($mediaItem3);
|
||||
|
||||
$mockedElement4 = $this->getAccessibleMock(FileReference::class, ['getProperty']);
|
||||
$mockedElement4->_set('uid', 4);
|
||||
$mockedElement4->_set('showinpreview', 2);
|
||||
$mockedElement4->expects($this->any())->method('getProperty')->will($this->returnValue(2));
|
||||
|
||||
$mediaItem4 = new FileReference();
|
||||
$mediaItem4->_setProperty('uid', 4);
|
||||
$mediaItem4->_setProperty('originalResource', $mockedElement4);
|
||||
$news->addFalMedia($mediaItem4);
|
||||
|
||||
$this->assertEquals(3, count($news->getMediaPreviews()));
|
||||
$this->assertEquals(3, count($news->getMediaNonPreviews()));
|
||||
|
||||
$this->assertEquals(4, count($news->getFalMedia()));
|
||||
$this->assertEquals(4, count($news->getMedia()));
|
||||
}
|
||||
}
|
||||
@@ -1,76 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Unit\Domain\Model;
|
||||
|
||||
/**
|
||||
* 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\Tag;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* Tests for domains model Tag
|
||||
*
|
||||
*/
|
||||
class TagTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* @var Tag
|
||||
*/
|
||||
protected $tagDomainModelInstance;
|
||||
|
||||
/**
|
||||
* Setup
|
||||
*
|
||||
*/
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->tagDomainModelInstance = new Tag();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if title can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function titleCanBeSet(): void
|
||||
{
|
||||
$title = 'Tag title';
|
||||
$this->tagDomainModelInstance->setTitle($title);
|
||||
$this->assertEquals($title, $this->tagDomainModelInstance->getTitle());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if crdate can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function crdateCanBeSet(): void
|
||||
{
|
||||
$time = new \DateTime('now');
|
||||
$this->tagDomainModelInstance->setCrdate($time);
|
||||
$this->assertEquals($time, $this->tagDomainModelInstance->getCrdate());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if tstamp can be set
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function tstampCanBeSet(): void
|
||||
{
|
||||
$time = new \DateTime('now');
|
||||
$this->tagDomainModelInstance->setTstamp($time);
|
||||
$this->assertEquals($time, $this->tagDomainModelInstance->getTstamp());
|
||||
}
|
||||
}
|
||||
@@ -1,322 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Unit\Domain\Model;
|
||||
|
||||
/**
|
||||
* 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\TtContent;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* Tests for tt_content model
|
||||
*
|
||||
*/
|
||||
class TtContentTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* @var TtContent
|
||||
*/
|
||||
protected $ttContentDomainModelInstance;
|
||||
|
||||
/**
|
||||
* Setup
|
||||
*
|
||||
*/
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->ttContentDomainModelInstance = new TtContent();
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function crdateCanBeSet(): void
|
||||
{
|
||||
$fieldValue = new \DateTime();
|
||||
$this->ttContentDomainModelInstance->setCrdate($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getCrdate());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function tstampCanBeSet(): void
|
||||
{
|
||||
$fieldValue = new \DateTime();
|
||||
$this->ttContentDomainModelInstance->setTstamp($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getTstamp());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function cTypeCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 'fo123';
|
||||
$this->ttContentDomainModelInstance->setCType($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getCType());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function headerCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 'fo123';
|
||||
$this->ttContentDomainModelInstance->setHeader($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getHeader());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function headerPositionCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 'fo123';
|
||||
$this->ttContentDomainModelInstance->setHeaderPosition($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getHeaderPosition());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function bodytextCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 'fo123';
|
||||
$this->ttContentDomainModelInstance->setBodytext($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getBodytext());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function colPosCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 1;
|
||||
$this->ttContentDomainModelInstance->setColPos($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getColPos());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function imageCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 'fo123';
|
||||
$this->ttContentDomainModelInstance->setImage($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getImage());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function imageWidthCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 123;
|
||||
$this->ttContentDomainModelInstance->setImagewidth($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getImagewidth());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function imageOrientCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 3;
|
||||
$this->ttContentDomainModelInstance->setImageorient($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getImageorient());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function imageCaptionCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 'Test123';
|
||||
$this->ttContentDomainModelInstance->setImagecaption($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getImagecaption());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function imageColsCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 123;
|
||||
$this->ttContentDomainModelInstance->setImagecols($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getImagecols());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function imageBorderCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 123;
|
||||
$this->ttContentDomainModelInstance->setImageborder($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getImageborder());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function mediaCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 'Test 123';
|
||||
$this->ttContentDomainModelInstance->setMedia($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getMedia());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function layoutCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 'Test 123';
|
||||
$this->ttContentDomainModelInstance->setLayout($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getLayout());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function colsCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 123;
|
||||
$this->ttContentDomainModelInstance->setCols($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getCols());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function subheaderCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 'Test 123';
|
||||
$this->ttContentDomainModelInstance->setSubheader($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getSubheader());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function headerLinkCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 'Test 123';
|
||||
$this->ttContentDomainModelInstance->setHeaderLink($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getHeaderLink());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function imageLinkCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 'Test 123';
|
||||
$this->ttContentDomainModelInstance->setImageLink($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getImageLink());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function imageZoomCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 'Test 123';
|
||||
$this->ttContentDomainModelInstance->setImageZoom($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getImageZoom());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function altTextCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 'Test 123';
|
||||
$this->ttContentDomainModelInstance->setAltText($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getAltText());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function titleTextCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 'Test 123';
|
||||
$this->ttContentDomainModelInstance->setTitleText($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getTitleText());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function headerLayoutCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 'Test 123';
|
||||
$this->ttContentDomainModelInstance->setHeaderLayout($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getHeaderLayout());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function listTypeCanBeSet(): void
|
||||
{
|
||||
$fieldValue = 'Test 123';
|
||||
$this->ttContentDomainModelInstance->setListType($fieldValue);
|
||||
$this->assertEquals($fieldValue, $this->ttContentDomainModelInstance->getListType());
|
||||
}
|
||||
}
|
||||
@@ -1,112 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Unit\Domain\Repository;
|
||||
|
||||
/**
|
||||
* 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\Repository\CategoryRepository;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* Tests for domain repository categoryRepository
|
||||
*
|
||||
*/
|
||||
class CategoryRepositoryTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* Test if category ids are replaced
|
||||
*
|
||||
* @param array $expectedResult
|
||||
* @param array $given
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @dataProvider categoryIdsAreCorrectlyReplacedDataProvider
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function categoryIdsAreCorrectlyReplaced($expectedResult, $given): void
|
||||
{
|
||||
$mockTemplateParser = $this->getAccessibleMock(CategoryRepository::class, ['dummy'], [], '', false);
|
||||
|
||||
$result = $mockTemplateParser->_call('replaceCategoryIds', $given['idList'], $given['toBeChanged']);
|
||||
|
||||
$this->assertEquals($expectedResult, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function categoryIdsAreCorrectlyReplacedDataProvider(): array
|
||||
{
|
||||
return [
|
||||
'emptyRows' => [
|
||||
[1, 2, 3],
|
||||
[
|
||||
'idList' => [1, 2, 3],
|
||||
'toBeChanged' => []
|
||||
]
|
||||
],
|
||||
'oneIdReplaced' => [
|
||||
[1, 5, 3],
|
||||
[
|
||||
'idList' => [1, 2, 3],
|
||||
'toBeChanged' => [
|
||||
0 => [
|
||||
'l10n_parent' => 2,
|
||||
'uid' => 5,
|
||||
]
|
||||
]
|
||||
]
|
||||
],
|
||||
'noIdReplaced' => [
|
||||
[1, 2, 3],
|
||||
[
|
||||
'idList' => [1, 2, 3],
|
||||
'toBeChanged' => [
|
||||
0 => [
|
||||
'l10n_parent' => 6,
|
||||
'uid' => 5,
|
||||
],
|
||||
1 => [
|
||||
'l10n_parent' => 8,
|
||||
'uid' => 10,
|
||||
]
|
||||
]
|
||||
]
|
||||
],
|
||||
'allIdsReplaced' => [
|
||||
[4, 5, 6],
|
||||
[
|
||||
'idList' => [1, 2, 3],
|
||||
'toBeChanged' => [
|
||||
[
|
||||
'l10n_parent' => 2,
|
||||
'uid' => 5,
|
||||
],
|
||||
[
|
||||
'l10n_parent' => 1,
|
||||
'uid' => 4,
|
||||
],
|
||||
[
|
||||
'l10n_parent' => 3,
|
||||
'uid' => 6,
|
||||
],
|
||||
[
|
||||
'l10n_parent' => 8,
|
||||
'uid' => 10,
|
||||
]
|
||||
]
|
||||
]
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,163 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Unit\Domain\Repository;
|
||||
|
||||
/**
|
||||
* 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\Dto\NewsDemand;
|
||||
use GeorgRinger\News\Domain\Model\Dto\Search;
|
||||
use GeorgRinger\News\Domain\Repository\NewsRepository;
|
||||
use TYPO3\CMS\Core\Database\Query\QueryBuilder;
|
||||
use TYPO3\CMS\Extbase\Persistence\QueryInterface;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
use UnexpectedValueException;
|
||||
|
||||
/**
|
||||
* Tests for domain repository newsRepository
|
||||
*
|
||||
*
|
||||
*/
|
||||
class NewsRepositoryTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/** @var \GeorgRinger\News\Domain\Repository\NewsRepository|\PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface */
|
||||
protected $mockedNewsRepository;
|
||||
|
||||
public function setup(): void
|
||||
{
|
||||
$this->mockedNewsRepository = $this->getAccessibleMock(NewsRepository::class, ['getQueryBuilder'], [], '', false);
|
||||
|
||||
$mockedQueryBuilder = $this->getAccessibleMock(QueryBuilder::class, ['escapeStrForLike', 'createNamedParameter'], [], '', false);
|
||||
$this->mockedNewsRepository->expects($this->any())->method('getQueryBuilder')->withAnyParameters()->will($this->returnValue($mockedQueryBuilder));
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getSearchConstraintsThrowsErrorIfNoSearchFieldIsGiven(): void
|
||||
{
|
||||
$this->expectException(UnexpectedValueException::class);
|
||||
$mockedQuery = $this->getMockBuilder(QueryInterface::class)->getMock();
|
||||
|
||||
$search = new Search();
|
||||
$search->setSubject('fo');
|
||||
|
||||
$demand = new NewsDemand();
|
||||
$demand->setSearch($search);
|
||||
|
||||
$this->mockedNewsRepository->_call('getSearchConstraints', $mockedQuery, $demand);
|
||||
}
|
||||
//
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getSearchConstraintsThrowsErrorIfNoDateFieldForMaximumDateIsGiven(): void
|
||||
{
|
||||
$this->expectException(UnexpectedValueException::class);
|
||||
$mockedQuery = $this->getMockBuilder(QueryInterface::class)->getMock();
|
||||
|
||||
$search = new Search();
|
||||
$search->setMaximumDate('2014-04-01');
|
||||
|
||||
$demand = new NewsDemand();
|
||||
$demand->setSearch($search);
|
||||
|
||||
$this->mockedNewsRepository->_call('getSearchConstraints', $mockedQuery, $demand);
|
||||
}
|
||||
//
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getSearchConstraintsThrowsErrorIfNoDateFieldForMinimumDateIsGiven(): void
|
||||
{
|
||||
$this->expectException(UnexpectedValueException::class);
|
||||
$mockedQuery = $this->getMockBuilder(QueryInterface::class)->getMock();
|
||||
|
||||
$search = new Search();
|
||||
$search->setDateField('');
|
||||
$search->setMinimumDate('2014-04-01');
|
||||
|
||||
$demand = new NewsDemand();
|
||||
$demand->setSearch($search);
|
||||
|
||||
$this->mockedNewsRepository->_call('getSearchConstraints', $mockedQuery, $demand);
|
||||
}
|
||||
//
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function emptyConstraintIsReturnedForEmptySearchDemand(): void
|
||||
{
|
||||
$mockedQuery = $this->getMockBuilder(QueryInterface::class)->getMock();
|
||||
|
||||
$demand = new NewsDemand();
|
||||
$demand->setSearch(null);
|
||||
$result = $this->mockedNewsRepository->_call('getSearchConstraints', $mockedQuery, $demand);
|
||||
$this->assertEmpty($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function constraintsAreReturnedForSearchSubject(): void
|
||||
{
|
||||
$mockedQuery = $this->getMockBuilder(QueryInterface::class)->getMock();
|
||||
|
||||
$search = new Search();
|
||||
$search->setSubject('Lorem');
|
||||
$search->setFields('title,fo');
|
||||
|
||||
$demand = new NewsDemand();
|
||||
$demand->setSearch($search);
|
||||
|
||||
$result = $this->mockedNewsRepository->_call('getSearchConstraints', $mockedQuery, $demand);
|
||||
$this->assertEquals(1, count($result));
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function constraintsAreReturnedForDateFields(): void
|
||||
{
|
||||
$mockedQuery = $this->getMockBuilder(QueryInterface::class)->getMock();
|
||||
|
||||
$search = new Search();
|
||||
$search->setMinimumDate('2014-01-01');
|
||||
$search->setDateField('datetime');
|
||||
|
||||
$demand = new NewsDemand();
|
||||
$demand->setSearch($search);
|
||||
|
||||
$result = $this->mockedNewsRepository->_call('getSearchConstraints', $mockedQuery, $demand);
|
||||
$this->assertEquals(1, count($result));
|
||||
|
||||
$search->setMaximumDate('2015-01-01');
|
||||
$demand->setSearch($search);
|
||||
|
||||
$result = $this->mockedNewsRepository->_call('getSearchConstraints', $mockedQuery, $demand);
|
||||
$this->assertEquals(2, count($result));
|
||||
|
||||
$search->setMaximumDate('xyz');
|
||||
$demand->setSearch($search);
|
||||
|
||||
$result = $this->mockedNewsRepository->_call('getSearchConstraints', $mockedQuery, $demand);
|
||||
$this->assertEquals(1, count($result));
|
||||
}
|
||||
}
|
||||
@@ -1,269 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Unit\Hooks;
|
||||
|
||||
/**
|
||||
* 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\Hooks\PageLayoutView;
|
||||
use GeorgRinger\News\Utility\TemplateLayout;
|
||||
use TYPO3\CMS\Core\Localization\LanguageService;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* Tests for PageLayoutView
|
||||
*
|
||||
*/
|
||||
class PageLayoutViewTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/** @var PageLayoutView|\PHPUnit\Framework\MockObject\MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface */
|
||||
protected $pageLayoutView;
|
||||
|
||||
public function setup(): void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$languageService = $this->getAccessibleMock(LanguageService::class, ['sl'], [], '', false, false);
|
||||
$languageService->expects($this->any())->method('sL')->will($this->returnValue('any language'));
|
||||
|
||||
$GLOBALS['LANG'] = $languageService;
|
||||
|
||||
$this->pageLayoutView = $this->getAccessibleMock(PageLayoutView::class, ['dummy'], [], '', false);
|
||||
$this->pageLayoutView->_set('databaseConnection', $this->getMockBuilder('TYPO3\CMS\\Core\\Utility\\GeneralUtility\\DatabaseConnection')->setMethods(['exec_SELECTquery', 'exec_SELECTgetRows'])->getMock());
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getArchiveSettingAddsValueIfFilled(): void
|
||||
{
|
||||
$flexform = [];
|
||||
$this->addContentToFlexform($flexform, 'settings.archiveRestriction', 'something');
|
||||
|
||||
$this->pageLayoutView->_set('flexformData', $flexform);
|
||||
$this->pageLayoutView->_call('getArchiveSettings');
|
||||
$this->assertEquals(count($this->pageLayoutView->_get('tableData')), 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getDetailPidSettingAddsValueIfFilled(): void
|
||||
{
|
||||
$flexform = [];
|
||||
$this->addContentToFlexform($flexform, 'settings.detailPid', '9999999999', 'additional');
|
||||
|
||||
$this->pageLayoutView->_set('flexformData', $flexform);
|
||||
$this->pageLayoutView->_call('getDetailPidSetting');
|
||||
$this->assertEquals(count($this->pageLayoutView->_get('tableData')), 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getTagRestrictionSettingAddsValueIfFilled(): void
|
||||
{
|
||||
$flexform = [];
|
||||
$this->addContentToFlexform($flexform, 'settings.tags', '9999999999', 'additional');
|
||||
|
||||
$this->pageLayoutView->_set('flexformData', $flexform);
|
||||
$this->pageLayoutView->_call('getTagRestrictionSetting');
|
||||
$this->assertEquals(count($this->pageLayoutView->_get('tableData')), 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getListPidSettingAddsValueIfFilled(): void
|
||||
{
|
||||
$flexform = [];
|
||||
$this->addContentToFlexform($flexform, 'settings.listPid', '9999999999', 'additional');
|
||||
|
||||
$this->pageLayoutView->_set('flexformData', $flexform);
|
||||
$this->pageLayoutView->_call('getListPidSetting');
|
||||
$this->assertEquals(count($this->pageLayoutView->_get('tableData')), 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getOrderBySettingAddsValueIfFilled(): void
|
||||
{
|
||||
$flexform = [];
|
||||
$this->addContentToFlexform($flexform, 'settings.orderBy', 'fo');
|
||||
|
||||
$this->pageLayoutView->_set('flexformData', $flexform);
|
||||
$this->pageLayoutView->_call('getOrderSettings');
|
||||
$this->assertEquals(count($this->pageLayoutView->_get('tableData')), 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getOrderDirectionSettingAddsValueIfFilled(): void
|
||||
{
|
||||
$flexform = [];
|
||||
$this->addContentToFlexform($flexform, 'settings.orderDirection', 'asc');
|
||||
|
||||
$this->assertEquals($this->pageLayoutView->_call('getOrderDirectionSetting'), '');
|
||||
|
||||
$this->pageLayoutView->_set('flexformData', $flexform);
|
||||
$out = $this->pageLayoutView->_call('getOrderDirectionSetting');
|
||||
$this->assertEquals((strlen($out) > 1), true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getTopNewsFirstSettingAddsValueIfFilled(): void
|
||||
{
|
||||
$flexform = [];
|
||||
$this->addContentToFlexform($flexform, 'settings.topNewsFirst', '1', 'additional');
|
||||
|
||||
$this->assertEquals($this->pageLayoutView->_call('getTopNewsFirstSetting'), '');
|
||||
|
||||
$this->pageLayoutView->_set('flexformData', $flexform);
|
||||
$out = $this->pageLayoutView->_call('getTopNewsFirstSetting');
|
||||
$this->assertEquals((strlen($out) > 1), true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getOffsetLimitSettingsAddsValueIfFilled(): void
|
||||
{
|
||||
$flexform = [];
|
||||
$this->addContentToFlexform($flexform, 'settings.offset', '1', 'additional');
|
||||
$this->pageLayoutView->_set('flexformData', $flexform);
|
||||
$this->pageLayoutView->_call('getOffsetLimitSettings');
|
||||
$this->assertEquals(count($this->pageLayoutView->_get('tableData')), 1);
|
||||
|
||||
$this->addContentToFlexform($flexform, 'settings.limit', '1', 'additional');
|
||||
$this->pageLayoutView->_set('flexformData', $flexform);
|
||||
$this->pageLayoutView->_call('getOffsetLimitSettings');
|
||||
$this->assertEquals(count($this->pageLayoutView->_get('tableData')), 2);
|
||||
|
||||
$this->addContentToFlexform($flexform, 'settings.hidePagination', '0', 'additional');
|
||||
$this->pageLayoutView->_set('flexformData', $flexform);
|
||||
$this->pageLayoutView->_call('getOffsetLimitSettings');
|
||||
$this->assertEquals(count($this->pageLayoutView->_get('tableData')), 2);
|
||||
|
||||
$this->addContentToFlexform($flexform, 'settings.hidePagination', '1', 'additional');
|
||||
$this->pageLayoutView->_set('flexformData', $flexform);
|
||||
$this->pageLayoutView->_call('getOffsetLimitSettings');
|
||||
$this->assertEquals(count($this->pageLayoutView->_get('tableData')), 3);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getDateMenuSettingsAddsValueIfFilled(): void
|
||||
{
|
||||
$flexform = [];
|
||||
$this->addContentToFlexform($flexform, 'settings.dateField', 'field');
|
||||
$this->pageLayoutView->_set('flexformData', $flexform);
|
||||
$this->pageLayoutView->_call('getDateMenuSettings');
|
||||
$this->assertEquals(count($this->pageLayoutView->_get('tableData')), 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getTimeRestrictionSettingAddsValueIfFilled(): void
|
||||
{
|
||||
$flexform = [];
|
||||
$this->addContentToFlexform($flexform, 'settings.timeRestriction', 'fo');
|
||||
$this->pageLayoutView->_set('flexformData', $flexform);
|
||||
$this->pageLayoutView->_call('getTimeRestrictionSetting');
|
||||
$this->assertEquals(count($this->pageLayoutView->_get('tableData')), 1);
|
||||
|
||||
$this->addContentToFlexform($flexform, 'settings.timeRestrictionHigh', 'bar');
|
||||
$this->pageLayoutView->_set('flexformData', $flexform);
|
||||
$this->pageLayoutView->_call('getTimeRestrictionSetting');
|
||||
$this->assertEquals(count($this->pageLayoutView->_get('tableData')), 2);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getTemplateLayoutSettingsAddsValueIfFilled(): void
|
||||
{
|
||||
$flexform = [];
|
||||
$mockedTemplateLayout = $this->getAccessibleMock(TemplateLayout::class, ['getAvailableTemplateLayouts']);
|
||||
|
||||
$mockedTemplateLayout->expects($this->once())->method('getAvailableTemplateLayouts')->will($this->returnValue([['bar', 'fo']]));
|
||||
|
||||
$this->addContentToFlexform($flexform, 'settings.templateLayout', 'fo', 'template');
|
||||
$this->pageLayoutView->_set('flexformData', $flexform);
|
||||
$this->pageLayoutView->_set('templateLayoutsUtility', $mockedTemplateLayout);
|
||||
|
||||
$this->pageLayoutView->_call('getTemplateLayoutSettings', 1);
|
||||
$this->assertEquals(count($this->pageLayoutView->_get('tableData')), 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getOverrideDemandSettingsAddsValueIfFilled(): void
|
||||
{
|
||||
$flexform = [];
|
||||
$this->addContentToFlexform($flexform, 'settings.disableOverrideDemand', '1', 'additional');
|
||||
$this->pageLayoutView->_set('flexformData', $flexform);
|
||||
$this->pageLayoutView->_call('getOverrideDemandSettings');
|
||||
$this->assertEquals(count($this->pageLayoutView->_get('tableData')), 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add content to given flexform
|
||||
*
|
||||
* @param array $flexform configuration
|
||||
* @param string $key key of field
|
||||
* @param string $value value of field
|
||||
* @param string $sheet name of sheet
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function addContentToFlexform(array &$flexform, $key, $value, $sheet = 'sDEF'): void
|
||||
{
|
||||
$flexform = [
|
||||
'data' => [
|
||||
$sheet => [
|
||||
'lDEF' => [
|
||||
$key => [
|
||||
'vDEF' => $value
|
||||
]
|
||||
]
|
||||
]
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,59 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Unit\Service;
|
||||
|
||||
/**
|
||||
* 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\Service\CategoryService;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* Test class for CategoryService
|
||||
*
|
||||
*/
|
||||
class CategoryServiceTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @dataProvider removeValuesFromStringDataProvider
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function removeValuesFromString($expected, $given): void
|
||||
{
|
||||
$result = CategoryService::removeValuesFromString($given[0], $given[1]);
|
||||
$this->assertEquals($expected, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function removeValuesFromStringDataProvider()
|
||||
{
|
||||
return [
|
||||
'simpleExampleWithRemovalAtEnd' => [
|
||||
'1,2,3,4', ['1,2,3,4,5', '5']
|
||||
],
|
||||
'simpleExampleWithMixedRemovals' => [
|
||||
'1,2,3,4', ['1,7,2,9,3,4', '9,7']
|
||||
],
|
||||
'removalIsSame' => [
|
||||
'', ['1,2,3', '3,2,1']
|
||||
],
|
||||
'noRemovalFound' => [
|
||||
'1,2,3', ['1,2,3', '9,8,7']
|
||||
],
|
||||
'noInputGiven' => [
|
||||
'', ['', '9,8,7']
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
<?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\ImportJob;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* Test class for ImportJob
|
||||
*
|
||||
*/
|
||||
class ImportJobTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function classCanBeRegistered(): void
|
||||
{
|
||||
$importJobInstance = new ImportJob();
|
||||
|
||||
$jobs = [];
|
||||
$this->assertEquals($importJobInstance->getRegisteredJobs(), $jobs);
|
||||
|
||||
// Add job #1
|
||||
$jobs[] = [
|
||||
'className' => 'Class 1',
|
||||
'title' => 'Some title',
|
||||
'description' => ''
|
||||
];
|
||||
$importJobInstance->register('Class 1', 'Some title', '');
|
||||
$this->assertEquals($importJobInstance->getRegisteredJobs(), $jobs);
|
||||
|
||||
// Add job #2
|
||||
$jobs[] = [
|
||||
'className' => 'Class 2',
|
||||
'title' => '',
|
||||
'description' => 'Some description'
|
||||
];
|
||||
$importJobInstance->register('Class 2', '', 'Some description');
|
||||
$this->assertEquals($importJobInstance->getRegisteredJobs(), $jobs);
|
||||
}
|
||||
}
|
||||
@@ -1,113 +0,0 @@
|
||||
<?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\TemplateLayout;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* TemplateLayout utility class unit tests
|
||||
*/
|
||||
class TemplateLayoutTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function templatesFoundInTypo3ConfVars(): void
|
||||
{
|
||||
$GLOBALS['TYPO3_CONF_VARS']['EXT']['news']['templateLayouts'] = [
|
||||
0 => [
|
||||
0 => 'Layout 1',
|
||||
1 => 'layout1'
|
||||
],
|
||||
1 => [
|
||||
0 => 'Layout 2',
|
||||
1 => 'layout2'
|
||||
],
|
||||
];
|
||||
|
||||
$templateLayoutUtility = $this->getAccessibleMock(TemplateLayout::class, ['getTemplateLayoutsFromTsConfig']);
|
||||
$templateLayoutUtility->expects($this->once())->method('getTemplateLayoutsFromTsConfig')->will($this->returnValue([]));
|
||||
$templateLayouts = $templateLayoutUtility->_call('getAvailableTemplateLayouts', 1);
|
||||
$this->assertSame($GLOBALS['TYPO3_CONF_VARS']['EXT']['news']['templateLayouts'], $templateLayouts);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function templatesFoundInPageTsConfig(): void
|
||||
{
|
||||
$tsConfigArray = [
|
||||
'layout1' => 'Layout 1',
|
||||
'layout2' => 'Layout 2',
|
||||
];
|
||||
$result = [
|
||||
0 => [
|
||||
0 => 'Layout 1',
|
||||
1 => 'layout1'
|
||||
],
|
||||
1 => [
|
||||
0 => 'Layout 2',
|
||||
1 => 'layout2'
|
||||
],
|
||||
];
|
||||
|
||||
// clear TYPO3_CONF_VARS
|
||||
unset($GLOBALS['TYPO3_CONF_VARS']['EXT']['news']['templateLayouts']);
|
||||
|
||||
$templateLayoutUtility = $this->getAccessibleMock(TemplateLayout::class, ['getTemplateLayoutsFromTsConfig']);
|
||||
$templateLayoutUtility->expects($this->once())->method('getTemplateLayoutsFromTsConfig')->will($this->returnValue($tsConfigArray));
|
||||
$templateLayouts = $templateLayoutUtility->_call('getAvailableTemplateLayouts', 1);
|
||||
$this->assertSame($result, $templateLayouts);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function templatesFoundInCombinedResources(): void
|
||||
{
|
||||
$tsConfigArray = [
|
||||
'layout1' => 'Layout 1',
|
||||
'layout2' => 'Layout 2',
|
||||
];
|
||||
$GLOBALS['TYPO3_CONF_VARS']['EXT']['news']['templateLayouts'] = [
|
||||
0 => [
|
||||
0 => 'Layout 4',
|
||||
1 => 'layout4'
|
||||
],
|
||||
];
|
||||
$result = [
|
||||
0 => [
|
||||
0 => 'Layout 4',
|
||||
1 => 'layout4'
|
||||
],
|
||||
1 => [
|
||||
0 => 'Layout 1',
|
||||
1 => 'layout1'
|
||||
],
|
||||
2 => [
|
||||
0 => 'Layout 2',
|
||||
1 => 'layout2'
|
||||
],
|
||||
];
|
||||
|
||||
$templateLayoutUtility = $this->getAccessibleMock(TemplateLayout::class, ['getTemplateLayoutsFromTsConfig']);
|
||||
$templateLayoutUtility->expects($this->once())->method('getTemplateLayoutsFromTsConfig')->will($this->returnValue($tsConfigArray));
|
||||
$templateLayouts = $templateLayoutUtility->_call('getAvailableTemplateLayouts', 1);
|
||||
$this->assertSame($result, $templateLayouts);
|
||||
}
|
||||
}
|
||||
@@ -1,273 +0,0 @@
|
||||
<?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'
|
||||
]
|
||||
]
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
<?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\Url;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* Test class for Url
|
||||
*
|
||||
*/
|
||||
class UrlTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @dataProvider correctUrlIsDeliveredDataProvider
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function correctUrlIsDelivered($actual, $expected): void
|
||||
{
|
||||
$this->assertEquals($expected, Url::prependDomain($actual));
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function correctUrlIsDeliveredDataProvider()
|
||||
{
|
||||
$currentDomain = GeneralUtility::getIndpEnv('TYPO3_SITE_URL');
|
||||
return [
|
||||
'absoluteUrlIsUsed' => [
|
||||
$currentDomain . 'index.php?id=123', $currentDomain . 'index.php?id=123'
|
||||
],
|
||||
'relativeUrlIsUsed' => [
|
||||
'index.php?id=123', $currentDomain . 'index.php?id=123'
|
||||
],
|
||||
'domainOnlyIsGiven' => [
|
||||
$currentDomain, $currentDomain
|
||||
],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,81 +0,0 @@
|
||||
<?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\Validation;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* Tests for Validation
|
||||
*
|
||||
*/
|
||||
class ValidationTest extends BaseTestCase
|
||||
{
|
||||
const ALLOWED_FIELDS = 'author,uid,title,teaser,author,tstamp,crdate,datetime,categories.title';
|
||||
|
||||
/**
|
||||
* Test if default file format works
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @dataProvider orderDataProvider
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testForValidOrdering($expectedFields, $expected): void
|
||||
{
|
||||
$validation = Validation::isValidOrdering($expectedFields, self::ALLOWED_FIELDS);
|
||||
$this->assertEquals($validation, $expected);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return (bool|string)[][]
|
||||
*
|
||||
* @psalm-return array{allowedOrdering: array{0: string, 1: true}, allowedOrderingWithSorting: array{0: string, 1: true}, allowedOrderingWithSorting2: array{0: string, 1: true}, allowedOrderingWithSorting3: array{0: string, 1: true}, allowedOrderingWithDotsAndSorting: array{0: string, 1: true}, nonAllowedField: array{0: string, 1: false}, nonAllowedSorting: array{0: string, 1: false}, nonAllowedDoubleSorting: array{0: string, 1: false}, nonAllowedDoubleFields: array{0: string, 1: false}, emptySorting: array{0: string, 1: true}, emptySorting2: array{0: string, 1: true}}
|
||||
*/
|
||||
public function orderDataProvider(): array
|
||||
{
|
||||
return [
|
||||
'allowedOrdering' => [
|
||||
'title,uid', true
|
||||
],
|
||||
'allowedOrderingWithSorting' => [
|
||||
'title ASC, uid', true
|
||||
],
|
||||
'allowedOrderingWithSorting2' => [
|
||||
'title ASC, uid DESC', true
|
||||
],
|
||||
'allowedOrderingWithSorting3' => [
|
||||
'title, uid desc,teaser', true
|
||||
],
|
||||
'allowedOrderingWithDotsAndSorting' => [
|
||||
'categories.title DESC, uid ASC,author,teaser desc', true
|
||||
],
|
||||
'nonAllowedField' => [
|
||||
'title,teaserFo,uid', false
|
||||
],
|
||||
'nonAllowedSorting' => [
|
||||
'title,teaser ASCx,uid', false
|
||||
],
|
||||
'nonAllowedDoubleSorting' => [
|
||||
'title,teaser ASC DESC,uid', false
|
||||
],
|
||||
'nonAllowedDoubleFields' => [
|
||||
'title teaser,uid', false
|
||||
],
|
||||
'emptySorting' => [
|
||||
'', true
|
||||
],
|
||||
'emptySorting2' => [
|
||||
' ', true
|
||||
],
|
||||
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,67 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Unit\ViewHelpers\Be;
|
||||
|
||||
/**
|
||||
* 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\ViewHelpers\Be\IsCheckboxActiveViewHelper;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* Tests for IsCheckboxActiveViewhelper
|
||||
*
|
||||
*/
|
||||
class IsCheckboxActiveViewhelperTest extends BaseTestCase
|
||||
{
|
||||
const OK_RESULT = 'checked="checked"';
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function activeCheckboxReturnsCorrectValue(): void
|
||||
{
|
||||
$viewHelper = new IsCheckboxActiveViewHelper();
|
||||
$viewHelper->setArguments([
|
||||
'id' => 10,
|
||||
'categories' => [5, 7, 10, 12]
|
||||
]);
|
||||
$actualResult = $viewHelper->render();
|
||||
|
||||
$this->assertEquals(self::OK_RESULT, $actualResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function nonActiveCheckboxReturnsNothing(): void
|
||||
{
|
||||
$viewHelper = new IsCheckboxActiveViewHelper();
|
||||
$viewHelper->setArguments([
|
||||
'id' => 8,
|
||||
'categories' => [5, 7, 10, 12]
|
||||
]);
|
||||
$actualResult = $viewHelper->render();
|
||||
|
||||
$this->assertEquals('', $actualResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function noCategoriesReturnNothing(): void
|
||||
{
|
||||
$viewHelper = new IsCheckboxActiveViewHelper();
|
||||
|
||||
$this->assertEquals('', $viewHelper->render());
|
||||
}
|
||||
}
|
||||
@@ -1,57 +0,0 @@
|
||||
<?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\News;
|
||||
use GeorgRinger\News\ViewHelpers\ExcludeDisplayedNewsViewHelper;
|
||||
use TYPO3\CMS\Fluid\Core\Rendering\RenderingContext;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* Tests for ExcludeDisplayedNewsViewHelper
|
||||
*
|
||||
*/
|
||||
class ExcludeDisplayedNewsViewHelperTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function newsIsAddedToExcludedList(): void
|
||||
{
|
||||
$viewHelper = new ExcludeDisplayedNewsViewHelper();
|
||||
$viewHelper->setRenderingContext($this->getMockBuilder(RenderingContext::class)->disableOriginalConstructor()->getMock());
|
||||
|
||||
$newsItem1 = new News();
|
||||
$newsItem1->_setProperty('uid', '123');
|
||||
|
||||
$viewHelper->setArguments(['newsItem' => $newsItem1]);
|
||||
$viewHelper->render();
|
||||
$this->assertEquals($GLOBALS['EXT']['news']['alreadyDisplayed'], ['123' => '123']);
|
||||
|
||||
$newsItem1 = new News();
|
||||
$newsItem1->_setProperty('uid', '123');
|
||||
$this->assertEquals($GLOBALS['EXT']['news']['alreadyDisplayed'], ['123' => '123']);
|
||||
|
||||
$newsItem2 = new News();
|
||||
$newsItem2->_setProperty('uid', '12');
|
||||
$viewHelper->setArguments(['newsItem' => $newsItem2]);
|
||||
$viewHelper->render();
|
||||
$this->assertEquals($GLOBALS['EXT']['news']['alreadyDisplayed'], ['123' => '123', '12' => '12']);
|
||||
|
||||
$newsItem3 = new News();
|
||||
$newsItem3->_setProperty('uid', '12');
|
||||
$newsItem3->_setProperty('_localizedUid', '456');
|
||||
$viewHelper->setArguments(['newsItem' => $newsItem3]);
|
||||
$viewHelper->render();
|
||||
$this->assertEquals($GLOBALS['EXT']['news']['alreadyDisplayed'], ['123' => '123', '12' => '12', '456' => '456']);
|
||||
}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Unit\ViewHelpers\Format;
|
||||
|
||||
/**
|
||||
* 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\ViewHelpers\Format\NothingViewHelper;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* Tests for NothingViewHelper
|
||||
*
|
||||
*/
|
||||
class NothingViewHelperTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* Test of nothing viewHelper
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function noResultExpected(): void
|
||||
{
|
||||
$viewHelper = $this->getAccessibleMock(NothingViewHelper::class, ['renderChildren']);
|
||||
$viewHelper->expects($this->once())->method('renderChildren')->will($this->returnValue('whatever content'));
|
||||
$actualResult = $viewHelper->render();
|
||||
$this->assertEquals(null, $actualResult);
|
||||
}
|
||||
}
|
||||
@@ -1,221 +0,0 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
@@ -1,148 +0,0 @@
|
||||
<?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\ViewHelpers\PaginateBodytextViewHelper;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* Tests for PaginateBodytextViewHelper
|
||||
*/
|
||||
class PaginateBodytextViewHelperTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* Test if given tag is a closing tag
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @dataProvider givenTagIsAClosingTagDataProvider
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function givenTagIsAClosingTag($tag, $expectedResult): void
|
||||
{
|
||||
$mockTemplateParser = $this->getAccessibleMock(PaginateBodytextViewHelper::class, ['dummy']);
|
||||
$result = $mockTemplateParser->_call('isClosingTag', $tag);
|
||||
$this->assertEquals($expectedResult, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return (bool|string)[][]
|
||||
*
|
||||
* @psalm-return array{'working example 1': array{0: string, 1: true}, 'working example 2': array{0: string, 1: false}}
|
||||
*/
|
||||
public function givenTagIsAClosingTagDataProvider(): array
|
||||
{
|
||||
return [
|
||||
'working example 1' => [
|
||||
'</div>', true
|
||||
],
|
||||
'working example 2' => [
|
||||
'<div>', false
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if given tag is a self closing tag
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @dataProvider givenTagIsSelfClosingTagDataProvider
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function givenTagIsSelfClosingTag($tag, $expectedResult): void
|
||||
{
|
||||
$mockTemplateParser = $this->getAccessibleMock(PaginateBodytextViewHelper::class, ['dummy']);
|
||||
$result = $mockTemplateParser->_call('isSelfClosingTag', $tag);
|
||||
$this->assertEquals($expectedResult, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return (bool|string)[][]
|
||||
*
|
||||
* @psalm-return array{'working example 1': array{0: string, 1: true}, 'working example 2': array{0: string, 1: false}}
|
||||
*/
|
||||
public function givenTagIsSelfClosingTagDataProvider(): array
|
||||
{
|
||||
return [
|
||||
'working example 1' => [
|
||||
'<hr />', true
|
||||
],
|
||||
'working example 2' => [
|
||||
'<div>', false
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if given tag is an opening tag
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @dataProvider givenTagIsAnOpeningTagDataProvider
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function givenTagIsAnOpeningTag($tag, $expectedResult): void
|
||||
{
|
||||
$mockTemplateParser = $this->getAccessibleMock(PaginateBodytextViewHelper::class, ['dummy']);
|
||||
$result = $mockTemplateParser->_call('isOpeningTag', $tag);
|
||||
$this->assertEquals($expectedResult, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return (bool|string)[][]
|
||||
*
|
||||
* @psalm-return array{0: array{0: string, 1: true}, 1: array{0: string, 1: false}, 2: array{0: string, 1: false}, 3: array{0: string, 1: false}}
|
||||
*/
|
||||
public function givenTagIsAnOpeningTagDataProvider(): array
|
||||
{
|
||||
return [
|
||||
['<div>', true],
|
||||
['</div>', false],
|
||||
['<div/>', false],
|
||||
['<div />', false]
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if given tag is an opening tag
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @dataProvider extractTagReturnsCorrectOneDataProvider
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function extractTagReturnsCorrectOne($tag, $expectedResult): void
|
||||
{
|
||||
$mockTemplateParser = $this->getAccessibleMock(PaginateBodytextViewHelper::class, ['dummy']);
|
||||
$result = $mockTemplateParser->_call('extractTag', $tag);
|
||||
$this->assertEquals($expectedResult, $result, sprintf('"%s" (%s) : "%s" (%s)', $tag, strlen($tag), $expectedResult, strlen($expectedResult)));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[][]
|
||||
*
|
||||
* @psalm-return array{0: array{0: string, 1: string}, 1: array{0: string, 1: string}, 2: array{0: string, 1: string}, 3: array{0: string, 1: string}}
|
||||
*/
|
||||
public function extractTagReturnsCorrectOneDataProvider(): array
|
||||
{
|
||||
return [
|
||||
['this <strong>is</strong> a <div>real</div>test', 'this <strong>'],
|
||||
['this <br /> linebreak', 'this <br />'],
|
||||
['this <br> linebreak', 'this <br>'],
|
||||
['this is a test', 'this is a test'],
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,96 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace GeorgRinger\News\Tests\Unit\ViewHelpers;
|
||||
|
||||
use GeorgRinger\News\ViewHelpers\SimplePrevNextViewHelper;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Test for SimplePrevNextViewHelper
|
||||
*/
|
||||
class SimplePrevNextViewHelperTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/** @var \PHPUnit_Framework_MockObject_MockObject|\TYPO3\TestingFramework\Core\AccessibleObjectInterface */
|
||||
protected $viewHelper;
|
||||
|
||||
public function setup(): void
|
||||
{
|
||||
$this->viewHelper = $this->getAccessibleMock(SimplePrevNextViewHelper::class, ['getRawRecord']);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function wrongIdWillReturnNullForObject(): void
|
||||
{
|
||||
$this->viewHelper->expects($this->any())->method('getRawRecord')->withAnyParameters()->will($this->returnValue(null));
|
||||
|
||||
$out = $this->viewHelper->_call('getObject', 0);
|
||||
$this->assertEquals($out, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function queryResultWillReturnCorrectOutputForAllLinks(): void
|
||||
{
|
||||
$viewHelper = $this->getAccessibleMock(SimplePrevNextViewHelper::class, ['getObject']);
|
||||
|
||||
$in = [
|
||||
'prev' => ['uid' => 123],
|
||||
'next' => ['uid' => 789],
|
||||
];
|
||||
$exp = ['prev' => 123, 'next' => 789];
|
||||
$viewHelper->expects(self::exactly(2))->method('getObject')->willReturnOnConsecutiveCalls(123, 789);
|
||||
$out = $viewHelper->_call('mapResultToObjects', $in);
|
||||
$this->assertEquals($out, $exp);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function queryResultWillReturnCorrectOutputFor2Links(): void
|
||||
{
|
||||
$viewHelper = $this->getAccessibleMock(SimplePrevNextViewHelper::class, ['getObject']);
|
||||
|
||||
$in = [
|
||||
'prev' => ['uid' => 147],
|
||||
];
|
||||
$exp = ['prev' => 147];
|
||||
$viewHelper->expects(self::exactly(1))->method('getObject')->willReturnOnConsecutiveCalls(147);
|
||||
$out = $viewHelper->_call('mapResultToObjects', $in);
|
||||
$this->assertEquals($out, $exp);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function queryResultWillReturnCorrectOutputFor1Link(): void
|
||||
{
|
||||
$viewHelper = $this->getAccessibleMock(SimplePrevNextViewHelper::class, ['getObject']);
|
||||
|
||||
$in = [
|
||||
'next' => ['uid' => 369],
|
||||
];
|
||||
$exp = ['next' => 369];
|
||||
$viewHelper->expects(self::exactly(1))->method('getObject')->willReturnOnConsecutiveCalls(369);
|
||||
$out = $viewHelper->_call('mapResultToObjects', $in);
|
||||
$this->assertEquals($out, $exp);
|
||||
}
|
||||
}
|
||||
@@ -1,88 +0,0 @@
|
||||
<?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\ViewHelpers\TargetLinkViewHelper;
|
||||
use TYPO3\TestingFramework\Core\BaseTestCase;
|
||||
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
|
||||
|
||||
/**
|
||||
* Test for TargetLinkViewHelper
|
||||
*/
|
||||
class TargetLinkViewHelperTest extends BaseTestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* @return \GeorgRinger\News\ViewHelpers\TargetLinkViewHelper
|
||||
* @support
|
||||
*/
|
||||
protected function getPreparedInstance()
|
||||
{
|
||||
$instance = $this->getMockBuilder(TargetLinkViewHelper::class)->setMethods(['dummy'])->getMock();
|
||||
return $instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function canCreateViewHelperClassInstance(): void
|
||||
{
|
||||
$instance = $this->getPreparedInstance();
|
||||
$this->assertInstanceOf(TargetLinkViewHelper::class, $instance);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if correct target is returned
|
||||
*
|
||||
* @test
|
||||
*
|
||||
* @dataProvider correctTargetIsReturnedDataProvider
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function correctTargetIsReturned($link, $expectedResult): void
|
||||
{
|
||||
$viewHelper = $this->getMockBuilder(TargetLinkViewHelper::class)->setMethods(['dummy'])->getMock();
|
||||
$viewHelper->setRenderingContext($this->getMockBuilder(RenderingContextInterface::class)->getMock());
|
||||
$viewHelper->setArguments([
|
||||
'link' => $link,
|
||||
]);
|
||||
|
||||
$this->assertEquals($viewHelper->render(), $expectedResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function correctTargetIsReturnedDataProvider()
|
||||
{
|
||||
return [
|
||||
'noTargetSetAndUrlDefined' => [
|
||||
'www.typo3.org', ''
|
||||
],
|
||||
'noTargetSetAndIdDefined' => [
|
||||
'123', ''
|
||||
],
|
||||
'IdAndTargetDefined' => [
|
||||
'123 _blank', '_blank'
|
||||
],
|
||||
'UrlAndPopupDefined' => [
|
||||
'www.typo3.org 300x400', ''
|
||||
],
|
||||
'ComplexExample' => [
|
||||
'www.typo3.org _fo my-class', '_fo'
|
||||
],
|
||||
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,41 +1,22 @@
|
||||
<?php
|
||||
|
||||
/***************************************************************
|
||||
* Extension Manager/Repository config file for ext "news".
|
||||
*
|
||||
* Auto generated 15-07-2022 12:23
|
||||
*
|
||||
* Manual updates:
|
||||
* Only the data in the array - everything else is removed by next
|
||||
* writing. "version" and "dependencies" must not be touched!
|
||||
***************************************************************/
|
||||
|
||||
$EM_CONF[$_EXTKEY] = array (
|
||||
'title' => 'News system',
|
||||
'description' => 'Versatile news system based on Extbase & Fluid and using the latest technologies provided by TYPO3 CMS.',
|
||||
'category' => 'fe',
|
||||
'author' => 'Georg Ringer',
|
||||
'author_email' => 'mail@ringer.it',
|
||||
'state' => 'stable',
|
||||
'clearCacheOnLoad' => true,
|
||||
'version' => '9.4.0',
|
||||
'constraints' =>
|
||||
array (
|
||||
'depends' =>
|
||||
array (
|
||||
'typo3' => '10.4.13-11.9.99',
|
||||
),
|
||||
'conflicts' =>
|
||||
array (
|
||||
),
|
||||
'suggests' =>
|
||||
array (
|
||||
'rx_shariff' => '12.0.0-14.99.99',
|
||||
'numbered_pagination' => '1.0.1-1.99.99',
|
||||
),
|
||||
),
|
||||
'uploadfolder' => false,
|
||||
'clearcacheonload' => true,
|
||||
'author_company' => NULL,
|
||||
);
|
||||
|
||||
$EM_CONF[$_EXTKEY] = [
|
||||
'title' => 'News system',
|
||||
'description' => 'Versatile news system based on Extbase & Fluid and using the latest technologies provided by TYPO3 CMS.',
|
||||
'category' => 'fe',
|
||||
'author' => 'Georg Ringer',
|
||||
'author_email' => 'mail@ringer.it',
|
||||
'state' => 'stable',
|
||||
'clearCacheOnLoad' => true,
|
||||
'version' => '9.4.0',
|
||||
'constraints' => [
|
||||
'depends' => [
|
||||
'typo3' => '10.4.13-11.9.99',
|
||||
],
|
||||
'conflicts' => [],
|
||||
'suggests' => [
|
||||
'rx_shariff' => '12.0.0-14.99.99',
|
||||
'numbered_pagination' => '1.0.1-1.99.99'
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
2022-04-26 [BUGFIX] Remove download + columnselector in be module (Commit 84bc6a02 by Georg Ringer)
|
||||
2022-04-24 [BUGFIX] Fix notice in NewsController (#1775) (Commit 104a5275 by Georg Ringer)
|
||||
2022-04-24 [BUGFIX] Use correct notice check (Commit cc2c7dc9 by Georg Ringer)
|
||||
2022-04-24 [TASK] Change condition order (Commit d04fe5c9 by Georg Ringer)
|
||||
2022-04-24 [BUGFIX] Link title in backend module again (Commit 63132676 by Georg Ringer)
|
||||
2022-04-23 [TASK] Fix PHP notice (#1774) (Commit 8dd77033 by Peter Kraume)
|
||||
2022-04-23 [BUGFIX]n Fix notices (#1773) (Commit 03182cdf by Georg Ringer)
|
||||
2022-04-20 [DOCS] Align with new TYPO3 documentation standards (#1771) (Commit 2b0c6c51 by Alexander Nitsche)
|
||||
2022-04-01 [BUGFIX] Return empty instead NULL (#1740) (#1763) (Commit a34e236a by Philipp Idler)
|
||||
2022-04-01 [BUGFIX] Avoid warning undefined array key (#1764) (Commit 6873a913 by nigelmann)
|
||||
2022-03-30 [BUGFIX] Fix notice for singleNews argument (Commit a046697b by Georg Ringer)
|
||||
2022-03-29 Remove unnecessary part .text('Back') in JavaScript Snippet (#1762) (Commit 7e6b31a8 by Eric Bode)
|
||||
2022-03-28 [FEATURE] Add 'fileIndex' argument to MediaViewHelper (Commit ee811c85 by Philipp Parzer)
|
||||
2022-03-24 [BUGFIX] Fix notice in ItemsProcFunc (Commit 7e7d8179 by Georg Ringer)
|
||||
2022-03-23 [BUGFIX] Fix notice in PageLayoutView (Commit 70105f0c by Georg Ringer)
|
||||
2022-03-21 [BUGFIX] Show news in backend module again (Commit 11e85013 by Georg Ringer)
|
||||
2022-03-19 Add func tests for news controller (#1757) (Commit b745f4c7 by Stefan Frömken)
|
||||
2022-03-18 Add unit tests for static text (#1756) (Commit 271ade85 by Stefan Frömken)
|
||||
2022-03-18 [TASK] Improve code of category model (Commit 7cefc9e7 by Stefan Frömken)
|
||||
2022-03-18 Add allow-plugins to composer.json (#1752) (Commit 77db38cf by Stefan Frömken)
|
||||
Reference in New Issue
Block a user