-
Notifications
You must be signed in to change notification settings - Fork 2
Docker Compose
This page is an early draft on how to add Lumiere to a plugin (particularly payment gateways) to run the shared tests using the docker compose environment.
-
Add Lumiere repository to composer:
{ "type": "vcs", "url": "[email protected]:skyverge/lumiere.git" }
-
Require
skyverge/lumiere
as a development dependency:composer require codeception/module-db codeception/module-webdriver lucatume/wp-browser:2.4.8 skyverge/lumiere --dev
-
lumiere up
-
codecept build
-
docker-compose.yml
version: '2'
services:
codeception:
volumes:
- $PWD:/project
- $PWD:/wordpress/wp-content/plugins/$PLUGIN_DIR
wordpress:
volumes:
- $PWD:/var/www/html/wp-content/plugins/$PLUGIN_DIR
wp-bootstrap.sh
wp wc payment_gateway update {gateway_id} --enabled=true --user=admin
wp option patch insert woocommerce_{gateway_id}_settings debug_mode "log"
wp option patch insert woocommerce_{gateway_id}_settings transaction_type "authorization"
wp option patch insert woocommerce_{gateway_id}_settings charge_virtual_orders "yes"
wp option patch insert woocommerce_{gateway_id}_settings enable_paid_capture "yes"
wp option patch insert woocommerce_{gateway_id}_settings tokenization "yes"
wp option patch insert woocommerce_{gateway_id}_settings environment "test"
# set gateway specific configuration options
-
_support/Traits/PaymentGatewayMethods.php
example -
bootstrap.php
andcodeception.dist.yml
-
The main extension points are the abstract methods (get_gateway , get_plugin ), place_order , get_credit_cards_data , get_payment_tokens_data.
-
Extend shared Cests
The shared tests define abstract methods that plugins should implement in order to provide plugin-specific information to the test. One way to avoid having to implement those methods in every Cest, is to create a trait with the necessary methods.
Use the template below to create a tests/_support/Traits/PaymentGatewayMethods.php
trait with the get_plugin()
and get_gateway()
methods, necessary to run shared payment gateway tests.
<?php
namespace SkyVerge\WooCommerce\{PaymentGateway}\Tests\Traits;
trait PaymentGatewayMethods {
/**
* Gets the plugin instance.
*
* TODO: define the @return tag
*/
protected function get_plugin() {
// TODO: return an instance of the plugin
}
/**
* Gets the payment gateway instance.
*
* TODO: define the @return tag
*/
protected function get_gateway() {
// TODO: return an instance of the payment gateway
}
}
The next step is to allow that trait to be autoloaded using Codeception's Autoload
utility class.
Update codeception.dist.yml
to define a bootstrap file by adding the following line after extends
:
bootstrap: bootstrap.php
Then, create the tests/bootstrap.php
file and declare the trait's namespace:
<?php
use Codeception\Util\Autoload;
// TODO: update namespace
Autoload::addNamespace( 'SkyVerge\WooCommerce\{PaymentGateway}\Tests\Traits', __DIR__ . '/_support/Traits/' );
Lumiere includes tests for several tokenization scenarios:
To implement those tests in a payment gateway, you should add a tests/frontend/CreditCardTokenizationCest.php
class that extends Lumiere's class with the same name:
<?php
use SkyVerge\Lumiere\Tests as Tests;
use SkyVerge\WooCommerce\{PaymentGateway}\Tests\Traits\PaymentGatewayMethods;
class CreditCardTokenizationCest extends Tests\Frontend\PaymentGateways\CreditCardTokenizationCest {
use PaymentGatewayMethods;
}
-
Remove existing services:
docker-compose -f vendor/skyverge/lumiere/docker/docker-compose.yml -f docker-compose.yml --env-file=.env.lumiere.dist --project-name=lumiere down --volumes
-
Build services in case there are changes in the Dockerfile or entry-point scripts
docker-compose -f vendor/skyverge/lumiere/docker/docker-compose.yml -f docker-compose.yml --env-file=.env.lumiere.dist --project-name=lumiere build
-
Bootstrap a new Codeception service:
docker-compose -f vendor/skyverge/lumiere/docker/docker-compose.yml -f docker-compose.yml --env-file=.env.lumiere.dist --project-name=lumiere run --rm codeception bootstrap
-
Run the
frontend
test suitedocker-compose -f vendor/skyverge/lumiere/docker/docker-compose.yml -f docker-compose.yml --env-file=.env.lumiere.dist --project-name=lumiere run --workdir /wordpress/wp-content/plugins/woocommerce-gateway-{gateway} --rm codeception vendor/bin/codecept run frontend