mirror of
https://github.com/FriendsOfTYPO3/tea.git
synced 2024-11-21 17:36:13 +01:00
Compare commits
67 commits
a7101db787
...
055a2f07bc
Author | SHA1 | Date | |
---|---|---|---|
|
055a2f07bc | ||
|
bf7ade8f98 | ||
|
f86b37df41 | ||
|
a1cf83ccbc | ||
|
a4ba103993 | ||
13b1116532 | |||
|
271bd24c4f | ||
|
1af328f27b | ||
|
e3544f4ade | ||
|
18b804f179 | ||
|
d1420a21b3 | ||
|
8200302d31 | ||
|
dd1f4832ff | ||
|
5ad2d2d8ad | ||
|
72d449b9bd | ||
|
277a167621 | ||
|
cc64515cd6 | ||
|
b42f6ed08e | ||
|
94487006b1 | ||
|
bc0af0d503 | ||
|
6b1c2d7670 | ||
|
9a8834998f | ||
|
7c4504600f | ||
|
f134e193cd | ||
|
9446d14b77 | ||
|
f93c998a92 | ||
|
c99b073bf6 | ||
|
82a1df5eda | ||
|
1a4fc18b6c | ||
|
13be4d6c37 | ||
|
9ad48b528f | ||
|
a3d72de1de | ||
|
d8323ffb2d | ||
|
ef1e39b20d | ||
|
b0a4a7c611 | ||
|
76eb2b22d5 | ||
|
adb2b6693e | ||
|
6e987aca7b | ||
|
8cbf6abd27 | ||
|
3c5c350937 | ||
|
1014f19fe5 | ||
|
026b13a52b | ||
|
fb7b22a559 | ||
|
fdace0a094 | ||
|
79601e8aa6 | ||
|
ead187c779 | ||
|
902097b7dd | ||
|
ac8c1248ea | ||
|
ab23166274 | ||
|
022cdadec9 | ||
|
534de16770 | ||
|
db7bb0c73e | ||
|
c5d9e1d08e | ||
|
a0fa00564c | ||
|
22598ef789 | ||
|
b56fd9f764 | ||
|
849087af95 | ||
|
2b8fc34df4 | ||
|
498dbdda3a | ||
|
0b20fd5fdb | ||
|
e5194cd536 | ||
|
da1353eeb2 | ||
|
c52530c9c3 | ||
|
21cede65f0 | ||
|
02bc8933b2 | ||
|
9005c3cb9a | ||
|
920b2ca957 |
68 changed files with 698 additions and 361 deletions
2
.gitattributes
vendored
2
.gitattributes
vendored
|
@ -8,7 +8,6 @@
|
||||||
/.npmrc export-ignore
|
/.npmrc export-ignore
|
||||||
/.nvmrc export-ignore
|
/.nvmrc export-ignore
|
||||||
/.php-cs-fixer.php export-ignore
|
/.php-cs-fixer.php export-ignore
|
||||||
/.phpstorm.meta.php export-ignore
|
|
||||||
/.prettierrc.js export-ignore
|
/.prettierrc.js export-ignore
|
||||||
/Build/ export-ignore
|
/Build/ export-ignore
|
||||||
/Configuration/FunctionalTests.xml export-ignore
|
/Configuration/FunctionalTests.xml export-ignore
|
||||||
|
@ -19,7 +18,6 @@
|
||||||
/package-lock.json export-ignore
|
/package-lock.json export-ignore
|
||||||
/package.json export-ignore
|
/package.json export-ignore
|
||||||
/phive.xml export-ignore
|
/phive.xml export-ignore
|
||||||
/phpcs.xml export-ignore
|
|
||||||
/phpstan-baseline.neon export-ignore
|
/phpstan-baseline.neon export-ignore
|
||||||
/phpstan.neon export-ignore
|
/phpstan.neon export-ignore
|
||||||
/rector.php export-ignore
|
/rector.php export-ignore
|
||||||
|
|
17
.github/ISSUE_TEMPLATE/feature.md
vendored
Normal file
17
.github/ISSUE_TEMPLATE/feature.md
vendored
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
---
|
||||||
|
name: Feature
|
||||||
|
about: If you want a new feature
|
||||||
|
title: "Feature: Please add a speaking title"
|
||||||
|
labels: 'feature'
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Goal
|
||||||
|
What would you like to achieve with this feature? Maybe in form of a User Story.
|
||||||
|
|
||||||
|
## Acceptance Criteria
|
||||||
|
- [ ]
|
||||||
|
|
||||||
|
## Additional Information
|
||||||
|
Anything else that would be helpful to know to implement this feature.
|
17
.github/ISSUE_TEMPLATE/task.md
vendored
Normal file
17
.github/ISSUE_TEMPLATE/task.md
vendored
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
---
|
||||||
|
name: Task
|
||||||
|
about: If you want a new task
|
||||||
|
title: "Task: Please add a speaking title"
|
||||||
|
labels: 'task'
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Goal
|
||||||
|
What would you like to achieve with this task? Maybe in form of a User Story.
|
||||||
|
|
||||||
|
## Acceptance Criteria
|
||||||
|
- [ ]
|
||||||
|
|
||||||
|
## Additional Information
|
||||||
|
Anything else that would be helpful to know to complete this task.
|
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
|
@ -83,6 +83,7 @@ jobs:
|
||||||
- "json:lint"
|
- "json:lint"
|
||||||
- "php:cs-fixer"
|
- "php:cs-fixer"
|
||||||
- "php:mess"
|
- "php:mess"
|
||||||
|
- "php:rector"
|
||||||
- "php:sniff"
|
- "php:sniff"
|
||||||
- "php:stan"
|
- "php:stan"
|
||||||
- "typoscript:lint"
|
- "typoscript:lint"
|
||||||
|
@ -326,6 +327,7 @@ jobs:
|
||||||
documentation:
|
documentation:
|
||||||
name: Documentation
|
name: Documentation
|
||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
|
timeout-minutes: 2
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
18
.github/workflows/codecoverage.yml
vendored
18
.github/workflows/codecoverage.yml
vendored
|
@ -29,8 +29,7 @@ jobs:
|
||||||
ini-file: development
|
ini-file: development
|
||||||
tools: composer:v2, phive
|
tools: composer:v2, phive
|
||||||
extensions: mysqli
|
extensions: mysqli
|
||||||
coverage: pcov
|
coverage: xdebug
|
||||||
ini-values: pcov.directory=Classes
|
|
||||||
- name: "Install development tools"
|
- name: "Install development tools"
|
||||||
run: phive --no-progress install --trust-gpg-keys D8406D0D82947747293778314AA394086372C20A
|
run: phive --no-progress install --trust-gpg-keys D8406D0D82947747293778314AA394086372C20A
|
||||||
- name: "Show Composer version"
|
- name: "Show Composer version"
|
||||||
|
@ -64,7 +63,7 @@ jobs:
|
||||||
- name: "Run unit tests with coverage"
|
- name: "Run unit tests with coverage"
|
||||||
run: composer ci:coverage:unit
|
run: composer ci:coverage:unit
|
||||||
- name: "Show generated coverage files"
|
- name: "Show generated coverage files"
|
||||||
run: "ls -lahR .Build/coverage/"
|
run: "ls -lahR build/coverage/"
|
||||||
- name: "Run functional tests with coverage"
|
- name: "Run functional tests with coverage"
|
||||||
run: |
|
run: |
|
||||||
export typo3DatabaseName="$DB_DATABASE";
|
export typo3DatabaseName="$DB_DATABASE";
|
||||||
|
@ -73,15 +72,18 @@ jobs:
|
||||||
export typo3DatabasePassword="$DB_PASSWORD";
|
export typo3DatabasePassword="$DB_PASSWORD";
|
||||||
composer ci:coverage:functional
|
composer ci:coverage:functional
|
||||||
- name: "Show generated coverage files"
|
- name: "Show generated coverage files"
|
||||||
run: "ls -lahR .Build/coverage/"
|
run: "ls -lahR build/coverage/"
|
||||||
- name: "Merge coverage results"
|
- name: "Merge coverage results"
|
||||||
run: composer ci:coverage:merge
|
run: composer ci:coverage:merge
|
||||||
- name: "Show merged coverage files"
|
- name: "Show combined coverage files"
|
||||||
run: "ls -lahR ./.Build/logs/"
|
run: "ls -lahR build/logs/"
|
||||||
- name: "Upload coverage results to Coveralls"
|
- name: "Upload coverage results to Coveralls"
|
||||||
|
uses: coverallsapp/github-action@v2
|
||||||
env:
|
env:
|
||||||
COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
run: ./.Build/bin/php-coveralls --coverage_clover=./.Build/logs/clover.xml --json_path=./.Build/logs/coveralls-upload.json -v
|
# Note: This is the only path that the Coveralls GitHub Action supports.
|
||||||
|
# So we cannot use something like .Build/coverage/clover.xml here.
|
||||||
|
file: build/logs/clover.xml
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
|
|
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -5,7 +5,7 @@
|
||||||
/.php-cs-fixer.cache
|
/.php-cs-fixer.cache
|
||||||
/.phpunit.result.cache
|
/.phpunit.result.cache
|
||||||
/Documentation-GENERATED-temp/
|
/Documentation-GENERATED-temp/
|
||||||
/clover.xml
|
/build
|
||||||
/composer.lock
|
/composer.lock
|
||||||
/generate-documentation.sh
|
/generate-documentation.sh
|
||||||
/nbproject
|
/nbproject
|
||||||
|
|
|
@ -7,8 +7,9 @@ stages:
|
||||||
- test
|
- test
|
||||||
|
|
||||||
include:
|
include:
|
||||||
- '/.gitlab/pipeline/jobs/.default.yml'
|
- '/.gitlab/pipeline/jobs/.composer-update.yml'
|
||||||
- '/.gitlab/pipeline/jobs/.default-frontend.yml'
|
- '/.gitlab/pipeline/jobs/.default-frontend.yml'
|
||||||
|
- '/.gitlab/pipeline/jobs/.default.yml'
|
||||||
- '/.gitlab/pipeline/jobs/.variables.yml'
|
- '/.gitlab/pipeline/jobs/.variables.yml'
|
||||||
- '/.gitlab/pipeline/jobs/build-composer-dependencies.yml'
|
- '/.gitlab/pipeline/jobs/build-composer-dependencies.yml'
|
||||||
- '/.gitlab/pipeline/jobs/composer-normalize.yml'
|
- '/.gitlab/pipeline/jobs/composer-normalize.yml'
|
||||||
|
@ -19,21 +20,22 @@ include:
|
||||||
- '/.gitlab/pipeline/jobs/func-php8.0-v11-lowest.yml'
|
- '/.gitlab/pipeline/jobs/func-php8.0-v11-lowest.yml'
|
||||||
- '/.gitlab/pipeline/jobs/func-php8.1-v11-highest.yml'
|
- '/.gitlab/pipeline/jobs/func-php8.1-v11-highest.yml'
|
||||||
- '/.gitlab/pipeline/jobs/func-php8.1-v11-lowest.yml'
|
- '/.gitlab/pipeline/jobs/func-php8.1-v11-lowest.yml'
|
||||||
- '/.gitlab/pipeline/jobs/func-php8.2-v11-highest.yml'
|
|
||||||
- '/.gitlab/pipeline/jobs/func-php8.2-v11-lowest.yml'
|
|
||||||
- '/.gitlab/pipeline/jobs/func-php8.1-v12-highest.yml'
|
- '/.gitlab/pipeline/jobs/func-php8.1-v12-highest.yml'
|
||||||
- '/.gitlab/pipeline/jobs/func-php8.1-v12-lowest.yml'
|
- '/.gitlab/pipeline/jobs/func-php8.1-v12-lowest.yml'
|
||||||
|
- '/.gitlab/pipeline/jobs/func-php8.2-v11-highest.yml'
|
||||||
|
- '/.gitlab/pipeline/jobs/func-php8.2-v11-lowest.yml'
|
||||||
- '/.gitlab/pipeline/jobs/func-php8.2-v12-highest.yml'
|
- '/.gitlab/pipeline/jobs/func-php8.2-v12-highest.yml'
|
||||||
- '/.gitlab/pipeline/jobs/func-php8.2-v12-lowest.yml'
|
- '/.gitlab/pipeline/jobs/func-php8.2-v12-lowest.yml'
|
||||||
- '/.gitlab/pipeline/jobs/javascript-lint.yml'
|
- '/.gitlab/pipeline/jobs/javascript-lint.yml'
|
||||||
- '/.gitlab/pipeline/jobs/json-lint.yml'
|
- '/.gitlab/pipeline/jobs/json-lint.yml'
|
||||||
|
- '/.gitlab/pipeline/jobs/php-cs-fixer.yml'
|
||||||
- '/.gitlab/pipeline/jobs/php-lint-php7.4.yml'
|
- '/.gitlab/pipeline/jobs/php-lint-php7.4.yml'
|
||||||
- '/.gitlab/pipeline/jobs/php-lint-php8.0.yml'
|
- '/.gitlab/pipeline/jobs/php-lint-php8.0.yml'
|
||||||
- '/.gitlab/pipeline/jobs/php-lint-php8.1.yml'
|
- '/.gitlab/pipeline/jobs/php-lint-php8.1.yml'
|
||||||
- '/.gitlab/pipeline/jobs/php-lint-php8.2.yml'
|
- '/.gitlab/pipeline/jobs/php-lint-php8.2.yml'
|
||||||
- '/.gitlab/pipeline/jobs/php-lint-php8.3.yml'
|
- '/.gitlab/pipeline/jobs/php-lint-php8.3.yml'
|
||||||
- '/.gitlab/pipeline/jobs/phpcs.yml'
|
- '/.gitlab/pipeline/jobs/phpcs.yml'
|
||||||
- '/.gitlab/pipeline/jobs/php-cs-fixer.yml'
|
- '/.gitlab/pipeline/jobs/rector.yml'
|
||||||
- '/.gitlab/pipeline/jobs/typoscript-lint.yml'
|
- '/.gitlab/pipeline/jobs/typoscript-lint.yml'
|
||||||
- '/.gitlab/pipeline/jobs/unit-php7.4-v11-highest.yml'
|
- '/.gitlab/pipeline/jobs/unit-php7.4-v11-highest.yml'
|
||||||
- '/.gitlab/pipeline/jobs/unit-php7.4-v11-lowest.yml'
|
- '/.gitlab/pipeline/jobs/unit-php7.4-v11-lowest.yml'
|
||||||
|
@ -41,14 +43,14 @@ include:
|
||||||
- '/.gitlab/pipeline/jobs/unit-php8.0-v11-lowest.yml'
|
- '/.gitlab/pipeline/jobs/unit-php8.0-v11-lowest.yml'
|
||||||
- '/.gitlab/pipeline/jobs/unit-php8.1-v11-highest.yml'
|
- '/.gitlab/pipeline/jobs/unit-php8.1-v11-highest.yml'
|
||||||
- '/.gitlab/pipeline/jobs/unit-php8.1-v11-lowest.yml'
|
- '/.gitlab/pipeline/jobs/unit-php8.1-v11-lowest.yml'
|
||||||
- '/.gitlab/pipeline/jobs/unit-php8.2-v11-highest.yml'
|
|
||||||
- '/.gitlab/pipeline/jobs/unit-php8.2-v11-lowest.yml'
|
|
||||||
- '/.gitlab/pipeline/jobs/unit-php8.3-v11-highest.yml'
|
|
||||||
- '/.gitlab/pipeline/jobs/unit-php8.3-v11-lowest.yml'
|
|
||||||
- '/.gitlab/pipeline/jobs/unit-php8.1-v12-highest.yml'
|
- '/.gitlab/pipeline/jobs/unit-php8.1-v12-highest.yml'
|
||||||
- '/.gitlab/pipeline/jobs/unit-php8.1-v12-lowest.yml'
|
- '/.gitlab/pipeline/jobs/unit-php8.1-v12-lowest.yml'
|
||||||
|
- '/.gitlab/pipeline/jobs/unit-php8.2-v11-highest.yml'
|
||||||
|
- '/.gitlab/pipeline/jobs/unit-php8.2-v11-lowest.yml'
|
||||||
- '/.gitlab/pipeline/jobs/unit-php8.2-v12-highest.yml'
|
- '/.gitlab/pipeline/jobs/unit-php8.2-v12-highest.yml'
|
||||||
- '/.gitlab/pipeline/jobs/unit-php8.2-v12-lowest.yml'
|
- '/.gitlab/pipeline/jobs/unit-php8.2-v12-lowest.yml'
|
||||||
|
- '/.gitlab/pipeline/jobs/unit-php8.3-v11-highest.yml'
|
||||||
|
- '/.gitlab/pipeline/jobs/unit-php8.3-v11-lowest.yml'
|
||||||
- '/.gitlab/pipeline/jobs/unit-php8.3-v12-highest.yml'
|
- '/.gitlab/pipeline/jobs/unit-php8.3-v12-highest.yml'
|
||||||
- '/.gitlab/pipeline/jobs/unit-php8.3-v12-lowest.yml'
|
- '/.gitlab/pipeline/jobs/unit-php8.3-v12-lowest.yml'
|
||||||
- '/.gitlab/pipeline/jobs/xliff-lint.yml'
|
- '/.gitlab/pipeline/jobs/xliff-lint.yml'
|
||||||
|
|
187
.gitlab/pipeline/ci/php.ini
Normal file
187
.gitlab/pipeline/ci/php.ini
Normal file
|
@ -0,0 +1,187 @@
|
||||||
|
[PHP]
|
||||||
|
engine = On
|
||||||
|
short_open_tag = Off
|
||||||
|
precision = 14
|
||||||
|
output_buffering = 4096
|
||||||
|
zlib.output_compression = Off
|
||||||
|
implicit_flush = Off
|
||||||
|
unserialize_callback_func =
|
||||||
|
serialize_precision = -1
|
||||||
|
disable_functions =
|
||||||
|
disable_classes =
|
||||||
|
zend.enable_gc = On
|
||||||
|
expose_php = Off
|
||||||
|
; Resource Limits ;
|
||||||
|
max_execution_time = 600
|
||||||
|
request_terminate_timeout = 0
|
||||||
|
max_input_time = -1
|
||||||
|
;max_input_nesting_level = 64
|
||||||
|
max_input_vars = 5000
|
||||||
|
memory_limit = -1
|
||||||
|
; Error handling and logging ;
|
||||||
|
error_reporting = E_ALL
|
||||||
|
display_errors = On
|
||||||
|
display_startup_errors = On
|
||||||
|
log_errors = On
|
||||||
|
log_errors_max_len = 1024
|
||||||
|
ignore_repeated_errors = Off
|
||||||
|
ignore_repeated_source = Off
|
||||||
|
report_memleaks = On
|
||||||
|
;xmlrpc_errors = 0
|
||||||
|
;xmlrpc_error_number = 0
|
||||||
|
html_errors = On
|
||||||
|
; Data Handling ;
|
||||||
|
variables_order = "EGPCS"
|
||||||
|
request_order = "GP"
|
||||||
|
register_argc_argv = Off
|
||||||
|
auto_globals_jit = On
|
||||||
|
post_max_size = 100M
|
||||||
|
auto_prepend_file =
|
||||||
|
auto_append_file =
|
||||||
|
default_mimetype = "text/html"
|
||||||
|
default_charset = "UTF-8"
|
||||||
|
; Paths and Directories ;
|
||||||
|
doc_root =
|
||||||
|
user_dir =
|
||||||
|
enable_dl = Off
|
||||||
|
cgi.fix_pathinfo=0
|
||||||
|
; File Uploads ;
|
||||||
|
file_uploads = On
|
||||||
|
upload_max_filesize = 100M
|
||||||
|
max_file_uploads = 20
|
||||||
|
; Fopen wrappers ;
|
||||||
|
allow_url_fopen = On
|
||||||
|
allow_url_include = Off
|
||||||
|
default_socket_timeout = 60
|
||||||
|
;auto_detect_line_endings = Off
|
||||||
|
; Dynamic Extensions ;
|
||||||
|
|
||||||
|
[CLI Server]
|
||||||
|
cli_server.color = On
|
||||||
|
|
||||||
|
[Date]
|
||||||
|
date.timezone = UTC
|
||||||
|
|
||||||
|
[Pdo_mysql]
|
||||||
|
pdo_mysql.cache_size = 2000
|
||||||
|
pdo_mysql.default_socket=
|
||||||
|
|
||||||
|
[SQL]
|
||||||
|
sql.safe_mode = Off
|
||||||
|
|
||||||
|
[ODBC]
|
||||||
|
odbc.allow_persistent = On
|
||||||
|
odbc.check_persistent = On
|
||||||
|
odbc.max_persistent = -1
|
||||||
|
odbc.max_links = -1
|
||||||
|
odbc.defaultlrl = 4096
|
||||||
|
odbc.defaultbinmode = 1
|
||||||
|
|
||||||
|
[Interbase]
|
||||||
|
ibase.allow_persistent = 1
|
||||||
|
ibase.max_persistent = -1
|
||||||
|
ibase.max_links = -1
|
||||||
|
ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
|
||||||
|
ibase.dateformat = "%Y-%m-%d"
|
||||||
|
ibase.timeformat = "%H:%M:%S"
|
||||||
|
|
||||||
|
[MySQLi]
|
||||||
|
mysqli.max_persistent = -1
|
||||||
|
mysqli.allow_persistent = On
|
||||||
|
mysqli.max_links = -1
|
||||||
|
mysqli.cache_size = 2000
|
||||||
|
mysqli.default_port = 3306
|
||||||
|
mysqli.default_socket =
|
||||||
|
mysqli.default_host =
|
||||||
|
mysqli.default_user =
|
||||||
|
mysqli.default_pw =
|
||||||
|
mysqli.reconnect = Off
|
||||||
|
|
||||||
|
[mysqlnd]
|
||||||
|
mysqlnd.collect_statistics = On
|
||||||
|
mysqlnd.collect_memory_statistics = Off
|
||||||
|
|
||||||
|
[PostgreSQL]
|
||||||
|
pgsql.allow_persistent = On
|
||||||
|
pgsql.auto_reset_persistent = Off
|
||||||
|
pgsql.max_persistent = -1
|
||||||
|
pgsql.max_links = -1
|
||||||
|
pgsql.ignore_notice = 0
|
||||||
|
pgsql.log_notice = 0
|
||||||
|
|
||||||
|
[bcmath]
|
||||||
|
bcmath.scale = 0
|
||||||
|
|
||||||
|
[Session]
|
||||||
|
session.save_handler = files
|
||||||
|
session.use_strict_mode = 0
|
||||||
|
session.use_cookies = 1
|
||||||
|
session.use_only_cookies = 1
|
||||||
|
session.name = PHPSESSID
|
||||||
|
session.auto_start = 0
|
||||||
|
session.cookie_lifetime = 0
|
||||||
|
session.cookie_path = /
|
||||||
|
session.cookie_domain =
|
||||||
|
session.cookie_httponly =
|
||||||
|
session.serialize_handler = php
|
||||||
|
session.gc_probability = 0
|
||||||
|
session.gc_divisor = 1000
|
||||||
|
session.gc_maxlifetime = 1440
|
||||||
|
session.referer_check =
|
||||||
|
session.cache_limiter = nocache
|
||||||
|
session.cache_expire = 180
|
||||||
|
session.use_trans_sid = 0
|
||||||
|
session.hash_function = 0
|
||||||
|
session.hash_bits_per_character = 5
|
||||||
|
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
|
||||||
|
|
||||||
|
[Assertion]
|
||||||
|
zend.assertions = -1
|
||||||
|
|
||||||
|
[Tidy]
|
||||||
|
tidy.clean_output = Off
|
||||||
|
|
||||||
|
[soap]
|
||||||
|
soap.wsdl_cache_enabled=1
|
||||||
|
soap.wsdl_cache_dir="/tmp"
|
||||||
|
soap.wsdl_cache_ttl=86400
|
||||||
|
soap.wsdl_cache_limit = 5
|
||||||
|
|
||||||
|
|
||||||
|
[ldap]
|
||||||
|
ldap.max_links = -1
|
||||||
|
|
||||||
|
[opcache]
|
||||||
|
opcache.enable=1
|
||||||
|
opcache.enable_cli=1
|
||||||
|
opcache.memory_consumption=500
|
||||||
|
opcache.interned_strings_buffer=16
|
||||||
|
opcache.max_accelerated_files=1000000
|
||||||
|
;opcache.max_wasted_percentage=5
|
||||||
|
;opcache.use_cwd=1
|
||||||
|
opcache.validate_timestamps=1
|
||||||
|
opcache.revalidate_freq=0
|
||||||
|
;opcache.revalidate_path=0
|
||||||
|
;opcache.save_comments=1
|
||||||
|
opcache.fast_shutdown=1
|
||||||
|
;opcache.enable_file_override=0
|
||||||
|
;opcache.optimization_level=0xffffffff
|
||||||
|
;opcache.inherited_hack=1
|
||||||
|
;opcache.dups_fix=0
|
||||||
|
;opcache.blacklist_filename=
|
||||||
|
;opcache.max_file_size=0
|
||||||
|
;opcache.consistency_checks=0
|
||||||
|
;opcache.force_restart_timeout=180
|
||||||
|
;opcache.error_log=
|
||||||
|
;opcache.log_verbosity_level=1
|
||||||
|
;opcache.preferred_memory_model=
|
||||||
|
;opcache.protect_memory=0
|
||||||
|
;opcache.restrict_api=
|
||||||
|
;opcache.mmap_base=
|
||||||
|
;opcache.file_cache=
|
||||||
|
;opcache.file_cache_only=0
|
||||||
|
;opcache.file_cache_consistency_checks=1
|
||||||
|
;opcache.file_cache_fallback=1
|
||||||
|
;opcache.huge_code_pages=1
|
||||||
|
;opcache.validate_permission=0
|
||||||
|
;opcache.validate_root=0
|
3
.gitlab/pipeline/jobs/.composer-update.yml
Normal file
3
.gitlab/pipeline/jobs/.composer-update.yml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
.composer-update:
|
||||||
|
before_script:
|
||||||
|
- composer update --no-progress
|
|
@ -1,4 +1,8 @@
|
||||||
.default:
|
.default:
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php83:latest
|
image: ghcr.io/typo3/core-testing-php83:latest
|
||||||
before_script:
|
before_script:
|
||||||
- bash .gitlab/build/docker_install.sh > /dev/null
|
- bash .gitlab/build/docker_install.sh > /dev/null
|
||||||
|
variables:
|
||||||
|
PHP_INI_SCAN_DIR: "/etc/php"
|
||||||
|
script:
|
||||||
|
- cp $CI_PROJECT_DIR/.gitlab/pipeline/ci/php.ini /usr/local/etc/php/php.ini; # copy php.ini into image
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
func-php7.4-v11-highest:
|
func-php7.4-v11-highest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php74:latest
|
image: ghcr.io/typo3/core-testing-php74:latest
|
||||||
services:
|
services:
|
||||||
- mariadb:10
|
- mariadb:10
|
||||||
stage: test
|
stage: test
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
func-php7.4-v11-lowest:
|
func-php7.4-v11-lowest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php74:latest
|
image: ghcr.io/typo3/core-testing-php74:latest
|
||||||
services:
|
services:
|
||||||
- mariadb:10
|
- mariadb:10
|
||||||
stage: test
|
stage: test
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
func-php8.0-v11-highest:
|
func-php8.0-v11-highest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php80:latest
|
image: ghcr.io/typo3/core-testing-php80:latest
|
||||||
services:
|
services:
|
||||||
- mariadb:10
|
- mariadb:10
|
||||||
stage: test
|
stage: test
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
func-php8.0-v11-lowest:
|
func-php8.0-v11-lowest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php80:latest
|
image: ghcr.io/typo3/core-testing-php80:latest
|
||||||
services:
|
services:
|
||||||
- mariadb:10
|
- mariadb:10
|
||||||
stage: test
|
stage: test
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
func-php8.1-v11-highest:
|
func-php8.1-v11-highest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php81:latest
|
image: ghcr.io/typo3/core-testing-php81:latest
|
||||||
services:
|
services:
|
||||||
- mariadb:10
|
- mariadb:10
|
||||||
stage: test
|
stage: test
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
func-php8.1-v11-lowest:
|
func-php8.1-v11-lowest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php81:latest
|
image: ghcr.io/typo3/core-testing-php81:latest
|
||||||
services:
|
services:
|
||||||
- mariadb:10
|
- mariadb:10
|
||||||
stage: test
|
stage: test
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
func-php8.1-v11-highest:
|
func-php8.1-v11-highest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php81:latest
|
image: ghcr.io/typo3/core-testing-php81:latest
|
||||||
services:
|
services:
|
||||||
- mariadb:10
|
- mariadb:10
|
||||||
stage: test
|
stage: test
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
func-php8.1-v11-lowest:
|
func-php8.1-v11-lowest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php81:latest
|
image: ghcr.io/typo3/core-testing-php81:latest
|
||||||
services:
|
services:
|
||||||
- mariadb:10
|
- mariadb:10
|
||||||
stage: test
|
stage: test
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
func-php8.2-v11-highest:
|
func-php8.2-v11-highest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php82:latest
|
image: ghcr.io/typo3/core-testing-php82:latest
|
||||||
services:
|
services:
|
||||||
- mariadb:10
|
- mariadb:10
|
||||||
stage: test
|
stage: test
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
func-php8.2-v11-lowest:
|
func-php8.2-v11-lowest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php82:latest
|
image: ghcr.io/typo3/core-testing-php82:latest
|
||||||
services:
|
services:
|
||||||
- mariadb:10
|
- mariadb:10
|
||||||
stage: test
|
stage: test
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
func-php8.2-v11-highest:
|
func-php8.2-v12-highest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php82:latest
|
image: ghcr.io/typo3/core-testing-php82:latest
|
||||||
services:
|
services:
|
||||||
- mariadb:10
|
- mariadb:10
|
||||||
stage: test
|
stage: test
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
func-php8.2-v12-lowest:
|
func-php8.2-v12-lowest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php82:latest
|
image: ghcr.io/typo3/core-testing-php82:latest
|
||||||
services:
|
services:
|
||||||
- mariadb:10
|
- mariadb:10
|
||||||
stage: test
|
stage: test
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
func-php8.3-v11-highest:
|
func-php8.3-v11-highest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php83:latest
|
image: ghcr.io/typo3/core-testing-php83:latest
|
||||||
services:
|
services:
|
||||||
- mariadb:10
|
- mariadb:10
|
||||||
stage: test
|
stage: test
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
func-php8.3-v11-lowest:
|
func-php8.3-v11-lowest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php83:latest
|
image: ghcr.io/typo3/core-testing-php83:latest
|
||||||
services:
|
services:
|
||||||
- mariadb:10
|
- mariadb:10
|
||||||
stage: test
|
stage: test
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
func-php8.3-v11-highest:
|
func-php8.3-v11-highest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php83:latest
|
image: ghcr.io/typo3/core-testing-php83:latest
|
||||||
services:
|
services:
|
||||||
- mariadb:10
|
- mariadb:10
|
||||||
stage: test
|
stage: test
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
func-php8.3-v12-lowest:
|
func-php8.3-v12-lowest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php83:latest
|
image: ghcr.io/typo3/core-testing-php83:latest
|
||||||
services:
|
services:
|
||||||
- mariadb:10
|
- mariadb:10
|
||||||
stage: test
|
stage: test
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
php-lint-php7.4:
|
php-lint-php7.4:
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php74:latest
|
extends: .composer-update
|
||||||
|
image: ghcr.io/typo3/core-testing-php74:latest
|
||||||
stage: lint
|
stage: lint
|
||||||
needs: [ ]
|
needs: [ ]
|
||||||
script:
|
script:
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
php-lint-php8.0:
|
php-lint-php8.0:
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php80:latest
|
extends: .composer-update
|
||||||
|
image: ghcr.io/typo3/core-testing-php80:latest
|
||||||
stage: lint
|
stage: lint
|
||||||
needs: [ ]
|
needs: [ ]
|
||||||
script:
|
script:
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
php-lint-php8.1:
|
php-lint-php8.1:
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php81:latest
|
extends: .composer-update
|
||||||
|
image: ghcr.io/typo3/core-testing-php81:latest
|
||||||
stage: lint
|
stage: lint
|
||||||
needs: [ ]
|
needs: [ ]
|
||||||
script:
|
script:
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
php-lint-php8.2:
|
php-lint-php8.2:
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php82:latest
|
extends: .composer-update
|
||||||
|
image: ghcr.io/typo3/core-testing-php82:latest
|
||||||
stage: lint
|
stage: lint
|
||||||
needs: [ ]
|
needs: [ ]
|
||||||
script:
|
script:
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
php-lint-php8.3:
|
php-lint-php8.3:
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php83:latest
|
extends: .composer-update
|
||||||
|
image: ghcr.io/typo3/core-testing-php83:latest
|
||||||
stage: lint
|
stage: lint
|
||||||
needs: [ ]
|
needs: [ ]
|
||||||
script:
|
script:
|
||||||
|
|
11
.gitlab/pipeline/jobs/rector.yml
Normal file
11
.gitlab/pipeline/jobs/rector.yml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
rector:
|
||||||
|
extends: .default
|
||||||
|
stage: codestyle
|
||||||
|
needs:
|
||||||
|
- build-composer-dependencies
|
||||||
|
- php-lint-php7.4
|
||||||
|
- php-lint-php8.0
|
||||||
|
- php-lint-php8.1
|
||||||
|
- php-lint-php8.2
|
||||||
|
script:
|
||||||
|
- composer ci:php:rector
|
|
@ -1,6 +1,6 @@
|
||||||
unit-php7.4-v11-highest:
|
unit-php7.4-v11-highest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php74:latest
|
image: ghcr.io/typo3/core-testing-php74:latest
|
||||||
stage: test
|
stage: test
|
||||||
needs:
|
needs:
|
||||||
- build-composer-dependencies
|
- build-composer-dependencies
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit-php7.4-v11-lowest:
|
unit-php7.4-v11-lowest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php74:latest
|
image: ghcr.io/typo3/core-testing-php74:latest
|
||||||
stage: test
|
stage: test
|
||||||
needs:
|
needs:
|
||||||
- build-composer-dependencies
|
- build-composer-dependencies
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit-php8.0-v11-highest:
|
unit-php8.0-v11-highest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php80:latest
|
image: ghcr.io/typo3/core-testing-php80:latest
|
||||||
stage: test
|
stage: test
|
||||||
needs:
|
needs:
|
||||||
- build-composer-dependencies
|
- build-composer-dependencies
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit-php8.0-v11-lowest:
|
unit-php8.0-v11-lowest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php80:latest
|
image: ghcr.io/typo3/core-testing-php80:latest
|
||||||
stage: test
|
stage: test
|
||||||
needs:
|
needs:
|
||||||
- build-composer-dependencies
|
- build-composer-dependencies
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit-php8.1-v11-highest:
|
unit-php8.1-v11-highest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php81:latest
|
image: ghcr.io/typo3/core-testing-php81:latest
|
||||||
stage: test
|
stage: test
|
||||||
needs:
|
needs:
|
||||||
- build-composer-dependencies
|
- build-composer-dependencies
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit-php8.1-v11-lowest:
|
unit-php8.1-v11-lowest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php81:latest
|
image: ghcr.io/typo3/core-testing-php81:latest
|
||||||
stage: test
|
stage: test
|
||||||
needs:
|
needs:
|
||||||
- build-composer-dependencies
|
- build-composer-dependencies
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit-php8.1-v12-highest:
|
unit-php8.1-v12-highest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php81:latest
|
image: ghcr.io/typo3/core-testing-php81:latest
|
||||||
stage: test
|
stage: test
|
||||||
needs:
|
needs:
|
||||||
- build-composer-dependencies
|
- build-composer-dependencies
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit-php8.1-v12-lowest:
|
unit-php8.1-v12-lowest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php81:latest
|
image: ghcr.io/typo3/core-testing-php81:latest
|
||||||
stage: test
|
stage: test
|
||||||
needs:
|
needs:
|
||||||
- build-composer-dependencies
|
- build-composer-dependencies
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit-php8.2-v11-highest:
|
unit-php8.2-v11-highest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php82:latest
|
image: ghcr.io/typo3/core-testing-php82:latest
|
||||||
stage: test
|
stage: test
|
||||||
needs:
|
needs:
|
||||||
- build-composer-dependencies
|
- build-composer-dependencies
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit-php8.2-v11-lowest:
|
unit-php8.2-v11-lowest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php82:latest
|
image: ghcr.io/typo3/core-testing-php82:latest
|
||||||
stage: test
|
stage: test
|
||||||
needs:
|
needs:
|
||||||
- build-composer-dependencies
|
- build-composer-dependencies
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit-php8.2-v12-highest:
|
unit-php8.2-v12-highest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php82:latest
|
image: ghcr.io/typo3/core-testing-php82:latest
|
||||||
stage: test
|
stage: test
|
||||||
needs:
|
needs:
|
||||||
- build-composer-dependencies
|
- build-composer-dependencies
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit-php8.2-v12-lowest:
|
unit-php8.2-v12-lowest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php82:latest
|
image: ghcr.io/typo3/core-testing-php82:latest
|
||||||
stage: test
|
stage: test
|
||||||
needs:
|
needs:
|
||||||
- build-composer-dependencies
|
- build-composer-dependencies
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit-php8.3-v11-highest:
|
unit-php8.3-v11-highest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php83:latest
|
image: ghcr.io/typo3/core-testing-php83:latest
|
||||||
stage: test
|
stage: test
|
||||||
needs:
|
needs:
|
||||||
- build-composer-dependencies
|
- build-composer-dependencies
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit-php8.3-v11-lowest:
|
unit-php8.3-v11-lowest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php83:latest
|
image: ghcr.io/typo3/core-testing-php83:latest
|
||||||
stage: test
|
stage: test
|
||||||
needs:
|
needs:
|
||||||
- build-composer-dependencies
|
- build-composer-dependencies
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit-php8.3-v12-highest:
|
unit-php8.3-v12-highest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php83:latest
|
image: ghcr.io/typo3/core-testing-php83:latest
|
||||||
stage: test
|
stage: test
|
||||||
needs:
|
needs:
|
||||||
- build-composer-dependencies
|
- build-composer-dependencies
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unit-php8.3-v12-lowest:
|
unit-php8.3-v12-lowest:
|
||||||
extends: .default
|
extends: .default
|
||||||
image: ghcr.io/sbuerk/demo-core-testing-php83:latest
|
image: ghcr.io/typo3/core-testing-php83:latest
|
||||||
stage: test
|
stage: test
|
||||||
needs:
|
needs:
|
||||||
- build-composer-dependencies
|
- build-composer-dependencies
|
||||||
|
|
|
@ -1,168 +0,0 @@
|
||||||
<?php
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @see https://www.jetbrains.com/help/phpstorm/ide-advanced-metadata.html
|
|
||||||
*/
|
|
||||||
namespace PHPSTORM_META {
|
|
||||||
|
|
||||||
override(\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(0), type(0));
|
|
||||||
|
|
||||||
// TYPO3 testing framework
|
|
||||||
// The accesible mock will be of type `self` as well as `MockObject` and `AccessibleObjectInterface`.
|
|
||||||
override(
|
|
||||||
\TYPO3\TestingFramework\Core\BaseTestCase::getAccessibleMock(0),
|
|
||||||
map(
|
|
||||||
[
|
|
||||||
'' => '@|\\PHPUnit\\Framework\\MockObject\\MockObject'
|
|
||||||
. '|\\TYPO3\\TestingFramework\\Core\\AccessibleObjectInterface',
|
|
||||||
]
|
|
||||||
)
|
|
||||||
);
|
|
||||||
override(
|
|
||||||
\TYPO3\TestingFramework\Core\BaseTestCase::getAccessibleMockForAbstractClass(0),
|
|
||||||
map(
|
|
||||||
[
|
|
||||||
'' => '@|\\PHPUnit\\Framework\\MockObject\\MockObject'
|
|
||||||
. '|\\TYPO3\TestingFramework\\Core\\AccessibleObjectInterface',
|
|
||||||
]
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
// Contexts
|
|
||||||
// @see https://docs.typo3.org/c/typo3/cms-core/master/en-us/Changelog/9.4/Feature-85389-ContextAPIForConsistentDataHandling.html
|
|
||||||
expectedArguments(
|
|
||||||
\TYPO3\CMS\Core\Context\Context::getAspect(),
|
|
||||||
0,
|
|
||||||
'date',
|
|
||||||
'visibility',
|
|
||||||
'backend.user',
|
|
||||||
'frontend.user',
|
|
||||||
'workspace',
|
|
||||||
'language',
|
|
||||||
'typoscript'
|
|
||||||
);
|
|
||||||
|
|
||||||
override(\TYPO3\CMS\Core\Context\Context::getAspect(), map([
|
|
||||||
'date' => \TYPO3\CMS\Core\Context\DateTimeAspect::class,
|
|
||||||
'visibility' => \TYPO3\CMS\Core\Context\VisibilityAspect::class,
|
|
||||||
'backend.user' => \TYPO3\CMS\Core\Context\UserAspect::class,
|
|
||||||
'frontend.user' => \TYPO3\CMS\Core\Context\UserAspect::class,
|
|
||||||
'workspace' => \TYPO3\CMS\Core\Context\WorkspaceAspect::class,
|
|
||||||
'language' => \TYPO3\CMS\Core\Context\LanguageAspect::class,
|
|
||||||
'typoscript' => \TYPO3\CMS\Core\Context\TypoScriptAspect::class,
|
|
||||||
]));
|
|
||||||
|
|
||||||
expectedArguments(
|
|
||||||
\TYPO3\CMS\Core\Context\DateTimeAspect::get(),
|
|
||||||
0,
|
|
||||||
'timestamp',
|
|
||||||
'iso',
|
|
||||||
'timezone',
|
|
||||||
'full',
|
|
||||||
'accessTime'
|
|
||||||
);
|
|
||||||
|
|
||||||
expectedArguments(
|
|
||||||
\TYPO3\CMS\Core\Context\VisibilityAspect::get(),
|
|
||||||
0,
|
|
||||||
'includeHiddenPages',
|
|
||||||
'includeHiddenContent',
|
|
||||||
'includeDeletedRecords'
|
|
||||||
);
|
|
||||||
|
|
||||||
expectedArguments(
|
|
||||||
\TYPO3\CMS\Core\Context\UserAspect::get(),
|
|
||||||
0,
|
|
||||||
'id',
|
|
||||||
'username',
|
|
||||||
'isLoggedIn',
|
|
||||||
'isAdmin',
|
|
||||||
'groupIds',
|
|
||||||
'groupNames'
|
|
||||||
);
|
|
||||||
|
|
||||||
expectedArguments(
|
|
||||||
\TYPO3\CMS\Core\Context\WorkspaceAspect::get(),
|
|
||||||
0,
|
|
||||||
'id',
|
|
||||||
'isLive',
|
|
||||||
'isOffline'
|
|
||||||
);
|
|
||||||
|
|
||||||
expectedArguments(
|
|
||||||
\TYPO3\CMS\Core\Context\LanguageAspect::get(),
|
|
||||||
0,
|
|
||||||
'id',
|
|
||||||
'contentId',
|
|
||||||
'fallbackChain',
|
|
||||||
'overlayType',
|
|
||||||
'legacyLanguageMode',
|
|
||||||
'legacyOverlayType'
|
|
||||||
);
|
|
||||||
|
|
||||||
expectedArguments(
|
|
||||||
\TYPO3\CMS\Core\Context\TypoScriptAspect::get(),
|
|
||||||
0,
|
|
||||||
'forcedTemplateParsing'
|
|
||||||
);
|
|
||||||
|
|
||||||
expectedArguments(
|
|
||||||
\Psr\Http\Message\ServerRequestInterface::getAttribute(),
|
|
||||||
0,
|
|
||||||
'backend.user',
|
|
||||||
'frontend.user',
|
|
||||||
'normalizedParams',
|
|
||||||
'site',
|
|
||||||
'language',
|
|
||||||
'routing',
|
|
||||||
'module',
|
|
||||||
'moduleData'
|
|
||||||
);
|
|
||||||
|
|
||||||
override(\Psr\Http\Message\ServerRequestInterface::getAttribute(), map([
|
|
||||||
'backend.user' => \TYPO3\CMS\Backend\FrontendBackendUserAuthentication::class,
|
|
||||||
'frontend.user' => \TYPO3\CMS\Frontend\Authentication\FrontendUserAuthentication::class,
|
|
||||||
'normalizedParams' => \TYPO3\CMS\Core\Http\NormalizedParams::class,
|
|
||||||
'site' => \TYPO3\CMS\Core\Site\Entity\SiteInterface::class,
|
|
||||||
'language' => \TYPO3\CMS\Core\Site\Entity\SiteLanguage::class,
|
|
||||||
'routing' => '\TYPO3\CMS\Core\Routing\SiteRouteResult|\TYPO3\CMS\Core\Routing\PageArguments',
|
|
||||||
'module' => \TYPO3\CMS\Backend\Module\ModuleInterface::class,
|
|
||||||
'moduleData' => \TYPO3\CMS\Backend\Module\ModuleData::class,
|
|
||||||
]));
|
|
||||||
|
|
||||||
expectedArguments(
|
|
||||||
\TYPO3\CMS\Core\Http\ServerRequest::getAttribute(),
|
|
||||||
0,
|
|
||||||
'backend.user',
|
|
||||||
'frontend.user',
|
|
||||||
'normalizedParams',
|
|
||||||
'site',
|
|
||||||
'language',
|
|
||||||
'routing',
|
|
||||||
'module',
|
|
||||||
'moduleData'
|
|
||||||
);
|
|
||||||
|
|
||||||
override(\TYPO3\CMS\Core\Http\ServerRequest::getAttribute(), map([
|
|
||||||
'backend.user' => \TYPO3\CMS\Backend\FrontendBackendUserAuthentication::class,
|
|
||||||
'frontend.user' => \TYPO3\CMS\Frontend\Authentication\FrontendUserAuthentication::class,
|
|
||||||
'normalizedParams' => \TYPO3\CMS\Core\Http\NormalizedParams::class,
|
|
||||||
'site' => \TYPO3\CMS\Core\Site\Entity\SiteInterface::class,
|
|
||||||
'language' => \TYPO3\CMS\Core\Site\Entity\SiteLanguage::class,
|
|
||||||
'routing' => '\TYPO3\CMS\Core\Routing\SiteRouteResult|\TYPO3\CMS\Core\Routing\PageArguments',
|
|
||||||
'module' => \TYPO3\CMS\Backend\Module\ModuleInterface::class,
|
|
||||||
'moduleData' => \TYPO3\CMS\Backend\Module\ModuleData::class,
|
|
||||||
]));
|
|
||||||
|
|
||||||
override(\TYPO3\CMS\Core\Routing\SiteMatcher::matchRequest(), type(
|
|
||||||
\TYPO3\CMS\Core\Routing\SiteRouteResult::class,
|
|
||||||
\TYPO3\CMS\Core\Routing\RouteResultInterface::class
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
override(\TYPO3\CMS\Core\Routing\PageRouter::matchRequest(), type(
|
|
||||||
\TYPO3\CMS\Core\Routing\PageArguments::class,
|
|
||||||
\TYPO3\CMS\Core\Routing\RouteResultInterface::class
|
|
||||||
));
|
|
||||||
}
|
|
|
@ -9,6 +9,7 @@ This project adheres to [Semantic Versioning](https://semver.org/).
|
||||||
- Add support for PostgreSQL 16 (#1271)
|
- Add support for PostgreSQL 16 (#1271)
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
- Move php sniff configuration to Build dir (#1357)
|
||||||
- Move xliff configuration to Build xliff dir (#1356)
|
- Move xliff configuration to Build xliff dir (#1356)
|
||||||
- Move tests configuration to Build dir (#1352)
|
- Move tests configuration to Build dir (#1352)
|
||||||
- Stop storing development tool PHARs in the repository (#1277)
|
- Stop storing development tool PHARs in the repository (#1277)
|
||||||
|
|
86
Classes/Command/CreateTestDataCommand.php
Normal file
86
Classes/Command/CreateTestDataCommand.php
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace TTN\Tea\Command;
|
||||||
|
|
||||||
|
use Symfony\Component\Console\Command\Command;
|
||||||
|
use Symfony\Component\Console\Input\InputArgument;
|
||||||
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Input\InputOption;
|
||||||
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
use TYPO3\CMS\Core\Database\Connection;
|
||||||
|
use TYPO3\CMS\Core\Database\ConnectionPool;
|
||||||
|
use TYPO3\CMS\Core\Database\ReferenceIndex;
|
||||||
|
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Command to create test data for the tea extension.
|
||||||
|
*/
|
||||||
|
final class CreateTestDataCommand extends Command
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var list<array{title: non-empty-string, description: non-empty-string, sys_language_uid: int<0, max>}>
|
||||||
|
*/
|
||||||
|
protected array $teaData = [
|
||||||
|
[
|
||||||
|
'title' => 'Darjeeling',
|
||||||
|
'description' => 'I love that tea!',
|
||||||
|
'sys_language_uid' => 0,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'title' => 'Earl Grey',
|
||||||
|
'description' => 'A nice tea!',
|
||||||
|
'sys_language_uid' => 0,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
protected function configure(): void
|
||||||
|
{
|
||||||
|
$this
|
||||||
|
->setHelp('Create test data for the tea extension in an already existing page (sysfolder).')
|
||||||
|
->addArgument(
|
||||||
|
'pageUid',
|
||||||
|
InputArgument::REQUIRED,
|
||||||
|
'Existing sysfolder page id.'
|
||||||
|
)
|
||||||
|
->addOption(
|
||||||
|
'delete-data-before',
|
||||||
|
'd',
|
||||||
|
InputOption::VALUE_NONE,
|
||||||
|
'Delete all tea data in the defined pid before creating new data.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function execute(InputInterface $input, OutputInterface $output): int
|
||||||
|
{
|
||||||
|
$pageUid = $input->getArgument('pageUid') ?? 0;
|
||||||
|
\assert(\is_int($pageUid));
|
||||||
|
$deleteDataBefore = $input->getOption('delete-data-before') ?? false;
|
||||||
|
\assert(\is_bool($deleteDataBefore));
|
||||||
|
$table = 'tx_tea_domain_model_tea';
|
||||||
|
$connectionForTable = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($table);
|
||||||
|
|
||||||
|
if ($deleteDataBefore) {
|
||||||
|
$query = $connectionForTable;
|
||||||
|
$query->delete($table, ['pid' => $pageUid], [Connection::PARAM_INT]);
|
||||||
|
$output->writeln(sprintf('Existing data in page %s deleted.', $pageUid));
|
||||||
|
}
|
||||||
|
|
||||||
|
$query = $connectionForTable;
|
||||||
|
foreach ($this->teaData as $item) {
|
||||||
|
$item = ['pid' => $pageUid, 'title' => $item['title'], 'description' => $item['description']];
|
||||||
|
$query->insert(
|
||||||
|
$table,
|
||||||
|
$item
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$output->writeln(sprintf('Test data in page %s created.', $pageUid));
|
||||||
|
|
||||||
|
$referenceIndex = GeneralUtility::makeInstance(ReferenceIndex::class);
|
||||||
|
$referenceIndex->updateIndex(false);
|
||||||
|
$output->writeln('Reference index updated.');
|
||||||
|
|
||||||
|
return Command::SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,6 +4,8 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
|
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
|
||||||
|
|
||||||
|
use TTN\Tea\Command\CreateTestDataCommand;
|
||||||
|
|
||||||
return static function (ContainerConfigurator $containerConfigurator) {
|
return static function (ContainerConfigurator $containerConfigurator) {
|
||||||
$services = $containerConfigurator->services()
|
$services = $containerConfigurator->services()
|
||||||
->defaults()
|
->defaults()
|
||||||
|
@ -12,4 +14,13 @@ return static function (ContainerConfigurator $containerConfigurator) {
|
||||||
|
|
||||||
$services->load('TTN\\Tea\\', '../Classes/*')
|
$services->load('TTN\\Tea\\', '../Classes/*')
|
||||||
->exclude('../Classes/Domain/Model/*');
|
->exclude('../Classes/Domain/Model/*');
|
||||||
|
|
||||||
|
$services->set(CreateTestDataCommand::class)
|
||||||
|
->tag(
|
||||||
|
'console.command',
|
||||||
|
[
|
||||||
|
'command' => 'tea:createtestdata',
|
||||||
|
'description' => 'Create test data in existing sysfolder',
|
||||||
|
]
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
28
Documentation/CommandController.rst
Normal file
28
Documentation/CommandController.rst
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
.. include:: /Includes.rst.txt
|
||||||
|
|
||||||
|
.. _command-controller:
|
||||||
|
|
||||||
|
==================
|
||||||
|
Command Controller
|
||||||
|
==================
|
||||||
|
|
||||||
|
The "tea" extension comes with a CommandController that can be used for the
|
||||||
|
automatic creation of test data. It also serves to illustrate how data can be
|
||||||
|
created in the database using a command controller.
|
||||||
|
|
||||||
|
You must set a page id as argument. Therefore it's necessary to create an
|
||||||
|
sysfolder before.
|
||||||
|
|
||||||
|
You can add option `-d` to delete already existing data.
|
||||||
|
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
vendor/bin/typo3 tea:createtestdata 3
|
||||||
|
|
||||||
|
|
||||||
|
.. seealso::
|
||||||
|
|
||||||
|
For further details to Console Commands read the
|
||||||
|
:ref:`Creating a basic command <t3coreapi:console-command-tutorial-create>`
|
||||||
|
tutorial.
|
|
@ -44,9 +44,10 @@ continuous integration.
|
||||||
|
|
||||||
Introduction
|
Introduction
|
||||||
PHPVersionSupport
|
PHPVersionSupport
|
||||||
TestingFramework
|
ReleaseBranchingStrategy
|
||||||
Environment
|
Environment
|
||||||
DependencyManager
|
DependencyManager
|
||||||
|
CommandController
|
||||||
Running
|
Running
|
||||||
ContinuousIntegration
|
ContinuousIntegration
|
||||||
Documentation
|
Documentation
|
||||||
|
|
65
Documentation/ReleaseBranchingStrategy.rst
Normal file
65
Documentation/ReleaseBranchingStrategy.rst
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
.. include:: /Includes.rst.txt
|
||||||
|
|
||||||
|
.. _release-branching-strategy:
|
||||||
|
|
||||||
|
==============================
|
||||||
|
Release and Branching Strategy
|
||||||
|
==============================
|
||||||
|
|
||||||
|
When maintaining TYPO3 extensions, developers often need to support multiple
|
||||||
|
TYPO3 Long-Term Support (LTS) versions simultaneously. This typically requires
|
||||||
|
a clear release and branching strategy to manage development and maintenance
|
||||||
|
across different TYPO3 versions.
|
||||||
|
|
||||||
|
There are two common strategies for managing branches when supporting multiple
|
||||||
|
TYPO3 LTS versions.
|
||||||
|
|
||||||
|
.. contents:: Table of Contents:
|
||||||
|
:backlinks: top
|
||||||
|
:class: compact-list
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
|
||||||
|
.. _release-branching-strategy-one-branch:
|
||||||
|
|
||||||
|
Approach 1: One branch for multiple TYPO3 LTS versions
|
||||||
|
======================================================
|
||||||
|
|
||||||
|
In this approach, there is a single main branch that receives new features and
|
||||||
|
updates, while supporting multiple TYPO3 LTS versions at the same time.
|
||||||
|
|
||||||
|
The downside of this approach is that it may require some version-dependent
|
||||||
|
code switches, which can increase complexity. However, the major advantage is
|
||||||
|
that there is only one branch to maintain, making it easier to implement new
|
||||||
|
features and code changes across all supported TYPO3 versions.
|
||||||
|
|
||||||
|
This approach simplifies the maintenance of the extension and is preferred when
|
||||||
|
minimizing maintenance overhead is the primary concern.
|
||||||
|
|
||||||
|
.. _release-branching-strategy-multiple-branches:
|
||||||
|
|
||||||
|
Approach 2: Separate branch per TYPO3 LTS version
|
||||||
|
=================================================
|
||||||
|
|
||||||
|
In this approach, there is one main branch for each TYPO3 LTS version. This
|
||||||
|
means that each branch exclusively supports a single TYPO3 LTS version.
|
||||||
|
|
||||||
|
The advantage here is that version-specific code can be used without requiring
|
||||||
|
version-dependent switches, reducing complexity in the codebase. However, this
|
||||||
|
approach increases the maintenance burden, as any new features or updates must
|
||||||
|
be applied to each branch individually.
|
||||||
|
|
||||||
|
This approach may be necessary when there are significant differences between
|
||||||
|
TYPO3 LTS versions or when you want to avoid version-dependent code.
|
||||||
|
|
||||||
|
.. _release-strategy-conclusion:
|
||||||
|
|
||||||
|
Conclusion
|
||||||
|
==========
|
||||||
|
|
||||||
|
The appropriate release and branching strategy depends on the specific
|
||||||
|
requirements of the extension and the TYPO3 versions you are supporting. If
|
||||||
|
reducing maintenance complexity is a priority, using a single branch for
|
||||||
|
multiple versions is often the better choice. However, if you need to tailor
|
||||||
|
your extension for each version, a separate branch for each version may be more
|
||||||
|
suitable.
|
|
@ -1,57 +0,0 @@
|
||||||
.. include:: /Includes.rst.txt
|
|
||||||
|
|
||||||
.. _testing-framework:
|
|
||||||
|
|
||||||
=================
|
|
||||||
Testing framework
|
|
||||||
=================
|
|
||||||
|
|
||||||
Extensions usually need to support two LTS versions of TYPO3 in parallel,
|
|
||||||
assuming that they should support all currently supported TYPO3 LTS versions.
|
|
||||||
To achieve this, there are two different approaches, which also affect the
|
|
||||||
choice of a testing framework for unit and functional tests.
|
|
||||||
|
|
||||||
.. contents:: Table of Contents:
|
|
||||||
:backlinks: top
|
|
||||||
:class: compact-list
|
|
||||||
:depth: 2
|
|
||||||
:local:
|
|
||||||
|
|
||||||
.. _testing-framework-approach-many-versions:
|
|
||||||
|
|
||||||
Approach 1: One branch for many TYPO3 LTS versions
|
|
||||||
==================================================
|
|
||||||
|
|
||||||
With this approach, there is one main branch that gets new features. It needs to
|
|
||||||
support two TYPO3 LTS versions in parallel.
|
|
||||||
|
|
||||||
The downside is that this slightly increases code complexity as
|
|
||||||
version-dependent code switches might be necessary. The upside is that there
|
|
||||||
is only one branch to maintain, which makes adding new features (and all other
|
|
||||||
code changes) a lot less of a hassle.
|
|
||||||
|
|
||||||
The `Nimut testing framework <https://github.com/Nimut/testing-framework>`__
|
|
||||||
can support multiple TYPO3 versions at a time, and
|
|
||||||
it provides version-independent abstractions for testing, making it the perfect
|
|
||||||
companion for this approach.
|
|
||||||
|
|
||||||
This is the approach that we have chosen for this extension as we do not want
|
|
||||||
to maintain two branches in parallel.
|
|
||||||
|
|
||||||
.. _testing-framework-approach-one-version:
|
|
||||||
|
|
||||||
Approach 2: One branch per TYPO3 LTS version
|
|
||||||
============================================
|
|
||||||
|
|
||||||
With this approach, there are two main branches that get new features in
|
|
||||||
parallel. Each branch supports exactly one TYPO3 LTS version.
|
|
||||||
|
|
||||||
The upside is that this slightly decreases code complexity as
|
|
||||||
version-dependent code switches are not necessary. The downside is that there
|
|
||||||
are two branches to maintain, which makes adding new features (and all other
|
|
||||||
code changes) more of a hassle.
|
|
||||||
|
|
||||||
For this approach, the
|
|
||||||
`TYPO3 testing framework <https://github.com/TYPO3/testing-framework>`__
|
|
||||||
- which supports only one TYPO3 LTS version at a time - will work just fine.
|
|
||||||
|
|
121
Tests/Functional/Command/CreateTestDataCommandTest.php
Normal file
121
Tests/Functional/Command/CreateTestDataCommandTest.php
Normal file
|
@ -0,0 +1,121 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace TTN\Tea\Tests\Functional\Command;
|
||||||
|
|
||||||
|
use Symfony\Component\Console\Application;
|
||||||
|
use Symfony\Component\Console\Command\Command;
|
||||||
|
use Symfony\Component\Console\Tester\CommandTester;
|
||||||
|
use TTN\Tea\Command\CreateTestDataCommand;
|
||||||
|
use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @covers \TTN\Tea\Command\CreateTestDataCommand
|
||||||
|
*/
|
||||||
|
class CreateTestDataCommandTest extends FunctionalTestCase
|
||||||
|
{
|
||||||
|
private const COMMAND_NAME = 'tea:createtestdata';
|
||||||
|
|
||||||
|
protected array $testExtensionsToLoad = ['ttn/tea'];
|
||||||
|
|
||||||
|
private CreateTestDataCommand $subject;
|
||||||
|
|
||||||
|
private CommandTester $commandTester;
|
||||||
|
|
||||||
|
protected function setUp(): void
|
||||||
|
{
|
||||||
|
parent::setUp();
|
||||||
|
$this->importCSVDataSet(__DIR__ . '/Fixtures/Database/Pages.csv');
|
||||||
|
$this->subject = new CreateTestDataCommand(self::COMMAND_NAME);
|
||||||
|
$application = new Application();
|
||||||
|
$application->add($this->subject);
|
||||||
|
|
||||||
|
$command = $application->find('tea:createtestdata');
|
||||||
|
$this->commandTester = new CommandTester($command);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function isConsoleCommand(): void
|
||||||
|
{
|
||||||
|
self::assertInstanceOf(Command::class, $this->subject);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function hasDescription(): void
|
||||||
|
{
|
||||||
|
$expected = 'Create test data for the tea extension in an already existing page (sysfolder).';
|
||||||
|
self::assertSame($expected, $this->subject->getHelp());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function hasHelpText(): void
|
||||||
|
{
|
||||||
|
$expected = 'Create test data for the tea extension in an already existing page (sysfolder).';
|
||||||
|
self::assertSame($expected, $this->subject->getHelp());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function runReturnsSuccessStatus(): void
|
||||||
|
{
|
||||||
|
$result = $this->commandTester->execute(
|
||||||
|
[
|
||||||
|
'pageUid' => '1',
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
self::assertSame(Command::SUCCESS, $result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function createsTestData(): void
|
||||||
|
{
|
||||||
|
$this->commandTester->execute([
|
||||||
|
'pageUid' => '1',
|
||||||
|
]);
|
||||||
|
|
||||||
|
self::assertCSVDataSet(__DIR__ . '/Fixtures/Database/Teas.csv');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function deletesExistingDataOnGivenPidBeforeCreatingNewData(): void
|
||||||
|
{
|
||||||
|
$this->importCSVDataSet(__DIR__ . '/Fixtures/Database/ExistingTeas.csv');
|
||||||
|
$this->commandTester->execute(
|
||||||
|
[
|
||||||
|
'pageUid' => '1',
|
||||||
|
'--delete-data-before' => true,
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
self::assertCSVDataSet(__DIR__ . '/Fixtures/Database/TeasAfterDelete.csv');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function doesNotDeleteDataOnOtherPid(): void
|
||||||
|
{
|
||||||
|
$this->importCSVDataSet(__DIR__ . '/Fixtures/Database/OtherExistingTeas.csv');
|
||||||
|
$this->commandTester->execute(
|
||||||
|
[
|
||||||
|
'pageUid' => '1',
|
||||||
|
'--delete-data-before' => true,
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
self::assertCSVDataSet(__DIR__ . '/Fixtures/Database/TeasAfterDeleteOtherExistingTeas.csv');
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
"tx_tea_domain_model_tea"
|
||||||
|
,"uid","pid","title","description","deleted"
|
||||||
|
,1,1,"Darjeeling","Which already existed in the system",0
|
||||||
|
,2,1,"Earl Grey","Which already existed in the system",0
|
Can't render this file because it has a wrong number of fields in line 2.
|
|
@ -0,0 +1,6 @@
|
||||||
|
"tx_tea_domain_model_tea"
|
||||||
|
,"uid","pid","title","description","deleted"
|
||||||
|
,3,1,"Darjeeling","Exists and should be deleted","0"
|
||||||
|
,4,1,"Earl Grey","Exists and should be deleted","0"
|
||||||
|
,1,2,"Darjeeling","Which already existed in the system",0
|
||||||
|
,2,2,"Earl Grey","Which already existed in the system",0
|
Can't render this file because it has a wrong number of fields in line 2.
|
4
Tests/Functional/Command/Fixtures/Database/Pages.csv
Normal file
4
Tests/Functional/Command/Fixtures/Database/Pages.csv
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
"pages",,,,,,,,,
|
||||||
|
,"uid","pid","sorting","deleted","t3_origuid","title",,,
|
||||||
|
,1,0,256,0,0,"Tea data",,,
|
||||||
|
,2,0,512,0,0,"Other tea data",,,
|
|
4
Tests/Functional/Command/Fixtures/Database/Teas.csv
Normal file
4
Tests/Functional/Command/Fixtures/Database/Teas.csv
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
"tx_tea_domain_model_tea"
|
||||||
|
,"uid","pid","title","description","deleted"
|
||||||
|
,1,1,"Darjeeling","I love that tea!",0
|
||||||
|
,2,1,"Earl Grey","A nice tea!",0
|
Can't render this file because it has a wrong number of fields in line 2.
|
|
@ -0,0 +1,4 @@
|
||||||
|
"tx_tea_domain_model_tea"
|
||||||
|
,"pid","title","description","deleted"
|
||||||
|
,1,"Darjeeling","I love that tea!",0
|
||||||
|
,1,"Earl Grey","A nice tea!",0
|
Can't render this file because it has a wrong number of fields in line 2.
|
|
@ -0,0 +1,6 @@
|
||||||
|
"tx_tea_domain_model_tea"
|
||||||
|
,"pid","title","description","deleted"
|
||||||
|
,1,"Darjeeling","I love that tea!",0
|
||||||
|
,1,"Earl Grey","A nice tea!",0
|
||||||
|
,2,"Darjeeling","Which already existed in the system",0
|
||||||
|
,2,"Earl Grey","Which already existed in the system",0
|
Can't render this file because it has a wrong number of fields in line 2.
|
|
@ -8,6 +8,7 @@ use TTN\Tea\Domain\Model\Tea;
|
||||||
use TTN\Tea\Domain\Repository\TeaRepository;
|
use TTN\Tea\Domain\Repository\TeaRepository;
|
||||||
use TYPO3\CMS\Extbase\Domain\Model\FileReference;
|
use TYPO3\CMS\Extbase\Domain\Model\FileReference;
|
||||||
use TYPO3\CMS\Extbase\Persistence\PersistenceManagerInterface;
|
use TYPO3\CMS\Extbase\Persistence\PersistenceManagerInterface;
|
||||||
|
use TYPO3\CMS\Extbase\Persistence\Repository;
|
||||||
use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
|
use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -31,6 +32,14 @@ final class TeaRepositoryTest extends FunctionalTestCase
|
||||||
$this->subject = $this->get(TeaRepository::class);
|
$this->subject = $this->get(TeaRepository::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function isRepository(): void
|
||||||
|
{
|
||||||
|
self::assertInstanceOf(Repository::class, $this->subject);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @test
|
* @test
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,39 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace TTN\Tea\Tests\Unit\Domain\Repository;
|
|
||||||
|
|
||||||
use TTN\Tea\Domain\Repository\TeaRepository;
|
|
||||||
use TYPO3\CMS\Extbase\Object\ObjectManagerInterface;
|
|
||||||
use TYPO3\CMS\Extbase\Persistence\Repository;
|
|
||||||
use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @covers \TTN\Tea\Domain\Repository\TeaRepository
|
|
||||||
*/
|
|
||||||
final class TeaRepositoryTest extends UnitTestCase
|
|
||||||
{
|
|
||||||
private TeaRepository $subject;
|
|
||||||
|
|
||||||
protected function setUp(): void
|
|
||||||
{
|
|
||||||
parent::setUp();
|
|
||||||
|
|
||||||
if (\interface_exists(ObjectManagerInterface::class)) {
|
|
||||||
$objectManagerStub = $this->createStub(ObjectManagerInterface::class);
|
|
||||||
// @phpstan-ignore-next-line This line is 11LTS-specific, but we're running PHPStan on TYPO3 12.
|
|
||||||
$this->subject = new TeaRepository($objectManagerStub);
|
|
||||||
} else {
|
|
||||||
$this->subject = new TeaRepository();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @test
|
|
||||||
*/
|
|
||||||
public function isRepository(): void
|
|
||||||
{
|
|
||||||
self::assertInstanceOf(Repository::class, $this->subject);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -47,32 +47,31 @@
|
||||||
"typo3/cms-frontend": "^11.5.4 || ^12.4.2"
|
"typo3/cms-frontend": "^11.5.4 || ^12.4.2"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"ergebnis/composer-normalize": "^2.43.0",
|
"ergebnis/composer-normalize": "2.44.0",
|
||||||
"friendsofphp/php-cs-fixer": "^3.62.0",
|
"friendsofphp/php-cs-fixer": "3.64.0",
|
||||||
"helmich/typo3-typoscript-lint": "^3.1.1",
|
"helmich/typo3-typoscript-lint": "3.1.1",
|
||||||
"icanhazstring/composer-unused": "^0.8.11",
|
"icanhazstring/composer-unused": "0.8.11",
|
||||||
"php-coveralls/php-coveralls": "^2.7.0",
|
"php-parallel-lint/php-parallel-lint": "1.4.0",
|
||||||
"php-parallel-lint/php-parallel-lint": "^1.4",
|
"phpmd/phpmd": "2.15.0",
|
||||||
"phpmd/phpmd": "^2.15.0",
|
"phpstan/extension-installer": "1.4.3",
|
||||||
"phpstan/extension-installer": "^1.4.1",
|
"phpstan/phpstan": "1.12.7",
|
||||||
"phpstan/phpstan": "^1.11.11",
|
"phpstan/phpstan-phpunit": "1.4.0",
|
||||||
"phpstan/phpstan-phpunit": "^1.4.0",
|
"phpstan/phpstan-strict-rules": "1.6.1",
|
||||||
"phpstan/phpstan-strict-rules": "^1.6.0",
|
"phpunit/phpunit": "9.6.20",
|
||||||
"phpunit/phpunit": "^9.6.20",
|
"saschaegerer/phpstan-typo3": "1.10.2",
|
||||||
"saschaegerer/phpstan-typo3": "^1.10.1",
|
"seld/jsonlint": "1.11.0",
|
||||||
"seld/jsonlint": "^1.11.0",
|
"spaze/phpstan-disallowed-calls": "3.5.0",
|
||||||
"spaze/phpstan-disallowed-calls": "^3.4",
|
"squizlabs/php_codesniffer": "3.10.3",
|
||||||
"squizlabs/php_codesniffer": "^3.10.2",
|
"ssch/typo3-rector": "2.10.2",
|
||||||
"ssch/typo3-rector": "^2.6.4",
|
"ssch/typo3-rector-testing-framework": "2.0.1",
|
||||||
"ssch/typo3-rector-testing-framework": "^2.0.1",
|
"symfony/console": "^5.4.44 || ^6.4.12 || ^7.1.5",
|
||||||
"symfony/console": "^5.4 || ^6.4 || ^7.0",
|
"symfony/translation": "^5.4.44 || ^6.4.12 || ^7.1.5",
|
||||||
"symfony/translation": "^5.4 || ^6.4 || ^7.0",
|
"symfony/yaml": "^5.4.44 || ^6.4.12 || ^7.1.5",
|
||||||
"symfony/yaml": "^5.4 || ^6.4 || ^7.0",
|
"tomasvotruba/cognitive-complexity": "0.2.3",
|
||||||
"tomasvotruba/cognitive-complexity": "^0.2.3",
|
"tomasvotruba/type-coverage": "1.0.0",
|
||||||
"tomasvotruba/type-coverage": "^0.3.1",
|
|
||||||
"typo3/cms-fluid-styled-content": "^11.5.4 || ^12.4.2",
|
"typo3/cms-fluid-styled-content": "^11.5.4 || ^12.4.2",
|
||||||
"typo3/coding-standards": "^0.6.1 || ^0.8.0",
|
"typo3/coding-standards": "0.6.1 || 0.8.0",
|
||||||
"typo3/testing-framework": "^7.0.5",
|
"typo3/testing-framework": "7.1.0",
|
||||||
"webmozart/assert": "^1.11.0"
|
"webmozart/assert": "^1.11.0"
|
||||||
},
|
},
|
||||||
"replace": {
|
"replace": {
|
||||||
|
@ -128,15 +127,15 @@
|
||||||
"ci:coverage:functional": [
|
"ci:coverage:functional": [
|
||||||
"@ci:tests:create-directories",
|
"@ci:tests:create-directories",
|
||||||
"@coverage:create-directories",
|
"@coverage:create-directories",
|
||||||
"phpunit -c Build/phpunit/FunctionalTests.xml --whitelist Classes --coverage-php=.Build/coverage/functional.cov Tests/Functional"
|
"phpunit -c Build/phpunit/FunctionalTests.xml --whitelist Classes --coverage-php=build/coverage/functional.cov Tests/Functional"
|
||||||
],
|
],
|
||||||
"ci:coverage:merge": [
|
"ci:coverage:merge": [
|
||||||
"@coverage:create-directories",
|
"@coverage:create-directories",
|
||||||
"@php tools/phpcov merge --clover=./.Build/logs/clover.xml ./.Build/coverage/"
|
"@php tools/phpcov merge --clover=build/logs/clover.xml build/coverage/"
|
||||||
],
|
],
|
||||||
"ci:coverage:unit": [
|
"ci:coverage:unit": [
|
||||||
"@coverage:create-directories",
|
"@coverage:create-directories",
|
||||||
"phpunit -c Build/phpunit/UnitTests.xml --whitelist Classes --coverage-php=.Build/coverage/unit.cov Tests/Unit"
|
"phpunit -c Build/phpunit/UnitTests.xml --whitelist Classes --coverage-php=build/coverage/unit.cov Tests/Unit"
|
||||||
],
|
],
|
||||||
"ci:json:lint": "find . ! -path '*/.cache/*' ! -path '*/.Build/*' ! -path '*/node_modules/*' -name '*.json' | xargs -r php .Build/bin/jsonlint -q",
|
"ci:json:lint": "find . ! -path '*/.cache/*' ! -path '*/.Build/*' ! -path '*/node_modules/*' -name '*.json' | xargs -r php .Build/bin/jsonlint -q",
|
||||||
"ci:php": [
|
"ci:php": [
|
||||||
|
@ -148,15 +147,18 @@
|
||||||
"ci:php:cs-fixer": "php-cs-fixer fix --config .php-cs-fixer.php -v --dry-run --diff",
|
"ci:php:cs-fixer": "php-cs-fixer fix --config .php-cs-fixer.php -v --dry-run --diff",
|
||||||
"ci:php:lint": "parallel-lint .*.php *.php Classes Configuration Tests",
|
"ci:php:lint": "parallel-lint .*.php *.php Classes Configuration Tests",
|
||||||
"ci:php:mess": "phpmd Classes text Build/phpmd/phpmd.xml",
|
"ci:php:mess": "phpmd Classes text Build/phpmd/phpmd.xml",
|
||||||
"ci:php:sniff": "phpcs Classes Configuration Tests",
|
"ci:php:rector": "rector --dry-run",
|
||||||
|
"ci:php:sniff": "phpcs --standard=Build/phpcs/phpcs.xml Classes Configuration Tests",
|
||||||
"ci:php:stan": "phpstan --no-progress -v",
|
"ci:php:stan": "phpstan --no-progress -v",
|
||||||
"ci:static": [
|
"ci:static": [
|
||||||
"@ci:composer:normalize",
|
"@ci:composer:normalize",
|
||||||
|
"@ci:composer:unused",
|
||||||
"@ci:json:lint",
|
"@ci:json:lint",
|
||||||
"@ci:php:cs-fixer",
|
|
||||||
"@ci:php:lint",
|
"@ci:php:lint",
|
||||||
"@ci:php:sniff",
|
"@ci:php:rector",
|
||||||
"@ci:php:stan",
|
"@ci:php:stan",
|
||||||
|
"@ci:php:cs-fixer",
|
||||||
|
"@ci:php:sniff",
|
||||||
"@ci:typoscript:lint",
|
"@ci:typoscript:lint",
|
||||||
"@ci:xliff:lint",
|
"@ci:xliff:lint",
|
||||||
"@ci:yaml:lint"
|
"@ci:yaml:lint"
|
||||||
|
@ -170,15 +172,17 @@
|
||||||
"ci:typoscript:lint": "typoscript-lint -c Configuration/TsLint.yml --ansi -n --fail-on-warnings -vvv Configuration/TypoScript",
|
"ci:typoscript:lint": "typoscript-lint -c Configuration/TsLint.yml --ansi -n --fail-on-warnings -vvv Configuration/TypoScript",
|
||||||
"ci:xliff:lint": "php Build/xliff/xliff-lint lint:xliff Resources/Private/Language",
|
"ci:xliff:lint": "php Build/xliff/xliff-lint lint:xliff Resources/Private/Language",
|
||||||
"ci:yaml:lint": "find . ! -path '*.Build/*' ! -path '*node_modules/*' \\( -name '*.yaml' -o -name '*.yml' \\) | xargs -r php ./.Build/bin/yaml-lint",
|
"ci:yaml:lint": "find . ! -path '*.Build/*' ! -path '*node_modules/*' \\( -name '*.yaml' -o -name '*.yml' \\) | xargs -r php ./.Build/bin/yaml-lint",
|
||||||
"coverage:create-directories": "mkdir -p .Build/logs .Build/coverage",
|
"coverage:create-directories": "mkdir -p build/coverage build/logs",
|
||||||
"docs:generate": "docker run --rm --pull always -v $(pwd):/project -it ghcr.io/typo3-documentation/render-guides:latest --config=Documentation",
|
"docs:generate": "docker run --rm --pull always -v $(pwd):/project -it ghcr.io/typo3-documentation/render-guides:latest --config=Documentation",
|
||||||
"fix:composer:normalize": "@composer normalize --no-check-lock",
|
"fix:composer:normalize": "@composer normalize --no-check-lock",
|
||||||
"fix:php": [
|
"fix:php": [
|
||||||
|
"@fix:php:rector",
|
||||||
"@fix:php:cs",
|
"@fix:php:cs",
|
||||||
"@fix:php:sniff"
|
"@fix:php:sniff"
|
||||||
],
|
],
|
||||||
"fix:php:cs": "php-cs-fixer fix --config .php-cs-fixer.php",
|
"fix:php:cs": "php-cs-fixer fix --config .php-cs-fixer.php",
|
||||||
"fix:php:sniff": "phpcbf Classes Configuration Tests",
|
"fix:php:rector": "rector",
|
||||||
|
"fix:php:sniff": "phpcbf --standard=Build/phpcs/phpcs.xml Classes Configuration Tests",
|
||||||
"phpstan:baseline": "phpstan --generate-baseline --allow-empty-baseline",
|
"phpstan:baseline": "phpstan --generate-baseline --allow-empty-baseline",
|
||||||
"prepare-release": [
|
"prepare-release": [
|
||||||
"rm -rf .Build",
|
"rm -rf .Build",
|
||||||
|
@ -197,12 +201,9 @@
|
||||||
"rm .nvmrc",
|
"rm .nvmrc",
|
||||||
"rm .php-cs-fixer.php",
|
"rm .php-cs-fixer.php",
|
||||||
"rm .prettierrc.js",
|
"rm .prettierrc.js",
|
||||||
"rm Build/phpunit/FunctionalTests.xml",
|
|
||||||
"rm Build/phpunit/UnitTests.xml",
|
|
||||||
"rm package-lock.json",
|
"rm package-lock.json",
|
||||||
"rm package.json",
|
"rm package.json",
|
||||||
"rm phive.xml",
|
"rm phive.xml",
|
||||||
"rm phpcs.xml",
|
|
||||||
"rm phpstan-baseline.neon",
|
"rm phpstan-baseline.neon",
|
||||||
"rm phpstan.neon",
|
"rm phpstan.neon",
|
||||||
"rm rector.php",
|
"rm rector.php",
|
||||||
|
@ -221,6 +222,7 @@
|
||||||
"ci:php:cs-fixer": "Checks the code style with the PHP Coding Standards Fixer (PHP-CS-Fixer).",
|
"ci:php:cs-fixer": "Checks the code style with the PHP Coding Standards Fixer (PHP-CS-Fixer).",
|
||||||
"ci:php:lint": "Lints the PHP files for syntax errors.",
|
"ci:php:lint": "Lints the PHP files for syntax errors.",
|
||||||
"ci:php:mess": "Runs PHP mess detection.",
|
"ci:php:mess": "Runs PHP mess detection.",
|
||||||
|
"ci:php:rector": "Checks for code for changes by Rector.",
|
||||||
"ci:php:sniff": "Checks the code style with PHP_CodeSniffer (PHPCS).",
|
"ci:php:sniff": "Checks the code style with PHP_CodeSniffer (PHPCS).",
|
||||||
"ci:php:stan": "Checks the PHP types using PHPStan.",
|
"ci:php:stan": "Checks the PHP types using PHPStan.",
|
||||||
"ci:static": "Runs all static code checks (syntax, style, types).",
|
"ci:static": "Runs all static code checks (syntax, style, types).",
|
||||||
|
@ -235,6 +237,7 @@
|
||||||
"fix:composer:normalize": "Normalizes composer.json file content.",
|
"fix:composer:normalize": "Normalizes composer.json file content.",
|
||||||
"fix:php": "Runs all fixers for the PHP code.",
|
"fix:php": "Runs all fixers for the PHP code.",
|
||||||
"fix:php:cs": "Fixes the code style with PHP-CS-Fixer.",
|
"fix:php:cs": "Fixes the code style with PHP-CS-Fixer.",
|
||||||
|
"fix:php:rector": "Updates the code with Rector.",
|
||||||
"fix:php:sniff": "Fixes the code style with PHP_CodeSniffer.",
|
"fix:php:sniff": "Fixes the code style with PHP_CodeSniffer.",
|
||||||
"phpstan:baseline": "Updates the PHPStan baseline file to match the code.",
|
"phpstan:baseline": "Updates the PHPStan baseline file to match the code.",
|
||||||
"prepare-release": "Removes development-only files in preparation of a TER release."
|
"prepare-release": "Removes development-only files in preparation of a TER release."
|
||||||
|
|
|
@ -10,8 +10,8 @@
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"license": "GPL-2.0-or-later",
|
"license": "GPL-2.0-or-later",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^22.5.0",
|
"node": "^20.17.0 || ^22.5.1",
|
||||||
"npm": "^10.8.0"
|
"npm": "^10.8.2"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"ci:lint:js": "eslint 'Resources/Public/**/*.js'",
|
"ci:lint:js": "eslint 'Resources/Public/**/*.js'",
|
||||||
|
|
Loading…
Reference in a new issue