2015-10-22 15:16:40 +02:00
# Tea example
2013-11-01 19:51:50 +01:00
2020-10-31 12:32:28 +01:00
[![GitHub CI Status ](https://github.com/TYPO3-Documentation/tea/workflows/CI/badge.svg?branch=main )](https://github.com/TYPO3-Documentation/tea/actions)
2020-10-10 14:02:59 +02:00
[![Gitlab CI Status ](https://gitlab.typo3.org/qa/example-extension/badges/main/pipeline.svg )](https://gitlab.typo3.org/qa/example-extension/-/pipelines)
2019-12-07 15:59:33 +01:00
[![Latest Stable Version ](https://poser.pugx.org/ttn/tea/v/stable.svg )](https://packagist.org/packages/ttn/tea)
[![Total Downloads ](https://poser.pugx.org/ttn/tea/downloads.svg )](https://packagist.org/packages/ttn/tea)
[![Latest Unstable Version ](https://poser.pugx.org/ttn/tea/v/unstable.svg )](https://packagist.org/packages/ttn/tea)
[![License ](https://poser.pugx.org/ttn/tea/license.svg )](https://packagist.org/packages/ttn/tea)
2021-05-01 19:13:21 +02:00
[![Contributor Covenant ](https://img.shields.io/badge/Contributor%20Covenant-1.4-4baaaa.svg )](CODE_OF_CONDUCT.md)
2016-02-08 19:10:41 +01:00
2020-11-18 12:59:48 +01:00
This TYPO3 extension is an example of best practices in continuous integration and automated code checks, also
writing unit and functional tests for Extbase/Fluid-based extensions for TYPO3 CMS using PHPUnit.
2015-10-22 15:16:40 +02:00
2017-12-23 00:58:20 +01:00
It also is an example for
2020-10-10 14:02:59 +02:00
[best practices for extbase/fluid ](https://github.com/oliverklee/workshop-handouts/tree/main/extbase-best-practices ).
2015-10-24 01:16:37 +02:00
2017-05-05 18:00:40 +02:00
For information on the different ways to execute the tests, please have a look
at the [handout to my workshops on test-driven development (TDD) ](https://github.com/oliverklee/tdd-reader ).
2021-03-20 16:54:35 +01:00
This manual is rendered for reading [on docs.typo3.org ](https://docs.typo3.org/p/ttn/tea/master/en-us/ ).
2021-02-22 16:53:56 +01:00
2020-11-18 12:59:48 +01:00
## Feature list
All of those checks are available in Github Actions and in Gitlab CI.
2018-05-30 12:33:28 +02:00
2020-11-18 12:59:48 +01:00
### PHP Lint check by php -l
`composer ci:php:lint`
2021-03-30 00:55:20 +02:00
### PHP code style fixer checks by [php-cs-fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer)
2020-11-18 12:59:48 +01:00
2021-03-30 00:55:20 +02:00
`composer ci:php:cs-fixer`
2020-11-18 12:59:48 +01:00
2021-03-30 00:55:20 +02:00
### PHP code sniffing by [phpcs](https://github.com/squizlabs/PHP_CodeSniffer)
2020-11-18 12:59:48 +01:00
`composer ci:php:sniff`
2021-03-30 00:55:20 +02:00
### PHP copy'n'paste check by [phpcpd](https://github.com/sebastianbergmann/phpcpd)
2020-11-21 18:21:09 +01:00
`composer ci:php:copypaste`
2021-03-17 01:08:40 +01:00
### PHP type checking by [PHPStan](https://github.com/phpstan/phpstan)
`composer ci:php:stan`
2020-11-18 12:59:48 +01:00
### JSON Lint check by [jsonlint](https://github.com/Seldaek/jsonlint)
`composer ci:json:lint`
### YAML Lint check by [yaml-lint](https://github.com/j13k/yaml-lint)
`composer ci:yaml:lint`
### TypoScript Lint by [typoscript-lint](https://github.com/martin-helmich/typo3-typoscript-lint)
`composer ci:ts:lint`
2021-02-18 10:44:35 +01:00
### Composer Normalize by [composer-normalize](https://github.com/ergebnis/composer-normalize)
`composer ci:composer:normalize`
2021-02-10 15:55:08 +01:00
### Running unit tests
2020-11-18 12:59:48 +01:00
`composer ci:tests:unit`
2021-02-10 15:55:08 +01:00
### Running functional tests
2020-11-18 12:59:48 +01:00
`composer ci:tests:functional`
2021-02-10 15:55:08 +01:00
### Running all tests
2020-11-18 12:59:48 +01:00
`composer ci:tests`
2018-05-30 12:33:28 +02:00
2018-05-25 16:19:12 +02:00
## Running the tests in PhpStorm
File > Settings > Languages & Frameworks > PHP > Test Frameworks
- (*) Use Composer autoloader
2018-05-30 13:38:59 +02:00
- Path to script: select `.Build/vendor/autoload.php` in your project folder
2018-05-25 16:19:12 +02:00
In the Run configurations, edit the PHPUnit configuration and use these
settings so this configuration can serve as a template:
- Directory: use the `Tests/Unit` directory in your project
2019-12-07 17:30:02 +01:00
- (*) Use alternative configuration file
2018-05-25 16:19:12 +02:00
- use `.Build/vendor/nimut/testing-framework/res/Configuration/UnitTests.xml`
in your project folder
2019-12-07 17:30:02 +01:00
- add the following environment variables:
2018-05-25 16:19:12 +02:00
- typo3DatabaseUsername
- typo3DatabasePassword
- typo3DatabaseHost
- typo3DatabaseName
### Unit tests configuration
In the Run configurations, copy the PHPUnit configuration and use these settings:
- Directory: use the `Tests/Unit` directory in your project
### Functional tests configuration
In the Run configurations, copy the PHPUnit configuration and use these settings:
2018-05-25 16:51:31 +02:00
- Directory: use the `Tests/Functional` directory in your project
2019-12-07 17:30:02 +01:00
- (x) Use alternative configuration file
2018-05-25 16:19:12 +02:00
- use `.Build/vendor/nimut/testing-framework/res/Configuration/FunctionalTests.xml`
2018-05-31 23:48:38 +02:00
### Running the acceptance tests
#### On the command line
1. make sure you have Chrome installed on your machine
2. `composer update codeception/codeception` (just in case)
3. [download the latest version of ChromeDriver ](http://chromedriver.chromium.org/downloads )
4. unzip it
2018-06-01 10:58:34 +02:00
5. `chromedriver --url-base=wd/hub`
2018-06-01 10:20:36 +02:00
6. `.Build/vendor/bin/codecept run` (in another terminal)
2018-05-31 23:48:38 +02:00
#### In PhpStorm
1. make sure the "Codeception Framework" plugin is activated
2018-06-01 10:58:34 +02:00
2. right-click on `Tests/Acceptance/StarterCest.php`
2018-06-01 10:20:36 +02:00
3. Run 'Acceptance (Codeception)'
2018-05-31 23:48:38 +02:00
2021-05-18 23:33:35 +02:00
## Developing locally
In order to work on the extension locally, you can use a local environment (local PHP, server) or use
a widely adopted tool in TYPO3 Community, [ddev ](https://github.com/drud/ddev ), which we recommend.
## Running Composer commands in the DDEV container
If you use ddev, then you can use the provided command in root of your repository. You don't need to
manually startup containers, you can run commands straight away, and project will automatically boot up.
Example:
```bash
ddev composer ci:ts:lint
```
## Running tests locally via DDEV
###Unit tests
To run unit tests, type:
```bash
composer ci:tests:unit
```
2020-10-07 14:10:44 +02:00
## Security
Libraries and extensions do not need the security check as they should not have
any restrictions concerning the other libraries they are installed alongside with
(unless those would create breakage), and they also do not have a `composer.lock`
which usually is the source for security checks.
Instead, the projects (i.e., for TYPO3 installations) need to have the security checks.
2020-11-29 18:28:34 +01:00
## Documentation rendering
In order to render documentation, first of all, clone repository
```bash
git clone https://github.com/TYPO3-Documentation/tea.git
```
then go to extension root
```bash
cd tea
```
and follow [the TYPO3 documentation quickstart guide ](https://docs.typo3.org/m/typo3/docs-how-to-document/master/en-us/RenderingDocs/Quickstart.html ).
2015-10-22 15:16:40 +02:00
## More Documentation
* [Handout to my workshops on test-driven development (TDD) ](https://github.com/oliverklee/tdd-reader )
2020-10-10 14:02:59 +02:00
* [Handout for best practices with extbase and fluid ](https://github.com/oliverklee/workshop-handouts/blob/main/extbase-best-practices/extbase-best-practices.pdf )
2015-10-22 15:16:40 +02:00
## Other example projects
* [Selenium demo ](https://github.com/oliverklee/selenium-demo )
for using Selenium with PHPUnit
* [Anagram finder ](https://github.com/oliverklee/anagram-finder )
is the finished result of a code kata for TDD
* [Coffee example ](https://github.com/oliverklee/coffee )
2017-04-10 20:05:40 +02:00
is my starting point for demonstrating TDD with TYPO3 CMS
* [TDD Seed ](https://github.com/oliverklee/tdd-seed )
for starting PHPUnit projects with Composer (without TYPO3 CMS)