cerebrate/tests
iglocska 2ef2dbbe62
fix: [tests] changed assertion for authkey failure on insufficient privilege from 404 to 405
2022-02-20 14:48:29 +01:00
..
Fixture add: initial version of cerebrate->cerebrate misp interconnection 2022-01-25 18:01:51 +01:00
Helper chg: add wiremock stub verification 2022-01-27 15:43:33 +01:00
TestCase fix: [tests] changed assertion for authkey failure on insufficient privilege from 404 to 405 2022-02-20 14:48:29 +01:00
README.md chg: remove todo section 2022-01-19 16:13:37 +01:00
bootstrap.php chg: move openapi validator initialization to tests/bootstrap.php so its only parsed once. 2022-01-19 16:08:50 +01:00

README.md

Testing

  1. Add a cerebrate_test database to the database:
CREATE DATABASE cerebrate_test;
GRANT ALL PRIVILEGES ON cerebrate_test.* to cerebrate@localhost;
FLUSH PRIVILEGES;
QUIT;
  1. Add a the test database to your config/app_local.php config file and set debug mode to true.
'debug' => true,
'Datasources' => [
    'default' => [
        ...
    ],
    /*
        * The test connection is used during the test suite.
        */
    'test' => [
        'host' => 'localhost',
        'username' => 'cerebrate',
        'password' => 'cerebrate',
        'database' => 'cerebrate_test',
    ],
],

Runing the tests

$ composer install
$ composer test
> sh ./tests/Helper/wiremock/start.sh
WireMock 1 started on port 8080
> phpunit
[ * ] Running DB migrations, it may take some time ...

The WireMock server is started .....
port:                         8080
enable-browser-proxying:      false
disable-banner:               true
no-request-journal:           false
verbose:                      false

PHPUnit 8.5.22 by Sebastian Bergmann and contributors.


.....                                     5 / 5 (100%)

Time: 11.61 seconds, Memory: 26.00 MB

OK (5 tests, 15 assertions)

Running a specific suite:

$ vendor/bin/phpunit --testsuite=api --testdox

Available suites:

  • app: runs all test suites
  • api: runs only api tests
  • controller: runs only controller tests
  • to be continued ...

By default the database is re-generated before running the test suite, to skip this step and speed up the test run set the following env variable in phpunit.xml:

<php>
    ...
    <env name="SKIP_DB_MIGRATIONS" value="1" />
</php>

Extras

WireMock

Some integration tests perform calls to external APIs, we use WireMock to mock the response of these API calls.

To download and run WireMock run the following script in a separate terminal: sh ./tests/Helper/wiremock/start.sh

You can also run WireMock with docker, check the official docs: http://wiremock.org/docs/docker/

NOTE: When running the tests with composer test WireMock is automatically started and stoped after the tests finish.

The default hostname and port for WireMock are set in phpunit.xml as environment variables:

<php>
    ...
    <env name="WIREMOCK_HOST" value="localhost" />
    <env name="WIREMOCK_PORT" value="8080" />
</php>

Coverage

HTML:

$ vendor/bin/phpunit --coverage-html tmp/coverage

XML:

$ vendor/bin/phpunit --verbose --coverage-clover=coverage.xml

OpenAPI validation

API tests can assert the API response matches the OpenAPI specification, after the request add this line:

$this->assertResponseMatchesOpenApiSpec(self::ENDPOINT);

The default OpenAPI spec path is set in phpunit.xml as a environment variablea:

<php>
    ...
    <env name="OPENAPI_SPEC" value="webroot/docs/openapi.yaml" />
</php>

Debugging tests

$ export XDEBUG_CONFIG="idekey=IDEKEY"
$ phpunit