This commit is contained in:
Oliver Davies 2020-03-13 22:18:55 +00:00
commit 5adc4f6a10
12 changed files with 8540 additions and 0 deletions

56
.github/workflows/run-tests.yml vendored Normal file
View file

@ -0,0 +1,56 @@
name: Run tests
on:
push:
jobs:
tests:
runs-on: ubuntu-latest
name: "Run ${{ matrix.test-types }} tests"
strategy:
fail-fast: true
matrix:
test-types:
- functional
- kernel
- unit
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Cache dependencies
uses: actions/cache@v1
with:
path: ~/.composer/cache/files
key: dependencies-composer-${{ hashFiles('composer.json') }}
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: 7.3
extensions: mbstring
coverage: none
- name: Install the Symfony local web server
run: |
wget https://get.symfony.com/cli/installer -O - | bash
mv /home/runner/.symfony/bin/symfony /usr/local/bin/symfony
- name: Install dependencies
run: composer install --prefer-dist --no-interaction --no-suggest
- name: Start the local web server
run: symfony serve -d
if: matrix.test-types == 'functional'
- name: Execute tests
run: composer test -- --testsuite=${{ matrix.test-types }}
env:
SIMPLETEST_BASE_URL: http://localhost:8000
- name: Stop the local web server
run: symfony server:stop
if: matrix.test-types == 'functional'

14
.gitignore vendored Normal file
View file

@ -0,0 +1,14 @@
*
!*/
!/.github/**
!/.gitignore
!/**/.gitkeep
!/.idea/*.iml
!/composer.json
!/composer.lock
!/docker-compose.yaml
!/Makefile
!/php.ini
!/web/sites/default/settings.php
!/web/sites/default/settings.symfony.php
/vendor/

View file

@ -0,0 +1,135 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/vendor" />
<excludeFolder url="file://$MODULE_DIR$/vendor/asm89/stack-cors" />
<excludeFolder url="file://$MODULE_DIR$/vendor/behat/mink" />
<excludeFolder url="file://$MODULE_DIR$/vendor/behat/mink-browserkit-driver" />
<excludeFolder url="file://$MODULE_DIR$/vendor/behat/mink-goutte-driver" />
<excludeFolder url="file://$MODULE_DIR$/vendor/behat/mink-selenium2-driver" />
<excludeFolder url="file://$MODULE_DIR$/vendor/chi-teck/drupal-code-generator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/consolidation/annotated-command" />
<excludeFolder url="file://$MODULE_DIR$/vendor/consolidation/config" />
<excludeFolder url="file://$MODULE_DIR$/vendor/consolidation/filter-via-dot-access-data" />
<excludeFolder url="file://$MODULE_DIR$/vendor/consolidation/log" />
<excludeFolder url="file://$MODULE_DIR$/vendor/consolidation/output-formatters" />
<excludeFolder url="file://$MODULE_DIR$/vendor/consolidation/robo" />
<excludeFolder url="file://$MODULE_DIR$/vendor/consolidation/self-update" />
<excludeFolder url="file://$MODULE_DIR$/vendor/consolidation/site-alias" />
<excludeFolder url="file://$MODULE_DIR$/vendor/consolidation/site-process" />
<excludeFolder url="file://$MODULE_DIR$/vendor/container-interop/container-interop" />
<excludeFolder url="file://$MODULE_DIR$/vendor/dflydev/dot-access-data" />
<excludeFolder url="file://$MODULE_DIR$/vendor/dnoegel/php-xdg-base-dir" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/annotations" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/cache" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/collections" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/common" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/inflector" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/instantiator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/lexer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/drupal/coder" />
<excludeFolder url="file://$MODULE_DIR$/vendor/drupal/core-composer-scaffold" />
<excludeFolder url="file://$MODULE_DIR$/vendor/drush/drush" />
<excludeFolder url="file://$MODULE_DIR$/vendor/easyrdf/easyrdf" />
<excludeFolder url="file://$MODULE_DIR$/vendor/egulias/email-validator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/fabpot/goutte" />
<excludeFolder url="file://$MODULE_DIR$/vendor/grasmash/expander" />
<excludeFolder url="file://$MODULE_DIR$/vendor/grasmash/yaml-expander" />
<excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/guzzle" />
<excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/promises" />
<excludeFolder url="file://$MODULE_DIR$/vendor/guzzlehttp/psr7" />
<excludeFolder url="file://$MODULE_DIR$/vendor/instaclick/php-webdriver" />
<excludeFolder url="file://$MODULE_DIR$/vendor/jakub-onderka/php-console-color" />
<excludeFolder url="file://$MODULE_DIR$/vendor/jakub-onderka/php-console-highlighter" />
<excludeFolder url="file://$MODULE_DIR$/vendor/jcalderonzumba/gastonjs" />
<excludeFolder url="file://$MODULE_DIR$/vendor/jcalderonzumba/mink-phantomjs-driver" />
<excludeFolder url="file://$MODULE_DIR$/vendor/justinrainbow/json-schema" />
<excludeFolder url="file://$MODULE_DIR$/vendor/league/container" />
<excludeFolder url="file://$MODULE_DIR$/vendor/masterminds/html5" />
<excludeFolder url="file://$MODULE_DIR$/vendor/mikey179/vfsstream" />
<excludeFolder url="file://$MODULE_DIR$/vendor/myclabs/deep-copy" />
<excludeFolder url="file://$MODULE_DIR$/vendor/nikic/php-parser" />
<excludeFolder url="file://$MODULE_DIR$/vendor/paragonie/random_compat" />
<excludeFolder url="file://$MODULE_DIR$/vendor/pear/archive_tar" />
<excludeFolder url="file://$MODULE_DIR$/vendor/pear/console_getopt" />
<excludeFolder url="file://$MODULE_DIR$/vendor/pear/pear-core-minimal" />
<excludeFolder url="file://$MODULE_DIR$/vendor/pear/pear_exception" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phar-io/manifest" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phar-io/version" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/reflection-common" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/reflection-docblock" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpdocumentor/type-resolver" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpspec/prophecy" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-code-coverage" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-file-iterator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-text-template" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-timer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/php-token-stream" />
<excludeFolder url="file://$MODULE_DIR$/vendor/phpunit/phpunit" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/container" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/http-message" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psr/log" />
<excludeFolder url="file://$MODULE_DIR$/vendor/psy/psysh" />
<excludeFolder url="file://$MODULE_DIR$/vendor/ralouphie/getallheaders" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/code-unit-reverse-lookup" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/comparator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/diff" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/environment" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/exporter" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/global-state" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/object-enumerator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/object-reflector" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/recursion-context" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/resource-operations" />
<excludeFolder url="file://$MODULE_DIR$/vendor/sebastian/version" />
<excludeFolder url="file://$MODULE_DIR$/vendor/seld/jsonlint" />
<excludeFolder url="file://$MODULE_DIR$/vendor/seld/phar-utils" />
<excludeFolder url="file://$MODULE_DIR$/vendor/squizlabs/php_codesniffer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/stack/builder" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony-cmf/routing" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/browser-kit" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/class-loader" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/console" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/css-selector" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/debug" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/dependency-injection" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/dom-crawler" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/event-dispatcher" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/filesystem" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/finder" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/http-foundation" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/http-kernel" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/lock" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/phpunit-bridge" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-ctype" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-iconv" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-mbstring" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php56" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php70" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-php72" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/polyfill-util" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/process" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/psr-http-message-bridge" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/routing" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/serializer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/translation" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/validator" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/var-dumper" />
<excludeFolder url="file://$MODULE_DIR$/vendor/symfony/yaml" />
<excludeFolder url="file://$MODULE_DIR$/vendor/theseer/tokenizer" />
<excludeFolder url="file://$MODULE_DIR$/vendor/twig/twig" />
<excludeFolder url="file://$MODULE_DIR$/vendor/typo3/phar-stream-wrapper" />
<excludeFolder url="file://$MODULE_DIR$/vendor/webflo/drupal-finder" />
<excludeFolder url="file://$MODULE_DIR$/vendor/webmozart/assert" />
<excludeFolder url="file://$MODULE_DIR$/vendor/webmozart/path-util" />
<excludeFolder url="file://$MODULE_DIR$/vendor/zendframework/zend-diactoros" />
<excludeFolder url="file://$MODULE_DIR$/vendor/zendframework/zend-escaper" />
<excludeFolder url="file://$MODULE_DIR$/vendor/zendframework/zend-feed" />
<excludeFolder url="file://$MODULE_DIR$/vendor/zendframework/zend-stdlib" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

13
README.md Normal file
View file

@ -0,0 +1,13 @@
# Drupal Automated Testing Workshop: Example Code
## Updates
If we need to update any of the commits, the changes should be rebased into the existing commits so that they continue to be in a linear order as per the workshop document.
As we want GitHub Actions to run for each commit, we cant just push the latest commit as that would only trigger a build on the final commit. To do this, we can loop over each of the commit SHAs and push each one separately:
```bash
for sha1 in $(git rev-list HEAD --reverse) ; do
git push origin $sha1:master --force
done
```

60
composer.json Normal file
View file

@ -0,0 +1,60 @@
{
"name": "drupal/recommended-project",
"description": "Project template for Drupal 8 projects with a relocated document root",
"type": "project",
"license": "GPL-2.0-or-later",
"homepage": "https://www.drupal.org/project/drupal",
"support": {
"docs": "https://www.drupal.org/docs/user_guide/en/index.html",
"chat": "https://www.drupal.org/node/314178"
},
"repositories": [
{
"type": "composer",
"url": "https://packages.drupal.org/8"
}
],
"require": {
"composer/installers": "^1.2",
"drupal/admin_toolbar": "^2.0",
"drupal/config_installer": "^1.8",
"drupal/core-composer-scaffold": "^8.8",
"drupal/core-recommended": "^8.8",
"drush/drush": "^9"
},
"require-dev": {
"drupal/core-dev": "^8.8"
},
"conflict": {
"drupal/drupal": "*"
},
"minimum-stability": "dev",
"prefer-stable": true,
"scripts": {
"phpunit": "phpunit --verbose --testdox",
"test": [
"@phpunit"
]
},
"config": {
"bin-dir": "bin",
"sort-packages": true
},
"extra": {
"drupal-scaffold": {
"locations": {
"web-root": "web/"
}
},
"installer-paths": {
"web/core": ["type:drupal-core"],
"web/libraries/{$name}": ["type:drupal-library"],
"web/modules/contrib/{$name}": ["type:drupal-module"],
"web/profiles/contrib/{$name}": ["type:drupal-profile"],
"web/themes/contrib/{$name}": ["type:drupal-theme"],
"drush/Commands/contrib/{$name}": ["type:drupal-drush"],
"web/modules/custom/{$name}": ["type:drupal-custom-module"],
"web/themes/custom/{$name}": ["type:drupal-custom-theme"]
}
}
}

8177
composer.lock generated Normal file

File diff suppressed because it is too large Load diff

0
config/default/.gitkeep Normal file
View file

24
docker-compose.yaml Normal file
View file

@ -0,0 +1,24 @@
version: '2.1'
services:
database:
image: mysql:5.7
ports: [3306]
environment:
MYSQL_ROOT_PASSWORD: secret
volumes:
- mysql-data:/var/lib/mysql
database_umami:
image: mysql:5.7
ports: [3306]
environment:
MYSQL_ROOT_PASSWORD: secret
volumes:
- mysql-data-umami:/var/lib/mysql
labels:
com.symfony.server.service-prefix: 'DATABASE_UMAMI'
volumes:
mysql-data:
mysql-data-umami:

2
php.ini Normal file
View file

@ -0,0 +1,2 @@
[Date]
date.timezone = Europe/London

31
phpunit.xml.dist Normal file
View file

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="./web/core/tests/bootstrap.php" colors="true"
beStrictAboutTestsThatDoNotTestAnything="true"
beStrictAboutOutputDuringTests="true"
beStrictAboutChangesToGlobalState="true"
printerClass="\Drupal\Tests\Listeners\HtmlOutputPrinter">
<php>
<ini name="error_reporting" value="32767"/>
<ini name="memory_limit" value="-1"/>
<env name="SIMPLETEST_BASE_URL" value="https://localhost:8000"/>
<env name="SIMPLETEST_DB" value="sqlite://localhost//tmp/test.sqlite"/>
<env name="BROWSERTEST_OUTPUT_DIRECTORY" value=""/>
<env name="BROWSERTEST_OUTPUT_BASE_URL" value=""/>
<env name="MINK_DRIVER_CLASS" value=''/>
<env name="MINK_DRIVER_ARGS" value=''/>
<env name="MINK_DRIVER_ARGS_PHANTOMJS" value=''/>
<env name="MINK_DRIVER_ARGS_WEBDRIVER" value=''/>
</php>
<testsuites>
<testsuite name="functional">
<directory>./web/modules/custom/**/tests/**/Functional</directory>
</testsuite>
<testsuite name="kernel">
<directory>./web/modules/custom/**/tests/**/Kernel</directory>
</testsuite>
<testsuite name="unit">
<directory>./web/modules/custom/**/tests/**/Unit</directory>
</testsuite>
</testsuites>
</phpunit>

View file

@ -0,0 +1,15 @@
<?php
// @codingStandardsIgnoreFile
$settings['hash_salt'] = '53cr3t!';
$settings["config_sync_directory"] = '../config/default';
if ($_SERVER['SYMFONY_DOCKER_ENV'] && file_exists(__DIR__ . '/settings.symfony.php')) {
require_once __DIR__ . '/settings.symfony.php';
}
if (file_exists(__DIR__ . '/settings.local.php')) {
require_once __DIR__ . '/settings.local.php';
}

View file

@ -0,0 +1,13 @@
<?php
$databases['default']['default'] = [
'driver' => $_SERVER['DATABASE_DRIVER'],
'host' => $_SERVER['DATABASE_HOST'],
'database' => $_SERVER['DATABASE_NAME'],
'username' => $_SERVER['DATABASE_USER'],
'password' => $_SERVER['DATABASE_PASSWORD'],
'port' => $_SERVER['DATABASE_PORT'],
'prefix' => '',
'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
'collation' => 'utf8mb4_general_ci',
];