PHPackages                             sandstorm/neos-init-e2e-tests-plugin - 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. sandstorm/neos-init-e2e-tests-plugin

ActiveComposer-plugin[Testing &amp; Quality](/categories/testing)

sandstorm/neos-init-e2e-tests-plugin
====================================

A Composer plugin that scaffolds end-to-end (E2E) test infrastructure for Neos CMS packages.

1.0.1(2mo ago)06MITShellPHP &gt;=8.2

Since Mar 31Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/sandstorm/Sandstorm.NeosInitE2ETestsPlugin)[ Packagist](https://packagist.org/packages/sandstorm/neos-init-e2e-tests-plugin)[ RSS](/packages/sandstorm-neos-init-e2e-tests-plugin/feed)WikiDiscussions main Synced 4w ago

READMEChangelog (2)Dependencies (2)Versions (5)Used By (0)

Sandstorm.NeosInitE2ETestsPlugin
================================

[](#sandstormneosinite2etestsplugin)

A Composer plugin that scaffolds end-to-end (E2E) test infrastructure for Neos CMS packages. Run one command and get a fully wired Playwright BDD test suite with Docker-based Neos environments for both Neos 8 and Neos 9.

What it does
------------

[](#what-it-does)

When you run `composer e2e:init` inside a Neos package, the plugin copies a ready-to-use test scaffold into your project. The scaffold includes:

- A Playwright + BDD test suite (TypeScript, Gherkin feature files)
- Dockerised system-under-test (SUT) configurations for **Neos 8** and **Neos 9**
- A `Makefile` with shortcuts for setup, running tests, and managing containers
- A GitHub Actions workflow for CI

Prerequisites
-------------

[](#prerequisites)

- PHP &gt;= 8.2
- Composer &gt;= 2.0
- Docker (for the system-under-test containers)
- Node.js &gt;= 24 / nvm (for running Playwright tests)

Installation
------------

[](#installation)

Add the plugin to your package's dev dependencies:

```
composer require --dev sandstorm/neos-init-e2e-tests-plugin
```

Usage
-----

[](#usage)

Inside the root of your Neos package, run:

```
composer e2e:init
```

### Without Composer (bash bootstrap)

[](#without-composer-bash-bootstrap)

If you don't want to add a dev dependency just for the one-shot scaffold, run the bundled bash script instead. It downloads the template directly from GitHub and applies the same logic. From the root of your Neos package:

```
curl -fsSL https://raw.githubusercontent.com/sandstorm/Sandstorm.NeosInitE2ETestsPlugin/main/init-e2e-tests.sh | bash
```

To pin a specific ref, set `E2E_REF`:

```
E2E_REF=v1.2.3 curl -fsSL https://raw.githubusercontent.com/sandstorm/Sandstorm.NeosInitE2ETestsPlugin/main/init-e2e-tests.sh | bash
```

Requires `curl`, `tar`, `jq`, and `sed` in `PATH`.

The plugin reads your `composer.json` to determine the package name and derives the Neos package key automatically (e.g. `vendor/my-package` → `Vendor.MyPackage`). It then copies the template into your project, substituting those values wherever needed.

**The operation is non-destructive** — existing files are never overwritten. Pass `-v` to see which files are skipped:

```
composer e2e:init -v
```

### Overriding the package key

[](#overriding-the-package-key)

If the derived package key doesn't match your Neos package, set it explicitly in your `composer.json`:

```
{
    "extra": {
        "neos": {
            "package-key": "Vendor.MyPackage"
        }
    }
}
```

### Template variables

[](#template-variables)

The following placeholders are replaced in all copied files:

PlaceholderExample valueSource`{{PackageName}}``vendor/my-package``name` field in `composer.json``{{PackageKey}}``Vendor.MyPackage`derived from `{{PackageName}}`, or `extra.neos.package-key`Scaffolded structure
--------------------

[](#scaffolded-structure)

```
Tests/
├── Makefile                         # Developer shortcuts
├── README.md                        # How to run and write tests
├── E2E/                             # Playwright BDD test suite
│   ├── features/                    # Gherkin feature files
│   ├── steps/                       # TypeScript step implementations
│   ├── helpers/                     # Page objects and system utilities
│   ├── playwright.config.ts
│   └── package.json
└── system_under_test/               # Docker environments
    ├── Dockerfile
    ├── sut-base-docker-compose.yaml # Shared compose base
    ├── neos8/                       # Neos 8 + PHP 8.2 + MariaDB 10.11
    ├── neos9/                       # Neos 9 + PHP 8.5 + MariaDB 11.4
    └── sut_file_system_overrides/   # Neos/PHP/web server config

.github/
└── workflows/
    └── e2e.yml                      # GitHub Actions CI workflow

```

See `Tests/README.md` (created in your project) for instructions on running tests and writing new ones.

How the SUT works
-----------------

[](#how-the-sut-works)

Each Docker environment starts a full Neos stack (FrankenPHP web server, MariaDB, Redis). On startup the container:

1. Registers your local package as a Composer path repository
2. Requires it at `@dev`
3. Runs database migrations
4. Imports the Neos demo site
5. Publishes static resources
6. Starts the web server on port `8081`

Playwright's `webServer` configuration starts the containers automatically before each test run and the global teardown stops them afterwards.

Development
-----------

[](#development)

Clone the repo and install dependencies:

```
composer install
```

The plugin source lives in `src/` and the template that gets copied into projects lives in `template/`.

###  Health Score

39

—

LowBetter than 85% of packages

Maintenance87

Actively maintained with recent releases

Popularity4

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity49

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

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 ~9 days

Total

2

Last Release

82d ago

### Community

Maintainers

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

---

Top Contributors

[![JamesAlias](https://avatars.githubusercontent.com/u/1615332?v=4)](https://github.com/JamesAlias "JamesAlias (11 commits)")

### Embed Badge

![Health badge](/badges/sandstorm-neos-init-e2e-tests-plugin/health.svg)

```
[![Health](https://phpackages.com/badges/sandstorm-neos-init-e2e-tests-plugin/health.svg)](https://phpackages.com/packages/sandstorm-neos-init-e2e-tests-plugin)
```

###  Alternatives

[phpro/grumphp

A composer plugin that enables source code quality checks.

4.3k16.3M979](/packages/phpro-grumphp)[dealerdirect/phpcodesniffer-composer-installer

PHP\_CodeSniffer Standards Composer Installer Plugin

601170.6M2.3k](/packages/dealerdirect-phpcodesniffer-composer-installer)[symfony/runtime

Enables decoupling PHP applications from global state

74794.9M945](/packages/symfony-runtime)[drupal/core-composer-scaffold

A flexible Composer project scaffold builder.

5344.1M527](/packages/drupal-core-composer-scaffold)[codeception/c3

CodeCoverage collector for Codeception

745.5M61](/packages/codeception-c3)[drupal/core-project-message

Adds a message after Composer installation.

2124.0M194](/packages/drupal-core-project-message)

PHPackages © 2026

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