# Example module for integrations tests

## Preferences
This example uses https://gitlab.met.tdintern.de/met/test-executor library to run the tests. This library needs to be installed as a global composer requirement inside your gitlab-runner. Inside our CI-Server (BDF) infrastructure there is a ready to use provisioning playbook for ansible. Please see https://gitlab.met.tdintern.de/met/ansible-ci/blob/master/playbooks/provision-worker-test-container-php72.yml

## Execute tests
Every test run is split into three steps
- setup (before_script)
- tests (script)
- cleanup (after_script)

This is necessary since we do not destroy and recreate the testing containers after each run, the after_script ensures, that the environment will be cleaned finally.
Define your jobs inside your `.gitlab-ci.yml` file as following to execute the tests:

```yml
job-name:
  before_script:
    - ~/.composer/vendor/met/test-executor/run.sh setup
  script:
    - ~/.composer/vendor/met/test-executor/run.sh tests
  after_script:
    - ~/.composer/vendor/met/test-executor/run.sh cleanup
``` 

## Test configuration
While the test execution is the same for every kind of test and environment there are several variables, which allow you to specify your test requirements. The only required one ist `EXECUTOR_SUITE`, which defines the scripts to be executed during the three steps of your test job.

Inside your `.gitlab-ci.yml` this variable will be defined as follows:
```yml
job-name:
  variables:
    EXECUTOR_SUITE: module-integration
  before_script:
    - ~/.composer/vendor/met/test-executor/run.sh setup
  script:
    - ~/.composer/vendor/met/test-executor/run.sh tests
  after_script:
    - ~/.composer/vendor/met/test-executor/run.sh cleanup
```
Depending on the choosen EXECUTOR_SUITE, there is a bunch of additional variables, which could be set for your test job.

## Executor Suites
### module-integration
#### Purpose
This executor suite runs integration tests of a single module.

#### Most interesting variables
A list of all available variables will be displayed inside the job execution log.

| Variable | Default Value | Description
|---|---|---|
| MAGENTO_EDITION | community | Posible values: community, enterprise; This variable specifies the Magento edition, which will be installed to run the tests |
| MAGENTO_VERSION | 2.3.* | This variable specifies the Magento version, which will be installed to run the tests; Every composer version spelling is possible. |
| PHPUNIT_CONFIG_FILE | Test/Integration/phpunit.gitlab.xml | This variable specifies phpunit.xml file will be used for your integration tests. It is recommended to use the default settings. |

#### Example `.gitlab-ci.yml`
```yml
stages:
  - test

integration-ce-22-php72:
  stage: test
  tags:
    - php72
  variables:
    EXECUTOR_SUITE: module-integration
    MAGENTO_EDITION: community
    MAGENTO_VERSION: 2.2.*
    COVERAGE_REPORT: html
  before_script:
    - ~/.composer/vendor/met/test-executor/run.sh setup
  script:
    - ~/.composer/vendor/met/test-executor/run.sh tests
  after_script:
    - ~/.composer/vendor/met/test-executor/run.sh cleanup
  artifacts:
    paths:
      - ./report
    expire_in: 1 week

integration-ce-23-php73:
  stage: test
  tags:
    - php73
  variables:
    EXECUTOR_SUITE: module-integration
    MAGENTO_EDITION: community
    MAGENTO_VERSION: 2.3.*
  before_script:
    - ~/.composer/vendor/met/test-executor/run.sh setup
  script:
    - ~/.composer/vendor/met/test-executor/run.sh tests
  after_script:
    - ~/.composer/vendor/met/test-executor/run.sh cleanup
```