Merge pull request #337 from acelaya/feature/db-tests

Feature/db tests
This commit is contained in:
Alejandro Celaya 2019-01-21 21:34:30 +01:00 committed by GitHub
commit e7c5cf0846
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 36 additions and 44 deletions

View file

@ -21,7 +21,7 @@ install:
script: script:
- mkdir build - mkdir build
- composer check - composer ci
after_success: after_success:
- rm -f build/clover.xml - rm -f build/clover.xml

View file

@ -2,7 +2,7 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org). The format is based on [Keep a Changelog](https://keepachangelog.com), and this project adheres to [Semantic Versioning](https://semver.org).
## [Unreleased] ## [Unreleased]
@ -33,6 +33,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
* [#320](https://github.com/shlinkio/shlink/issues/320) Replaced query builder by plain DQL for all queries which do not need to be dynamically generated. * [#320](https://github.com/shlinkio/shlink/issues/320) Replaced query builder by plain DQL for all queries which do not need to be dynamically generated.
* [#330](https://github.com/shlinkio/shlink/issues/330) No longer allow failures on PHP 7.3 envs during project CI build. * [#330](https://github.com/shlinkio/shlink/issues/330) No longer allow failures on PHP 7.3 envs during project CI build.
* [#335](https://github.com/shlinkio/shlink/issues/335) Renamed functional test suite to database test suite, since that better describes what it actually does.
#### Deprecated #### Deprecated

View file

@ -80,26 +80,22 @@
"ShlinkioTest\\Shlink\\Rest\\": "module/Rest/test", "ShlinkioTest\\Shlink\\Rest\\": "module/Rest/test",
"ShlinkioTest\\Shlink\\Core\\": [ "ShlinkioTest\\Shlink\\Core\\": [
"module/Core/test", "module/Core/test",
"module/Core/test-func" "module/Core/test-db"
], ],
"ShlinkioTest\\Shlink\\Common\\": [ "ShlinkioTest\\Shlink\\Common\\": [
"module/Common/test", "module/Common/test",
"module/Common/test-func" "module/Common/test-db"
], ],
"ShlinkioTest\\Shlink\\Installer\\": "module/Installer/test" "ShlinkioTest\\Shlink\\Installer\\": "module/Installer/test"
} }
}, },
"scripts": { "scripts": {
"check": [ "ci": [
"@cs", "@cs",
"@stan", "@stan",
"@test:ci", "@test:ci",
"@infect:ci" "@infect:ci"
], ],
"ci": [
"echo \"This command is DEPRECATED. Use check instead\"",
"@check"
],
"cs": "phpcs", "cs": "phpcs",
"cs:fix": "phpcbf", "cs:fix": "phpcbf",
@ -107,15 +103,15 @@
"test": [ "test": [
"@test:unit", "@test:unit",
"@test:func" "@test:db"
], ],
"test:ci": [ "test:ci": [
"@test:unit:ci", "@test:unit:ci",
"@test:func" "@test:db"
], ],
"test:unit": "phpdbg -qrr vendor/bin/phpunit --order-by=random --coverage-php build/coverage-unit.cov", "test:unit": "phpdbg -qrr vendor/bin/phpunit --order-by=random --coverage-php build/coverage-unit.cov",
"test:unit:ci": "phpdbg -qrr vendor/bin/phpunit --order-by=random --coverage-php build/coverage-unit.cov --coverage-clover=build/clover.xml --coverage-xml=build/coverage-xml --log-junit=build/phpunit.junit.xml", "test:unit:ci": "phpdbg -qrr vendor/bin/phpunit --order-by=random --coverage-php build/coverage-unit.cov --coverage-clover=build/clover.xml --coverage-xml=build/coverage-xml --log-junit=build/phpunit.junit.xml",
"test:func": "phpdbg -qrr vendor/bin/phpunit --order-by=random -c phpunit-func.xml --coverage-php build/coverage-func.cov", "test:db": "phpdbg -qrr vendor/bin/phpunit --order-by=random -c phpunit-db.xml --coverage-php build/coverage-db.cov",
"test:pretty": [ "test:pretty": [
"@test", "@test",
@ -123,9 +119,9 @@
], ],
"test:unit:pretty": "phpdbg -qrr vendor/bin/phpunit --coverage-html build/coverage --order-by=random", "test:unit:pretty": "phpdbg -qrr vendor/bin/phpunit --coverage-html build/coverage --order-by=random",
"infect": "infection --threads=4 --min-msi=65 --log-verbosity=2 --only-covered", "infect": "infection --threads=4 --min-msi=65 --log-verbosity=default --only-covered",
"infect:ci": "infection --threads=4 --min-msi=65 --log-verbosity=2 --only-covered --coverage=build", "infect:ci": "infection --threads=4 --min-msi=65 --log-verbosity=default --only-covered --coverage=build",
"infect:show": "infection --threads=4 --min-msi=65 --log-verbosity=2 --only-covered --show-mutations", "infect:show": "infection --threads=4 --min-msi=65 --log-verbosity=default --only-covered --show-mutations",
"infect:test": [ "infect:test": [
"@test:unit:ci", "@test:unit:ci",
"@infect:ci" "@infect:ci"
@ -141,7 +137,7 @@
"test:ci": "<fg=blue;options=bold>Runs all test suites, generating all needed reports and logs for CI envs</>", "test:ci": "<fg=blue;options=bold>Runs all test suites, generating all needed reports and logs for CI envs</>",
"test:unit": "<fg=blue;options=bold>Runs unit test suites</>", "test:unit": "<fg=blue;options=bold>Runs unit test suites</>",
"test:unit:ci": "<fg=blue;options=bold>Runs unit test suites, generating all needed reports and logs for CI envs</>", "test:unit:ci": "<fg=blue;options=bold>Runs unit test suites, generating all needed reports and logs for CI envs</>",
"test:func": "<fg=blue;options=bold>Runs functional test suites (covering entity repositories)</>", "test:db": "<fg=blue;options=bold>Runs database test suites (covering entity repositories)</>",
"test:pretty": "<fg=blue;options=bold>Runs all test suites and generates an HTML code coverage report</>", "test:pretty": "<fg=blue;options=bold>Runs all test suites and generates an HTML code coverage report</>",
"test:unit:pretty": "<fg=blue;options=bold>Runs unit test suites and generates an HTML code coverage report</>", "test:unit:pretty": "<fg=blue;options=bold>Runs unit test suites and generates an HTML code coverage report</>",
"infect": "<fg=blue;options=bold>Checks unit tests quality applying mutation testing</>", "infect": "<fg=blue;options=bold>Checks unit tests quality applying mutation testing</>",

View file

@ -6,6 +6,7 @@ use Doctrine\ORM\Tools\Console\ConsoleRunner;
use Interop\Container\ContainerInterface; use Interop\Container\ContainerInterface;
use Zend\ServiceManager\ServiceManager; use Zend\ServiceManager\ServiceManager;
// If the "--test" flag was provided, we are on a test environment
$isTest = false; $isTest = false;
foreach ($_SERVER['argv'] as $i => $arg) { foreach ($_SERVER['argv'] as $i => $arg) {
if ($arg === '--test') { if ($arg === '--test') {
@ -16,20 +17,7 @@ foreach ($_SERVER['argv'] as $i => $arg) {
} }
/** @var ContainerInterface|ServiceManager $container */ /** @var ContainerInterface|ServiceManager $container */
$container = include __DIR__ . '/container.php'; $container = $isTest ? include __DIR__ . '/test-container.php' : include __DIR__ . '/container.php';
// If in testing env, override DB connection to use an in-memory sqlite database
if ($isTest) {
$container->setAllowOverride(true);
$config = $container->get('config');
$config['entity_manager']['connection'] = [
'driver' => 'pdo_sqlite',
'path' => realpath(sys_get_temp_dir()) . '/shlink-tests.db',
];
$container->setService('config', $config);
}
/** @var EntityManager $em */
$em = $container->get(EntityManager::class); $em = $container->get(EntityManager::class);
return ConsoleRunner::createHelperSet($em); return ConsoleRunner::createHelperSet($em);

14
config/test-container.php Normal file
View file

@ -0,0 +1,14 @@
<?php
declare(strict_types=1);
$container = include __DIR__ . '/container.php';
$container->setAllowOverride(true);
$config = $container->get('config');
$config['entity_manager']['connection'] = [
'driver' => 'pdo_sqlite',
'path' => realpath(sys_get_temp_dir()) . '/shlink-tests.db',
];
$container->setService('config', $config);
return $container;

View file

@ -1,9 +1,9 @@
<?php <?php
declare(strict_types=1); declare(strict_types=1);
use Psr\Container\ContainerInterface;
use ShlinkioTest\Shlink\Common\DbUnit\DatabaseTestCase; use ShlinkioTest\Shlink\Common\DbUnit\DatabaseTestCase;
use Symfony\Component\Process\Process; use Symfony\Component\Process\Process;
use Zend\ServiceManager\ServiceManager;
// Create an empty .env file // Create an empty .env file
if (! file_exists('.env')) { if (! file_exists('.env')) {
@ -15,19 +15,12 @@ if (file_exists($shlinkDbPath)) {
unlink($shlinkDbPath); unlink($shlinkDbPath);
} }
/** @var ServiceManager $sm */ /** @var ContainerInterface $container */
$sm = require __DIR__ . '/config/container.php'; $container = require __DIR__ . '/config/test-container.php';
$sm->setAllowOverride(true);
$config = $sm->get('config');
$config['entity_manager']['connection'] = [
'driver' => 'pdo_sqlite',
'path' => $shlinkDbPath,
];
$sm->setService('config', $config);
// Create database // Create database
$process = new Process(['vendor/bin/doctrine', 'orm:schema-tool:create', '--no-interaction', '-q', '--test'], __DIR__); $process = new Process(['vendor/bin/doctrine', 'orm:schema-tool:create', '--no-interaction', '-q', '--test'], __DIR__);
$process->inheritEnvironmentVariables() $process->inheritEnvironmentVariables()
->mustRun(); ->mustRun();
DatabaseTestCase::$em = $sm->get('em'); DatabaseTestCase::$em = $container->get('em');

View file

@ -2,11 +2,11 @@
<phpunit <phpunit
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/6.5/phpunit.xsd" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/6.5/phpunit.xsd"
bootstrap="./func_tests_bootstrap.php" bootstrap="./db_tests_bootstrap.php"
colors="true"> colors="true">
<testsuites> <testsuites>
<testsuite name="Shlink functional database tests"> <testsuite name="Shlink database tests">
<directory>./module/*/test-func</directory> <directory>./module/*/test-db</directory>
</testsuite> </testsuite>
</testsuites> </testsuites>