diff --git a/.github/workflows/backend-ci.yml b/.github/workflows/backend-ci.yml
index c66794d..f909fb6 100644
--- a/.github/workflows/backend-ci.yml
+++ b/.github/workflows/backend-ci.yml
@@ -4,13 +4,13 @@ on: [ push, pull_request ]
jobs:
build:
- runs-on: ubuntu-latest
+ runs-on: self-hosted
strategy:
fail-fast: false
matrix:
- php: [ '7.4', '8.1' ]
+ php: [ '8.1', '8.2' ]
include:
- - php: '7.4'
+ - php: '8.1'
steps:
- name: Checkout Code
diff --git a/Classes/Configuration/ConfigurationManager.php b/Classes/Configuration/ConfigurationManager.php
index 109ffcb..b8c9089 100644
--- a/Classes/Configuration/ConfigurationManager.php
+++ b/Classes/Configuration/ConfigurationManager.php
@@ -4,12 +4,12 @@
namespace DFAU\ToujouApi\Configuration;
-use TYPO3\CMS\Core\Package\PackageManager;
use TYPO3\CMS\Core\Cache\CacheManager;
use TYPO3\CMS\Core\Cache\Frontend\FrontendInterface;
use TYPO3\CMS\Core\Core\Environment;
use TYPO3\CMS\Core\Information\Typo3Version;
use TYPO3\CMS\Core\Package\PackageInterface;
+use TYPO3\CMS\Core\Package\PackageManager;
use TYPO3\CMS\Core\Utility\GeneralUtility;
class ConfigurationManager
diff --git a/Classes/Database/Query/Restriction/SiteRestriction.php b/Classes/Database/Query/Restriction/SiteRestriction.php
index b1b9cc4..35be7d5 100644
--- a/Classes/Database/Query/Restriction/SiteRestriction.php
+++ b/Classes/Database/Query/Restriction/SiteRestriction.php
@@ -8,7 +8,6 @@
use TYPO3\CMS\Core\Database\Query\Expression\CompositeExpression;
use TYPO3\CMS\Core\Database\Query\Expression\ExpressionBuilder;
use TYPO3\CMS\Core\Database\Query\Restriction\QueryRestrictionInterface;
-use TYPO3\CMS\Core\Database\QueryGenerator;
use TYPO3\CMS\Core\Domain\Repository\PageRepository;
use TYPO3\CMS\Core\Site\Entity\Site;
@@ -17,8 +16,10 @@ class SiteRestriction implements QueryRestrictionInterface
/** @var int[]|null */
private $cachedSitePids;
- public function __construct(private readonly PageRepository $pageRepository)
- {}
+ public function __construct(
+ private readonly PageRepository $pageRepository
+ ) {
+ }
public function buildExpression(array $queriedTables, ExpressionBuilder $expressionBuilder): CompositeExpression
{
diff --git a/Classes/Deserializer/JsonApiDeserializer.php b/Classes/Deserializer/JsonApiDeserializer.php
index 10a5340..32b77bd 100644
--- a/Classes/Deserializer/JsonApiDeserializer.php
+++ b/Classes/Deserializer/JsonApiDeserializer.php
@@ -11,7 +11,7 @@ class JsonApiDeserializer implements Deserializer
public function collection(array $data, int $options = 0): array
{
if (isset($data['data']) && \is_array($data['data'])) {
- return \array_merge(...\array_map(fn($data) => $this->item(['data' => $data], $options), $data['data']));
+ return \array_merge(...\array_map(fn ($data) => $this->item(['data' => $data], $options), $data['data']));
}
return [];
diff --git a/Classes/Domain/Command/UnitOfWorkTcaResourceCommand.php b/Classes/Domain/Command/UnitOfWorkTcaResourceCommand.php
index 6dca6b9..97530da 100644
--- a/Classes/Domain/Command/UnitOfWorkTcaResourceCommand.php
+++ b/Classes/Domain/Command/UnitOfWorkTcaResourceCommand.php
@@ -14,7 +14,7 @@ class UnitOfWorkTcaResourceCommand implements UnitOfWorkCommand
public function __construct(array $unitOfWorkCommands)
{
- $this->unitOfWorkCommands = \array_map(fn(TcaRecordReferencingCommand $command) => $command, $unitOfWorkCommands);
+ $this->unitOfWorkCommands = \array_map(fn (TcaRecordReferencingCommand $command) => $command, $unitOfWorkCommands);
}
public function getUnitOfWorkCommands(): array
@@ -25,7 +25,7 @@ public function getUnitOfWorkCommands(): array
public function withUnitOfWorkCommands(array $unitOfWorkCommands): UnitOfWorkCommand
{
$target = clone $this;
- $target->unitOfWorkCommands = \array_map(fn(TcaRecordReferencingCommand $command) => $command, $unitOfWorkCommands);
+ $target->unitOfWorkCommands = \array_map(fn (TcaRecordReferencingCommand $command) => $command, $unitOfWorkCommands);
return $target;
}
diff --git a/Classes/Domain/CommandHandler/DataHandlerCommandHandler.php b/Classes/Domain/CommandHandler/DataHandlerCommandHandler.php
index fd02a28..cf0c404 100644
--- a/Classes/Domain/CommandHandler/DataHandlerCommandHandler.php
+++ b/Classes/Domain/CommandHandler/DataHandlerCommandHandler.php
@@ -77,7 +77,7 @@ protected function addCommandToDataOrCommandMap(TcaRecordReferencingCommand $com
protected function process(array $datamap = [], array $commandmap = []): array
{
- if ($datamap === [] && $commandmap === []) {
+ if ([] === $datamap && [] === $commandmap) {
return [];
}
diff --git a/Classes/Domain/Repository/AbstractDatabaseResourceRepository.php b/Classes/Domain/Repository/AbstractDatabaseResourceRepository.php
index b29739f..d4467e1 100644
--- a/Classes/Domain/Repository/AbstractDatabaseResourceRepository.php
+++ b/Classes/Domain/Repository/AbstractDatabaseResourceRepository.php
@@ -95,7 +95,7 @@ public function findByFiltersWithCursor(array $filters, int $limit, ?string $cur
$result = \array_map($this->createDeduplicator(), $result);
$result = \array_map($this->createOverlayMapper($context), $result);
- $nextCursor = $result === [] ? null : \end($result)[$this->identifier];
+ $nextCursor = [] === $result ? null : \end($result)[$this->identifier];
$result = \array_map($this->createMetaMapper(), $result);
diff --git a/Classes/Domain/Repository/FileReferenceRepository.php b/Classes/Domain/Repository/FileReferenceRepository.php
index 745a759..fb40929 100644
--- a/Classes/Domain/Repository/FileReferenceRepository.php
+++ b/Classes/Domain/Repository/FileReferenceRepository.php
@@ -25,7 +25,7 @@ public function findByRelation(string $foreignTableName, string $foreignField, s
{
$fileReferences = $this->coreFileRepository->findByRelation($foreignTableName, $foreignField, $foreignIdentifier);
- $fileReferences = \array_map(fn(FileReference $fileReference) => $fileReference->getReferenceProperties(), $fileReferences);
+ $fileReferences = \array_map(fn (FileReference $fileReference) => $fileReference->getReferenceProperties(), $fileReferences);
return \array_map($this->createMetaMapper(), $fileReferences);
}
diff --git a/Classes/IncludeHandler/TcaResourceIncludeHandler.php b/Classes/IncludeHandler/TcaResourceIncludeHandler.php
index 0b291a8..98c4f46 100644
--- a/Classes/IncludeHandler/TcaResourceIncludeHandler.php
+++ b/Classes/IncludeHandler/TcaResourceIncludeHandler.php
@@ -62,11 +62,11 @@ public function handleInclude(Scope $scope, string $includeName, $data, callable
$relationHandler = GeneralUtility::makeInstance(RelationHandler::class);
$relationHandler->start($fieldValue, $allowedTableName, $mmTableName, $uid, $this->tableName, $columnConfig);
- $result = \array_filter($relationHandler->itemArray, fn($item) => $item['table'] === $allowedTableName);
+ $result = \array_filter($relationHandler->itemArray, fn ($item) => $item['table'] === $allowedTableName);
$resourceType = (isset($columnConfig['maxitems']) && 1 == $columnConfig['maxitems']) || (isset($columnConfig['renderType']) && 'selectSingle' === $columnConfig['renderType']) ? Item::class : Collection::class;
- if ($result !== []) {
+ if ([] !== $result) {
$resourceDefinition = $this->resourceDefinitionsByTableName[$allowedTableName];
// Override any custom Identifier here for our database record identifier
diff --git a/Classes/Resource/ResourceOperationToCommandMap.php b/Classes/Resource/ResourceOperationToCommandMap.php
index 582e2be..11ee5e2 100644
--- a/Classes/Resource/ResourceOperationToCommandMap.php
+++ b/Classes/Resource/ResourceOperationToCommandMap.php
@@ -47,6 +47,6 @@ private function loadOperationsToCommandMapFromResourcesConfiguration(): void
return;
}
$resourcesConfiguration = ConfigurationManager::getResourcesConfiguration();
- $this->commandsByResourceTypeAndOperation = \array_filter(\array_map(fn($resourceConfiguration) => $resourceConfiguration['operationToCommandMap'] ?? null, $resourcesConfiguration));
+ $this->commandsByResourceTypeAndOperation = \array_filter(\array_map(fn ($resourceConfiguration) => $resourceConfiguration['operationToCommandMap'] ?? null, $resourcesConfiguration));
}
}
diff --git a/Classes/Schema/VisibleColumnsProvider.php b/Classes/Schema/VisibleColumnsProvider.php
index 5c5fa7f..bf2c90c 100644
--- a/Classes/Schema/VisibleColumnsProvider.php
+++ b/Classes/Schema/VisibleColumnsProvider.php
@@ -36,6 +36,6 @@ public function getVisibleColumnsForResource(string $tableName, array $resource)
'databaseRow' => $resource,
]);
- return \array_filter($result['columnsToProcess'], fn($columnName) => '-' !== $columnName[0]);
+ return \array_filter($result['columnsToProcess'], fn ($columnName) => '-' !== $columnName[0]);
}
}
diff --git a/Classes/TransformHandler/TcaResourceTransformHandler.php b/Classes/TransformHandler/TcaResourceTransformHandler.php
index ef556e4..1f880d4 100644
--- a/Classes/TransformHandler/TcaResourceTransformHandler.php
+++ b/Classes/TransformHandler/TcaResourceTransformHandler.php
@@ -52,8 +52,8 @@ protected function getVisibleAttributesOfResource(array $resource): array
'databaseRow' => $resource,
]);
- $visibleColumns = \array_filter($result['columnsToProcess'], fn($columnName) => !isset($this->excludedColumns[$columnName]) && '-' !== $columnName[0]);
+ $visibleColumns = \array_filter($result['columnsToProcess'], fn ($columnName) => !isset($this->excludedColumns[$columnName]) && '-' !== $columnName[0]);
- return \array_combine($visibleColumns, \array_map(fn($columnName) => $result['databaseRow'][$columnName] ?? null, $visibleColumns));
+ return \array_combine($visibleColumns, \array_map(fn ($columnName) => $result['databaseRow'][$columnName] ?? null, $visibleColumns));
}
}
diff --git a/Classes/Transformer/ComposableTransformer.php b/Classes/Transformer/ComposableTransformer.php
index d2a79e0..4907412 100644
--- a/Classes/Transformer/ComposableTransformer.php
+++ b/Classes/Transformer/ComposableTransformer.php
@@ -26,13 +26,13 @@ class ComposableTransformer extends TransformerAbstract implements ResourceTrans
public function __construct(array $transformHandlers, array $includeHandlers = [])
{
- $this->transformHandlerStack = \array_reduce($transformHandlers, fn($next, TransformHandler $transformHandler) => $this->wrapTransformHandler($transformHandler, $next), fn($data, array $transformedData) => $transformedData);
+ $this->transformHandlerStack = \array_reduce($transformHandlers, fn ($next, TransformHandler $transformHandler) => $this->wrapTransformHandler($transformHandler, $next), fn ($data, array $transformedData) => $transformedData);
- $this->availableIncludesStack = \array_reduce($includeHandlers, fn($next, IncludeHandler $includeHandler) => $this->wrapAvailableIncludesHandler($includeHandler, $next), fn($currentIncludes) => \array_unique(\array_merge($currentIncludes, parent::getAvailableIncludes())));
+ $this->availableIncludesStack = \array_reduce($includeHandlers, fn ($next, IncludeHandler $includeHandler) => $this->wrapAvailableIncludesHandler($includeHandler, $next), fn ($currentIncludes) => \array_unique(\array_merge($currentIncludes, parent::getAvailableIncludes())));
- $this->defaultIncludesStack = \array_reduce($includeHandlers, fn($next, IncludeHandler $includeHandler) => $this->wrapDefaultIncludesHandler($includeHandler, $next), fn($currentIncludes) => \array_unique(\array_merge($currentIncludes, parent::getDefaultIncludes())));
+ $this->defaultIncludesStack = \array_reduce($includeHandlers, fn ($next, IncludeHandler $includeHandler) => $this->wrapDefaultIncludesHandler($includeHandler, $next), fn ($currentIncludes) => \array_unique(\array_merge($currentIncludes, parent::getDefaultIncludes())));
- $this->includeHandlerStack = \array_reduce($includeHandlers, fn($next, IncludeHandler $includeHandler) => $this->wrapIncludeHandler($includeHandler, $next), fn(Scope $scope, $includeName, $data) => parent::callIncludeMethod($scope, $includeName, $data));
+ $this->includeHandlerStack = \array_reduce($includeHandlers, fn ($next, IncludeHandler $includeHandler) => $this->wrapIncludeHandler($includeHandler, $next), fn (Scope $scope, $includeName, $data) => parent::callIncludeMethod($scope, $includeName, $data));
}
public function getAvailableIncludes(): array
@@ -57,21 +57,21 @@ protected function callIncludeMethod(Scope $scope, $includeName, $data)
protected function wrapTransformHandler(TransformHandler $handler, callable $next): \Closure
{
- return fn($data, array $transformedData): array => $handler->handleTransform($data, $transformedData, $next);
+ return fn ($data, array $transformedData): array => $handler->handleTransform($data, $transformedData, $next);
}
protected function wrapAvailableIncludesHandler(IncludeHandler $handler, callable $next): \Closure
{
- return fn(array $currentIncludes): array => $handler->getAvailableIncludes($currentIncludes, $next);
+ return fn (array $currentIncludes): array => $handler->getAvailableIncludes($currentIncludes, $next);
}
protected function wrapDefaultIncludesHandler(IncludeHandler $handler, callable $next): \Closure
{
- return fn(array $currentIncludes): array => $handler->getDefaultIncludes($currentIncludes, $next);
+ return fn (array $currentIncludes): array => $handler->getDefaultIncludes($currentIncludes, $next);
}
protected function wrapIncludeHandler(IncludeHandler $handler, callable $next): \Closure
{
- return fn($scope, $includeName, $data): ?ResourceInterface => $handler->handleInclude($scope, $includeName, $data, $next);
+ return fn ($scope, $includeName, $data): ?ResourceInterface => $handler->handleInclude($scope, $includeName, $data, $next);
}
}
diff --git a/Tests/Unit/JsonApiDeserializerTest.php b/Tests/Unit/JsonApiDeserializerTest.php
index 32eab6b..243f677 100644
--- a/Tests/Unit/JsonApiDeserializerTest.php
+++ b/Tests/Unit/JsonApiDeserializerTest.php
@@ -19,7 +19,7 @@ public function testJsonApiDeserializer(array $result, $expectedResult): void
self::assertEquals($expectedResult, $result);
}
- public function provideTestCases(): array
+ public static function provideTestCases(): array
{
return [
'age-groups test' => [
diff --git a/etc/FunctionalTests.xml b/etc/FunctionalTests.xml
new file mode 100644
index 0000000..35fc077
--- /dev/null
+++ b/etc/FunctionalTests.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ ../Tests/Functional/
+
+
+
+
+
+
+
+
diff --git a/etc/FunctionalTestsBootstrap.php b/etc/FunctionalTestsBootstrap.php
new file mode 100644
index 0000000..d4aa5a1
--- /dev/null
+++ b/etc/FunctionalTestsBootstrap.php
@@ -0,0 +1,34 @@
+defineOriginalRootPath();
+ $testbase->createDirectory(ORIGINAL_ROOT . 'typo3temp/var/tests');
+ $testbase->createDirectory(ORIGINAL_ROOT . 'typo3temp/var/transient');
+})();
diff --git a/etc/UnitTests.xml b/etc/UnitTests.xml
new file mode 100644
index 0000000..07e9cf5
--- /dev/null
+++ b/etc/UnitTests.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ ../Tests/Unit/
+
+
+
+
+
+
+
+
diff --git a/etc/scripts/checkCodingStandards.sh b/etc/scripts/checkCodingStandards.sh
index a7eca25..8294d27 100755
--- a/etc/scripts/checkCodingStandards.sh
+++ b/etc/scripts/checkCodingStandards.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
-FILTERED_FOLDERS=`find ./ -mindepth 1 -maxdepth 1 -type d | grep -Ev '.Build|Build|Resources|etc|public|logs|.phpspec|.git|vendor|.idea|var|.ddev'`
+FILTERED_FOLDERS=`find ./ -mindepth 1 -maxdepth 1 -type d | grep -Ev '.Build|Build|Resources|etc|public|logs|.phpspec|.git|vendor|.idea|var'`
if [ "0" != "$(echo $?)" ]; then
echo "No php files found to lint. So technically spoken everything's fine, but please check that I haven't missed any files."
@@ -10,4 +10,4 @@ fi
SEPERATOR=" "
FOLDERS=$(printf "${SEPERATOR}%s" "${FILTERED_FOLDERS[@]}")
-.Build/bin/ecs check --no-progress-bar -n -c .Build/vendor/dfau/coding-standard/ecs.php $FOLDERS $@
\ No newline at end of file
+.Build/bin/ecs check --no-progress-bar -n -c .Build/vendor/dfau/coding-standard/ecs.php $FOLDERS $@
diff --git a/etc/scripts/runTests.sh b/etc/scripts/runTests.sh
index 99e10a6..5302ebf 100755
--- a/etc/scripts/runTests.sh
+++ b/etc/scripts/runTests.sh
@@ -4,9 +4,9 @@
# TYPO3 core test runner based on docker and docker-compose.
#
-# Function to write a .env file in Build/testing-docker
+# Function to write a .env file in etc/testing-docker/local
# This is read by docker-compose and vars defined here are
-# used in Build/testing-docker/docker-compose.yml
+# used in etc/testing-docker/local/docker-compose.yml
setUpDockerComposeDotEnv() {
# Delete possibly existing local .env file if exists
[ -e .env ] && rm .env
@@ -20,23 +20,22 @@ setUpDockerComposeDotEnv() {
# Your local home directory for composer and npm caching
echo "HOST_HOME=${HOME}" >> .env
# Your local user
- echo "ROOT_DIR=${ROOT_DIR}" >> .env
+ echo "ROOT_DIR"=${ROOT_DIR} >> .env
echo "HOST_USER=${USER}" >> .env
echo "TEST_FILE=${TEST_FILE}" >> .env
+ echo "TYPO3_VERSION=${TYPO3_VERSION}" >> .env
echo "PHP_XDEBUG_ON=${PHP_XDEBUG_ON}" >> .env
echo "PHP_XDEBUG_PORT=${PHP_XDEBUG_PORT}" >> .env
+ echo "PHP_VERSION=${PHP_VERSION}" >> .env
echo "DOCKER_PHP_IMAGE=${DOCKER_PHP_IMAGE}" >> .env
echo "EXTRA_TEST_OPTIONS=${EXTRA_TEST_OPTIONS}" >> .env
echo "SCRIPT_VERBOSE=${SCRIPT_VERBOSE}" >> .env
- echo "CGLCHECK_DRY_RUN=${CGLCHECK_DRY_RUN}" >> .env
}
# Load help text into $HELP
read -r -d '' HELP <
Specifies which test suite to run
- - acceptance: backend acceptance tests
- - cgl: cgl test and fix all php files
- - composerUpdate: "composer update", handy if host has no PHP
- - composerValidate: "composer validate"
- - functional: functional tests
+ - composerUpdate: "composer update"
+ - clean: clean up build and testing related files
- lint: PHP linting
- - phpstan: phpstan analyze
- unit (default): PHP unit tests
+ - functional: functional tests
- -d
+ -d
Only with -s functional
Specifies on which DBMS tests are performed
- mariadb (default): use mariadb
- - mssql: use mssql microsoft sql server
- postgres: use postgres
- sqlite: use sqlite
- -p <7.4|8.0>
+ -p <7.4|8.0|8.1|8.2>
Specifies the PHP minor version to be used
- - 7.4 (default): use PHP 7.4
+ - 7.4: (default) use PHP 7.4
- 8.0: use PHP 8.0
+ - 8.1: use PHP 8.1
+ - 8.2: use PHP 8.2
+
+ -t <11|12>
+ Only with -s composerUpdate
+ Specifies the TYPO3 core major version to be used
+ - 11: (default) use TYPO3 core v11
+ - 12: use TYPO3 core v12
- -e ""
- Only with -s acceptance|functional|unit
- Additional options to send to phpunit (unit & functional tests) or codeception (acceptance
- tests). For phpunit, options starting with "--" must be added after options starting with "-".
+ -e ""
+ Only with -s functional|unit
+ Additional options to send to phpunit tests.
+ For phpunit, options starting with "--" must be added after options starting with "-".
Example -e "-v --filter canRetrieveValueWithGP" to enable verbose output AND filter tests
named "canRetrieveValueWithGP"
-x
- Only with -s functional|unit|acceptance
+ Only with -s unit
Send information to host instance for test or system under test break points. This is especially
useful if a local PhpStorm instance is listening on default xdebug port 9003. A different port
can be selected with -y
@@ -84,15 +87,11 @@ Options:
Send xdebug information to a different port than default 9003 if an IDE like PhpStorm
is not listening on default port.
- -n
- Only with -s cgl
- Activate dry-run in CGL check that does not actively change files and only prints broken ones.
-
-u
- Update existing typo3/core-testing-*:latest docker images. Maintenance call to docker pull latest
+ Update existing typo3gmbh/phpXY:latest docker images. Maintenance call to docker pull latest
versions of the main php images. The images are updated once in a while and only the youngest
ones are supported by core testing. Use this if weird test errors occur. Also removes obsolete
- image versions of typo3/core-testing-*.
+ image versions of typo3gmbh/phpXY.
-v
Enable verbose script output. Shows variables and docker commands.
@@ -100,9 +99,6 @@ Options:
-h
Show this help.
-Examples:
- # Run unit tests using PHP 7.4
- ./Build/Scripts/runTests.sh
EOF
# Test if docker-compose exists, else exit out with error
@@ -120,20 +116,15 @@ cd "$THIS_SCRIPT_DIR" || exit 1
cd ../testing-docker || exit 1
# Option defaults
-if ! type "realpath" > /dev/null; then
- echo "This script works best with realpath installed" >&2
- ROOT_DIR=`${PWD}/../../`
-else
- ROOT_DIR=`realpath ${PWD}/../../`
-fi
+ROOT_DIR=`realpath ${PWD}/../../`
TEST_SUITE="unit"
DBMS="mariadb"
PHP_VERSION="7.4"
+TYPO3_VERSION="11"
PHP_XDEBUG_ON=0
PHP_XDEBUG_PORT=9003
EXTRA_TEST_OPTIONS=""
SCRIPT_VERBOSE=0
-CGLCHECK_DRY_RUN=""
# Option parsing
# Reset in case getopts has been used previously in the shell
@@ -141,7 +132,7 @@ OPTIND=1
# Array for invalid options
INVALID_OPTIONS=();
# Simple option parsing based on getopts (! not getopt)
-while getopts ":s:d:p:e:xy:nhuv" OPT; do
+while getopts ":s:d:p:t:e:xy:huv" OPT; do
case ${OPT} in
s)
TEST_SUITE=${OPTARG}
@@ -152,6 +143,9 @@ while getopts ":s:d:p:e:xy:nhuv" OPT; do
p)
PHP_VERSION=${OPTARG}
;;
+ t)
+ TYPO3_VERSION=${OPTARG}
+ ;;
e)
EXTRA_TEST_OPTIONS=${OPTARG}
;;
@@ -165,9 +159,6 @@ while getopts ":s:d:p:e:xy:nhuv" OPT; do
echo "${HELP}"
exit 0
;;
- n)
- CGLCHECK_DRY_RUN="-n"
- ;;
u)
TEST_SUITE=update
;;
@@ -194,23 +185,13 @@ if [ ${#INVALID_OPTIONS[@]} -ne 0 ]; then
exit 1
fi
-# Move "7.4" to "php74", the latter is the docker container name
+# Move "7.2" to "php72", the latter is the docker container name
DOCKER_PHP_IMAGE=`echo "php${PHP_VERSION}" | sed -e 's/\.//'`
# Set $1 to first mass argument, this is the optional test file or test directory to execute
shift $((OPTIND - 1))
-TEST_FILE=${1}
if [ -n "${1}" ]; then
TEST_FILE="Web/typo3conf/ext/toujou_api/${1}"
-else
- case ${TEST_SUITE} in
- unit)
- TEST_FILE="Web/typo3conf/ext/toujou_api/Tests/Unit"
- ;;
- functional)
- TEST_FILE="Web/typo3conf/ext/toujou_api/Tests/Functional"
- ;;
- esac
fi
if [ ${SCRIPT_VERBOSE} -eq 1 ]; then
@@ -219,31 +200,18 @@ fi
# Suite execution
case ${TEST_SUITE} in
- acceptance)
- setUpDockerComposeDotEnv
- docker-compose run acceptance_backend_mariadb10
- SUITE_EXIT_CODE=$?
- docker-compose down
- ;;
- cgl)
- # Active dry-run for cgl needs not "-n" but specific options
- if [[ ! -z ${CGLCHECK_DRY_RUN} ]]; then
- CGLCHECK_DRY_RUN="--dry-run --diff --diff-format udiff"
- fi
- setUpDockerComposeDotEnv
- docker-compose run cgl
- SUITE_EXIT_CODE=$?
- docker-compose down
+ clean)
+ rm -rf ../../composer.lock ../../.Build/ ../../composer.json.testing
;;
composerUpdate)
setUpDockerComposeDotEnv
+ cp ../../composer.json ../../composer.json.orig
+ if [ -f "../../composer.json.testing" ]; then
+ cp ../../composer.json ../../composer.json.orig
+ fi
docker-compose run composer_update
- SUITE_EXIT_CODE=$?
- docker-compose down
- ;;
- composerValidate)
- setUpDockerComposeDotEnv
- docker-compose run composer_validate
+ cp ../../composer.json ../../composer.json.testing
+ mv ../../composer.json.orig ../../composer.json
SUITE_EXIT_CODE=$?
docker-compose down
;;
@@ -254,10 +222,6 @@ case ${TEST_SUITE} in
docker-compose run functional_mariadb10
SUITE_EXIT_CODE=$?
;;
- mssql)
- docker-compose run functional_mssql2019latest
- SUITE_EXIT_CODE=$?
- ;;
postgres)
docker-compose run functional_postgres10
SUITE_EXIT_CODE=$?
@@ -285,12 +249,6 @@ case ${TEST_SUITE} in
SUITE_EXIT_CODE=$?
docker-compose down
;;
- phpstan)
- setUpDockerComposeDotEnv
- docker-compose run phpstan
- SUITE_EXIT_CODE=$?
- docker-compose down
- ;;
unit)
setUpDockerComposeDotEnv
docker-compose run unit
diff --git a/etc/testing-docker/docker-compose.yml b/etc/testing-docker/docker-compose.yml
index f6197b3..0ac3c1c 100644
--- a/etc/testing-docker/docker-compose.yml
+++ b/etc/testing-docker/docker-compose.yml
@@ -1,22 +1,12 @@
version: '2.3'
services:
mariadb10:
- # not using mariadb:10 for the time being, because 10.5.7 (currently latest) is broken
- image: mariadb:10.5.6
+ image: mariadb:10
environment:
MYSQL_ROOT_PASSWORD: funcp
tmpfs:
- /var/lib/mysql/:rw,noexec,nosuid
- mssql2019latest:
- image: typo3/core-testing-mssql2019:latest
- environment:
- ACCEPT_EULA: "Y"
- SA_PASSWORD: "Test1234!"
- MSSQL_PID: Developer
- # No tmpfs setup here since mssql fails on tmpfs o_direct.
- # This makes mssql sloooow for functionals.
-
postgres10:
image: postgres:10-alpine
environment:
@@ -25,152 +15,51 @@ services:
tmpfs:
- /var/lib/postgresql/data:rw,noexec,nosuid
- web:
- image: typo3/core-testing-${DOCKER_PHP_IMAGE}:latest
- user: "${HOST_UID}"
- stop_grace_period: 1s
- volumes:
- - ${ROOT_DIR}:${ROOT_DIR}
- - /etc/passwd:/etc/passwd:ro
- - /etc/group:/etc/group:ro
- environment:
- TYPO3_PATH_ROOT: ${ROOT_DIR}/.Build/Web/typo3temp/var/tests/acceptance
- TYPO3_PATH_APP: ${ROOT_DIR}/.Build/Web/typo3temp/var/tests/acceptance
- TYPO3_OAUTH2_PRIVATE_KEY: ${ROOT_DIR}/.Build/Web/typo3temp/var/tests/acceptance/typo3conf/ext/toujou_api/Tests/Acceptance/_data/private.key
- TYPO3_OAUTH2_PUBLIC_KEY: ${ROOT_DIR}/.Build/Web/typo3temp/var/tests/acceptance/typo3conf/ext/toujou_api/Tests/Acceptance/_data/public.key
- TYPO3_OAUTH2_ENCRYPTION_KEY: def000003cde1910c7bdd30ad21d949a2d7e2c9d330b4cfcabd43d146c22fb2c4d5e66dd9d1ca33b06c3c101dce34de019c21fe48ec3f5a924f27e05717bddd5f6c6cdf5
- command: php -dxdebug.mode=off -S web:8000 -t ${ROOT_DIR}/.Build/Web
-
- acceptance_backend_mariadb10:
- image: typo3/core-testing-${DOCKER_PHP_IMAGE}:latest
- user: "${HOST_UID}"
- links:
- - mariadb10
- - web
- environment:
- typo3DatabaseName: func_test
- typo3DatabaseUsername: root
- typo3DatabasePassword: funcp
- typo3DatabaseHost: mariadb10
- volumes:
- - ${ROOT_DIR}:${ROOT_DIR}
- - ${HOST_HOME}:${HOST_HOME}
- - /etc/passwd:/etc/passwd:ro
- - /etc/group:/etc/group:ro
- working_dir: ${ROOT_DIR}/.Build
- command: >
- /bin/sh -c "
- if [ ${SCRIPT_VERBOSE} -eq 1 ]; then
- set -x
- fi
- echo Waiting for database start...;
- while ! nc -z mariadb10 3306; do
- sleep 1;
- done;
- echo Database is up;
- php -v | grep '^PHP';
- ln -sfn ${ROOT_DIR} Web/typo3conf/ext/toujou_api
- mkdir -p Web/typo3temp/var/tests/
- COMMAND=\"vendor/codeception/codeception/codecept run Api -d -c Web/typo3conf/ext/toujou_api/Tests/codeception.yml ${TEST_FILE}\"
- if [ ${PHP_XDEBUG_ON} -eq 0 ]; then
- XDEBUG_MODE=\"off\" \
- $${COMMAND};
- else
- XDEBUG_MODE=\"debug,develop\" \
- XDEBUG_TRIGGER=\"foo\" \
- XDEBUG_CONFIG=\"client_port=${PHP_XDEBUG_PORT} client_host=host.docker.internal\" \
- $${COMMAND};
- fi
- "
-
- cgl:
- image: typo3/core-testing-${DOCKER_PHP_IMAGE}:latest
- user: "${HOST_UID}"
- volumes:
- - ${ROOT_DIR}:${ROOT_DIR}
- - ${HOST_HOME}:${HOST_HOME}
- - /etc/passwd:/etc/passwd:ro
- - /etc/group:/etc/group:ro
- working_dir: ${ROOT_DIR}
- command: >
- /bin/sh -c "
- if [ ${SCRIPT_VERBOSE} -eq 1 ]; then
- set -x
- fi
- php -v | grep '^PHP';
- if [ ${PHP_XDEBUG_ON} -eq 0 ]; then
- php -dxdebug.mode=off \
- .Build/bin/php-cs-fixer fix \
- -v \
- ${CGLCHECK_DRY_RUN} \
- --config=.Build/vendor/typo3/coding-standards/templates/extension_php_cs.dist \
- --using-cache=no .
- else
- DOCKER_HOST=`route -n | awk '/^0.0.0.0/ { print $$2 }'`
- XDEBUG_MODE=\"debug,develop\" \
- XDEBUG_TRIGGER=\"foo\" \
- XDEBUG_CONFIG=\"client_port=${PHP_XDEBUG_PORT} client_host=$${DOCKER_HOST}\" \
- PHP_CS_FIXER_ALLOW_XDEBUG=1 \
- .Build/bin/php-cs-fixer fix \
- -v \
- ${CGLCHECK_DRY_RUN} \
- --config=.Build/vendor/typo3/coding-standards/templates/extension_php_cs.dist \
- --using-cache=no .
- fi
- "
-
composer_update:
image: typo3/core-testing-${DOCKER_PHP_IMAGE}:latest
user: "${HOST_UID}"
volumes:
- ${ROOT_DIR}:${ROOT_DIR}
- - ${HOST_HOME}:${HOST_HOME}
- - /etc/passwd:/etc/passwd:ro
- - /etc/group:/etc/group:ro
- working_dir: ${ROOT_DIR}
- command: >
- /bin/sh -c "
- if [ ${SCRIPT_VERBOSE} -eq 1 ]; then
- set -x
- fi
- php -v | grep '^PHP';
- COMPOSER_HOME=${ROOT_DIR}/.Build/.composer composer update --no-progress --no-interaction;
- "
-
- composer_validate:
- image: typo3/core-testing-${DOCKER_PHP_IMAGE}:latest
- user: "${HOST_UID}"
- volumes:
- - ${ROOT_DIR}:${ROOT_DIR}
- - ${HOST_HOME}:${HOST_HOME}
- - /etc/passwd:/etc/passwd:ro
- - /etc/group:/etc/group:ro
working_dir: ${ROOT_DIR}
+ environment:
+ COMPOSER_CACHE_DIR: ".cache/composer"
command: >
/bin/sh -c "
if [ ${SCRIPT_VERBOSE} -eq 1 ]; then
set -x
fi
php -v | grep '^PHP';
- composer validate;
+ if [ ${TYPO3_VERSION} -eq 11 ]; then
+ composer req --dev --no-update \
+ typo3/cms-composer-installers:^3.0
+ composer req typo3/cms-core:^11.5 --no-update
+ fi
+ if [ ${TYPO3_VERSION} -eq 12 ]; then
+ composer req --dev --no-update \
+ "typo3/cms-composer-installers:^5.0" \
+ typo3/cms-backend:^12.4 \
+ typo3/cms-frontend:^12.4 \
+ typo3/cms-extbase:^12.4 \
+ typo3/cms-fluid:^12.4 \
+ typo3/cms-install:^12.4
+ composer req typo3/cms-core:^12.4 -W --no-update
+ fi
+ composer update --no-progress --no-interaction;
"
functional_mariadb10:
image: typo3/core-testing-${DOCKER_PHP_IMAGE}:latest
- user: "${HOST_UID}"
+ user: ${HOST_UID}
links:
- mariadb10
volumes:
- ${ROOT_DIR}:${ROOT_DIR}
- - ${HOST_HOME}:${HOST_HOME}
- - /etc/passwd:/etc/passwd:ro
- - /etc/group:/etc/group:ro
environment:
typo3DatabaseName: func_test
typo3DatabaseUsername: root
typo3DatabasePassword: funcp
typo3DatabaseHost: mariadb10
- working_dir: ${ROOT_DIR}/.Build
+ working_dir: ${ROOT_DIR}
command: >
/bin/sh -c "
if [ ${SCRIPT_VERBOSE} -eq 1 ]; then
@@ -184,76 +73,30 @@ services:
php -v | grep '^PHP';
if [ ${PHP_XDEBUG_ON} -eq 0 ]; then
XDEBUG_MODE=\"off\" \
- bin/phpunit -c vendor/typo3/testing-framework/Resources/Core/Build/FunctionalTests.xml ${EXTRA_TEST_OPTIONS} ${TEST_FILE};
- else
- DOCKER_HOST=`route -n | awk '/^0.0.0.0/ { print $$2 }'`
- XDEBUG_MODE=\"debug,develop\" \
- XDEBUG_TRIGGER=\"foo\" \
- XDEBUG_CONFIG=\"client_port=${PHP_XDEBUG_PORT} client_host=$${DOCKER_HOST}\" \
- bin/phpunit -c vendor/typo3/testing-framework/Resources/Core/Build/FunctionalTests.xml ${EXTRA_TEST_OPTIONS} ${TEST_FILE};
- fi
- "
-
- functional_mssql2019latest:
- image: typo3/core-testing-${DOCKER_PHP_IMAGE}:latest
- user: "${HOST_UID}"
- links:
- - mssql2019latest
- volumes:
- - ${ROOT_DIR}:${ROOT_DIR}
- - ${HOST_HOME}:${HOST_HOME}
- - /etc/passwd:/etc/passwd:ro
- - /etc/group:/etc/group:ro
- environment:
- typo3DatabaseDriver: sqlsrv
- typo3DatabaseName: func
- typo3DatabasePassword: "Test1234!"
- typo3DatabaseUsername: SA
- typo3DatabasePort: 1433
- typo3DatabaseCharset: utf-8
- typo3DatabaseHost: mssql2019latest
- working_dir: ${ROOT_DIR}/.Build
- command: >
- /bin/sh -c "
- if [ ${SCRIPT_VERBOSE} -eq 1 ]; then
- set -x
- fi
- echo Waiting for database start...;
- while ! nc -z mssql2019latest 1433; do
- sleep 1;
- done;
- sleep 5;
- echo Database is up;
- php -v | grep '^PHP';
- if [ ${PHP_XDEBUG_ON} -eq 0 ]; then
- XDEBUG_MODE=\"off\" \
- bin/phpunit -c vendor/typo3/testing-framework/Resources/Core/Build/FunctionalTests.xml ${EXTRA_TEST_OPTIONS} --exclude-group not-mssql ${TEST_FILE};
+ .Build/bin/phpunit -c etc/FunctionalTests.xml ${EXTRA_TEST_OPTIONS} ${TEST_FILE};
else
DOCKER_HOST=`route -n | awk '/^0.0.0.0/ { print $$2 }'`
XDEBUG_MODE=\"debug,develop\" \
XDEBUG_TRIGGER=\"foo\" \
XDEBUG_CONFIG=\"client_port=${PHP_XDEBUG_PORT} client_host=$${DOCKER_HOST}\" \
- bin/phpunit -c vendor/typo3/testing-framework/Resources/Core/Build/FunctionalTests.xml ${EXTRA_TEST_OPTIONS} --exclude-group not-mssql ${TEST_FILE};
+ .Build/bin/phpunit -c etc/FunctionalTests.xml ${EXTRA_TEST_OPTIONS} ${TEST_FILE};
fi
"
functional_postgres10:
image: typo3/core-testing-${DOCKER_PHP_IMAGE}:latest
- user: "${HOST_UID}"
+ user: ${HOST_UID}
links:
- postgres10
volumes:
- ${ROOT_DIR}:${ROOT_DIR}
- - ${HOST_HOME}:${HOST_HOME}
- - /etc/passwd:/etc/passwd:ro
- - /etc/group:/etc/group:ro
environment:
typo3DatabaseDriver: pdo_pgsql
typo3DatabaseName: bamboo
typo3DatabaseUsername: ${HOST_USER}
typo3DatabaseHost: postgres10
typo3DatabasePassword: funcp
- working_dir: ${ROOT_DIR}/.Build
+ working_dir: ${ROOT_DIR}
command: >
/bin/sh -c "
if [ ${SCRIPT_VERBOSE} -eq 1 ]; then
@@ -267,29 +110,26 @@ services:
php -v | grep '^PHP';
if [ ${PHP_XDEBUG_ON} -eq 0 ]; then
XDEBUG_MODE=\"off\" \
- bin/phpunit -c vendor/typo3/testing-framework/Resources/Core/Build/FunctionalTests.xml ${EXTRA_TEST_OPTIONS} --exclude-group not-postgres ${TEST_FILE};
+ .Build/bin/phpunit -c etc/FunctionalTests.xml ${EXTRA_TEST_OPTIONS} --exclude-group not-postgres ${TEST_FILE};
else
DOCKER_HOST=`route -n | awk '/^0.0.0.0/ { print $$2 }'`
XDEBUG_MODE=\"debug,develop\" \
XDEBUG_TRIGGER=\"foo\" \
XDEBUG_CONFIG=\"client_port=${PHP_XDEBUG_PORT} client_host=$${DOCKER_HOST}\" \
- bin/phpunit -c vendor/typo3/testing-framework/Resources/Core/Build/FunctionalTests.xml ${EXTRA_TEST_OPTIONS} --exclude-group not-postgres ${TEST_FILE};
+ .Build/bin/phpunit -c etc/FunctionalTests.xml ${EXTRA_TEST_OPTIONS} --exclude-group not-postgres ${TEST_FILE};
fi
"
functional_sqlite:
image: typo3/core-testing-${DOCKER_PHP_IMAGE}:latest
- user: "${HOST_UID}"
+ user: ${HOST_UID}
volumes:
- ${ROOT_DIR}:${ROOT_DIR}
- - ${HOST_HOME}:${HOST_HOME}
- - /etc/passwd:/etc/passwd:ro
- - /etc/group:/etc/group:ro
tmpfs:
- ${ROOT_DIR}/.Build/Web/typo3temp/var/tests/functional-sqlite-dbs/:rw,noexec,nosuid,uid=${HOST_UID}
environment:
typo3DatabaseDriver: pdo_sqlite
- working_dir: ${ROOT_DIR}/.Build
+ working_dir: ${ROOT_DIR}
command: >
/bin/sh -c "
if [ ${SCRIPT_VERBOSE} -eq 1 ]; then
@@ -298,23 +138,21 @@ services:
php -v | grep '^PHP';
if [ ${PHP_XDEBUG_ON} -eq 0 ]; then
XDEBUG_MODE=\"off\" \
- bin/phpunit -c vendor/typo3/testing-framework/Resources/Core/Build/FunctionalTests.xml ${EXTRA_TEST_OPTIONS} --exclude-group not-sqlite ${TEST_FILE};
+ .Build/bin/phpunit -c etc/FunctionalTests.xml ${EXTRA_TEST_OPTIONS} --exclude-group not-sqlite ${TEST_FILE};
else
DOCKER_HOST=`route -n | awk '/^0.0.0.0/ { print $$2 }'`
XDEBUG_MODE=\"debug,develop\" \
XDEBUG_TRIGGER=\"foo\" \
XDEBUG_CONFIG=\"client_port=${PHP_XDEBUG_PORT} client_host=$${DOCKER_HOST}\" \
- bin/phpunit -c vendor/typo3/testing-framework/Resources/Core/Build/FunctionalTests.xml ${EXTRA_TEST_OPTIONS} --exclude-group not-sqlite ${TEST_FILE};
+ .Build/bin/phpunit -c etc/FunctionalTests.xml ${EXTRA_TEST_OPTIONS} --exclude-group not-sqlite ${TEST_FILE};
fi
"
lint:
image: typo3/core-testing-${DOCKER_PHP_IMAGE}:latest
- user: "${HOST_UID}"
+ user: ${HOST_UID}
volumes:
- ${ROOT_DIR}:${ROOT_DIR}
- - /etc/passwd:/etc/passwd:ro
- - /etc/group:/etc/group:ro
working_dir: ${ROOT_DIR}
command: >
/bin/sh -c "
@@ -325,48 +163,26 @@ services:
find . -name \\*.php ! -path "./.Build/\\*" -print0 | xargs -0 -n1 -P4 php -dxdebug.mode=off -l >/dev/null
"
- phpstan:
- image: typo3/core-testing-${DOCKER_PHP_IMAGE}:latest
- user: "${HOST_UID}"
- volumes:
- - ${ROOT_DIR}:${ROOT_DIR}
- - ${HOST_HOME}:${HOST_HOME}
- - /etc/passwd:/etc/passwd:ro
- - /etc/group:/etc/group:ro
- working_dir: ${ROOT_DIR}
- command: >
- /bin/sh -c "
- if [ ${SCRIPT_VERBOSE} -eq 1 ]; then
- set -x
- fi
- php -v | grep '^PHP';
- php -dxdebug.mode=off .Build/bin/phpstan analyze -c Build/phpstan.neon
- "
-
unit:
image: typo3/core-testing-${DOCKER_PHP_IMAGE}:latest
- user: "${HOST_UID}"
+ user: ${HOST_UID}
volumes:
- ${ROOT_DIR}:${ROOT_DIR}
- - ${HOST_HOME}:${HOST_HOME}
- - /etc/passwd:/etc/passwd:ro
- - /etc/group:/etc/group:ro
- working_dir: ${ROOT_DIR}/.Build
+ working_dir: ${ROOT_DIR}
command: >
/bin/sh -c "
if [ ${SCRIPT_VERBOSE} -eq 1 ]; then
set -x
fi
- php -v | grep '^PHP';
- ln -sfn ${ROOT_DIR} Web/typo3conf/ext/toujou_api
+ php -v | grep '^PHP'
if [ ${PHP_XDEBUG_ON} -eq 0 ]; then
XDEBUG_MODE=\"off\" \
- bin/phpunit -c vendor/typo3/testing-framework/Resources/Core/Build/UnitTests.xml ${EXTRA_TEST_OPTIONS} ${TEST_FILE};
+ .Build/bin/phpunit -c etc/UnitTests.xml ${EXTRA_TEST_OPTIONS} ${TEST_FILE};
else
DOCKER_HOST=`route -n | awk '/^0.0.0.0/ { print $$2 }'`
XDEBUG_MODE=\"debug,develop\" \
XDEBUG_TRIGGER=\"foo\" \
XDEBUG_CONFIG=\"client_port=${PHP_XDEBUG_PORT} client_host=$${DOCKER_HOST}\" \
- bin/phpunit -c vendor/typo3/testing-framework/Resources/Core/Build/UnitTests.xml ${EXTRA_TEST_OPTIONS} ${TEST_FILE};
+ .Build/bin/phpunit -c etc/UnitTests.xml ${EXTRA_TEST_OPTIONS} ${TEST_FILE};
fi
"
diff --git a/ext_tables.php b/ext_tables.php
index 816f85c..6cabc65 100644
--- a/ext_tables.php
+++ b/ext_tables.php
@@ -1,13 +1,14 @@