# Testing ## Runing the tests ### Start MISP in test mode ``` $ docker-compose -f docker-compose.yml -f docker-compose.dev.yml --env-file="./docker/.env.test" up --build ``` ### Run tests ``` $ docker-compose -f docker-compose.yml -f docker-compose.dev.yml --env-file="./docker/.env.test" exec misp vendor/bin/phpunit ``` If running locally: Add a `misp3_test` database to the database: ```mysql CREATE DATABASE misp3_test; GRANT ALL PRIVILEGES ON misp3_test.* to misp@'%'; FLUSH PRIVILEGES; QUIT; ``` Update the `app_local.php` file found in /path/to/MISP/config/app_local.php ``` return [ ... 'Datasources' => [ ... 'test' => [ 'username' => 'misp', 'password' => 'YOUR_MYSQL_MISP_USER_PASSWORD', 'database' => 'misp3_test' ] ``` ``` $ composer install $ composer test > phpunit [ * ] Running DB migrations, it may take some time ... 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`: ```xml ... ``` ## Extras ### 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: ```php $this->assertResponseMatchesOpenApiSpec(self::ENDPOINT); ``` The default OpenAPI spec path is set in `phpunit.xml` as a environment variablea: ```xml ... ``` ### Debugging tests ``` $ export XDEBUG_CONFIG="idekey=VSCODE" $ phpunit ```