src/PHPUnit/Runner/Extension/Configuration.php
<?php declare(strict_types=1);
namespace IntegrationTesting\PHPUnit\Runner\Extension;
use IntegrationTesting\Exception\TestingException;
final class Configuration
{
private const PDO_KEY = 'pdo';
private const AMQP_KEY = 'amqp';
private static $defaultPDOParams = [
'dsn' => 'mysql:host=localhost:3306;dbname=test;charset=utf8',
'user' => 'test',
'password' => 'test',
'fixtures' => [
'beforeFirstTest' => [],
'beforeTest' => [],
'afterTest' => [],
'afterLastTest' => [],
]
];
private static $defaultAMQPParams = [
'host' => 'rabbitmq',
'port' => 5672,
'user' => 'test',
'password' => 'test',
'vhost' => '/',
'fixtures' => [
'beforeFirstTest' => [],
'beforeTest' => [],
'afterTest' => [],
'afterLastTest' => []
]
];
private $PDOParams = [];
private $AMQPParams = [];
/**
* PDODatabaseExtensionConfig constructor.
*
* @param array $params
* @throws TestingException
*/
public function __construct(array $params)
{
if (empty($params)) {
throw new TestingException('Configuration parameters are empty');
}
if (isset($params[self::PDO_KEY])) {
if ($invalidConfigParams = array_diff_key($params[self::PDO_KEY], self::$defaultPDOParams)) {
throw new TestingException(
'The following elements are not valid PDO configuration params: ' . json_encode($invalidConfigParams)
);
}
$this->PDOParams = array_merge(self::$defaultPDOParams, $params[self::PDO_KEY]);
}
if (isset($params[self::AMQP_KEY])) {
if ($invalidConfigParams = array_diff_key($params[self::AMQP_KEY], self::$defaultAMQPParams)) {
throw new TestingException(
'The following elements are not valid AMQP configuration params: ' . json_encode($invalidConfigParams)
);
}
$this->AMQPParams = array_merge(self::$defaultAMQPParams, $params[self::AMQP_KEY]);
}
}
public function hasPDOFixtures(): bool
{
return !empty($this->PDOParams);
}
public function hasAMQPFixtures(): bool
{
return !empty($this->AMQPParams);
}
public function getPDODSN(): string
{
return $this->PDOParams['dsn'];
}
public function getPDOUser(): string
{
return $this->PDOParams['user'];
}
public function getPDOPassword(): string
{
return $this->PDOParams['password'];
}
public function getPDOFixtures(): array
{
return isset($this->PDOParams['fixtures']) ? $this->PDOParams['fixtures'] : [];
}
public function getAMQPHost(): string
{
return $this->AMQPParams['host'];
}
public function getAMQPPort(): int
{
return (int)$this->AMQPParams['port'];
}
public function getAMQPUser(): string
{
return $this->AMQPParams['user'];
}
public function getAMQPPassword(): string
{
return $this->AMQPParams['password'];
}
public function getAMQPVhost(): string
{
return $this->AMQPParams['vhost'];
}
public function getAMQPFixtures(): array
{
return isset($this->AMQPParams['fixtures']) ? $this->AMQPParams['fixtures'] : [];
}
}