PHPackages                             ttn/tea - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Testing &amp; Quality](/categories/testing)
4. /
5. ttn/tea

ActiveTypo3-cms-extension[Testing &amp; Quality](/categories/testing)

ttn/tea
=======

TYPO3 example extension for unit testing and best practices

v3.1.0(2y ago)9121.5k↓100%31[113 issues](https://github.com/TYPO3BestPractices/tea/issues)[8 PRs](https://github.com/TYPO3BestPractices/tea/pulls)GPL-2.0-or-laterPHPPHP ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0CI passing

Since Oct 12Pushed 1mo ago9 watchersCompare

[ Source](https://github.com/TYPO3BestPractices/tea)[ Packagist](https://packagist.org/packages/ttn/tea)[ Docs](https://extensions.typo3.org/extension/tea/)[ RSS](/packages/ttn-tea/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (6)Dependencies (24)Versions (25)Used By (0)

Example TYPO3 extension for code quality checks and automated tests
===================================================================

[](#example-typo3-extension-for-code-quality-checks-and-automated-tests)

[![TYPO3 V12](https://camo.githubusercontent.com/08afacc49187e63c796f7d1c4401d0f0563bab574d9c525312b2827acb09a7c5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5459504f332d31322d6f72616e67652e737667)](https://get.typo3.org/version/12)[![License](https://camo.githubusercontent.com/6f77102efc04cb47aa0216366d2ad0c29d9adeb4dad2278a9b7b979bbf20ccfe/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f5459504f33426573745072616374696365732f746561)](https://packagist.org/packages/ttn/tea)[![GitHub CI status](https://github.com/TYPO3BestPractices/tea/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/TYPO3BestPractices/tea/actions)[![Coverage Status](https://camo.githubusercontent.com/cd722b7dd6f2006c98bf91bc9c7076a087ed9120a41e054e0c753fc772612e12/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f5459504f33426573745072616374696365732f7465612f62616467652e7376673f6272616e63683d6d61696e)](https://coveralls.io/github/TYPO3BestPractices/tea?branch=main)

This TYPO3 extension, based on Extbase and Fluid, is an example of best practices in automated code checks, unit/functional/acceptance testing and continuous integration.

You can also use this extension to manage your collection of delicious teas.

URL**Repository:****Read online:****TER:****Slack:**Feedback
--------

[](#feedback)

We value and welcome feedback of all kinds, including discussions. Feedback can be sent via TYPO3 slack within [our channel](https://app.slack.com/client/T024TUMLZ/CSQ8T0VS5) or via direct massages to the team members. We also welcome email. All the contact information is available at our [team page](https://typo3.community/contribute/teams-committees/best-practices). Another way is to create a [discussion on GitHub](https://github.com/TYPO3BestPractices/tea/discussions).

Philosophies
------------

[](#philosophies)

The following is a list of our code and technical philosophies only. Our [team page](https://typo3.community/contribute/teams-committees/best-practices)provides an overview on how we work in general.

### Semantic Versioning

[](#semantic-versioning)

The project follows [Semantic Versioning](https://semver.org/).

### Align with TYPO3 core

[](#align-with-typo3-core)

We align all decisions with the TYPO3 core, whenever applicable. TYPO3 itself is a mono repository and sometimes needs to make different decisions. We document all divergences within Documentation/DivergencesToTypo3Core/.

Presentation at the TYPO3 Online Days 2021
------------------------------------------

[](#presentation-at-the-typo3-online-days-2021)

At the TYPO3 Online Days 2021, [Oliver Klee](https://www.oliverklee.de/) held a session where her presented our approach for automating the code quality of extensions.

### Slides

[](#slides)

[![cover slide](https://camo.githubusercontent.com/351e33ea6694a08a1bb429c60c7056202129ccafa871eac0a5b4987f4de4134f/68747470733a2f2f66696c65732e737065616b65726465636b2e636f6d2f70726573656e746174696f6e732f65383138373064343633653834313538616662396639333339386564303632622f707265766965775f736c6964655f302e6a70673f3139303137393030)](https://speakerdeck.com/oliverklee/automating-the-code-quality-of-your-extensions)

### Video recording

[](#video-recording)

[![video still](https://camo.githubusercontent.com/e2e084aaec0beb536bcb8148443a88709aa25f834e3fc5388a50d9e8cc8ceb9f/68747470733a2f2f696d672e796f75747562652e636f6d2f76692f5f6f65386b7532474d38342f302e6a7067)](https://youtu.be/_oe8ku2GM84?t=6983)

###  Health Score

51

—

FairBetter than 96% of packages

Maintenance43

Moderate activity, may be stable

Popularity43

Moderate usage in the ecosystem

Community29

Small or concentrated contributor base

Maturity75

Established project with proven stability

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~163 days

Recently: every ~183 days

Total

6

Last Release

851d ago

Major Versions

v1.1.0 → v2.0.02022-07-26

v2.0.1 → v3.0.02022-10-19

PHP version history (5 changes)v1.0.0PHP ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0

v2.0.0PHP ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0 || ~8.1

v2.0.1PHP ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0

v3.0.0PHP ~7.4.0 || ~8.0.0 || ~8.1.0

v3.1.0PHP ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/2cc98eb6580d4532340e818ea893009da65365b7f3525f518d143732e838735a?d=identicon)[oliverklee](/maintainers/oliverklee)

---

Top Contributors

[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (593 commits)")[![oliverklee](https://avatars.githubusercontent.com/u/765746?v=4)](https://github.com/oliverklee "oliverklee (574 commits)")[![lukaszuznanski](https://avatars.githubusercontent.com/u/15106746?v=4)](https://github.com/lukaszuznanski "lukaszuznanski (141 commits)")[![DanielSiepmann](https://avatars.githubusercontent.com/u/354250?v=4)](https://github.com/DanielSiepmann "DanielSiepmann (42 commits)")[![d-s-codappix](https://avatars.githubusercontent.com/u/179449418?v=4)](https://github.com/d-s-codappix "d-s-codappix (21 commits)")[![kanow](https://avatars.githubusercontent.com/u/16071530?v=4)](https://github.com/kanow "kanow (21 commits)")[![Starkmann](https://avatars.githubusercontent.com/u/3470953?v=4)](https://github.com/Starkmann "Starkmann (20 commits)")[![sbuerk](https://avatars.githubusercontent.com/u/1453466?v=4)](https://github.com/sbuerk "sbuerk (19 commits)")[![linxpinx](https://avatars.githubusercontent.com/u/412900?v=4)](https://github.com/linxpinx "linxpinx (11 commits)")[![andreaswolf](https://avatars.githubusercontent.com/u/159919?v=4)](https://github.com/andreaswolf "andreaswolf (11 commits)")[![cumuru](https://avatars.githubusercontent.com/u/12487311?v=4)](https://github.com/cumuru "cumuru (10 commits)")[![linawolf](https://avatars.githubusercontent.com/u/48202465?v=4)](https://github.com/linawolf "linawolf (8 commits)")[![AnReiter](https://avatars.githubusercontent.com/u/234920694?v=4)](https://github.com/AnReiter "AnReiter (6 commits)")[![mabolek](https://avatars.githubusercontent.com/u/8200271?v=4)](https://github.com/mabolek "mabolek (5 commits)")[![simonschaufi](https://avatars.githubusercontent.com/u/941794?v=4)](https://github.com/simonschaufi "simonschaufi (4 commits)")[![brotkrueml](https://avatars.githubusercontent.com/u/2566282?v=4)](https://github.com/brotkrueml "brotkrueml (4 commits)")[![jpmschuler](https://avatars.githubusercontent.com/u/12411176?v=4)](https://github.com/jpmschuler "jpmschuler (3 commits)")[![alexander-nitsche](https://avatars.githubusercontent.com/u/20297232?v=4)](https://github.com/alexander-nitsche "alexander-nitsche (2 commits)")[![jonaseberle](https://avatars.githubusercontent.com/u/1678001?v=4)](https://github.com/jonaseberle "jonaseberle (1 commits)")[![marble](https://avatars.githubusercontent.com/u/307057?v=4)](https://github.com/marble "marble (1 commits)")

---

Tags

best-practiceexample-projecthacktoberfestphpquality-assurancetypo3typo3-cms-extensionphpunitunit testingTDDextensionexampletypo3Best-Practices

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/ttn-tea/health.svg)

```
[![Health](https://phpackages.com/badges/ttn-tea/health.svg)](https://phpackages.com/packages/ttn-tea)
```

###  Alternatives

[typo3/testing-framework

The TYPO3 testing framework provides base classes for unit, functional and acceptance testing.

675.0M772](/packages/typo3-testing-framework)[pagemachine/typo3-formlog

Form log for TYPO3

23225.3k6](/packages/pagemachine-typo3-formlog)[eliashaeussler/typo3-warming

Warming - Warms up Frontend caches based on an XML sitemap. Cache warmup can be triggered via TYPO3 backend or using a console command. Supports multiple languages and custom crawler implementations.

20229.9k](/packages/eliashaeussler-typo3-warming)[elliotchance/concise

Concise is test framework for using plain English and minimal code, built on PHPUnit.

45223.8k4](/packages/elliotchance-concise)[seec/phpunit-consecutive-params

Drop-in Trait to use removed ConsecutiveParams from PhpUnit

18672.5k6](/packages/seec-phpunit-consecutive-params)[eliashaeussler/typo3-form-consent

Extension for TYPO3 CMS that adds double opt-in functionality to EXT:form

1481.0k](/packages/eliashaeussler-typo3-form-consent)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
