/
DbalExtensionTest.php
104 lines (82 loc) · 2.61 KB
/
DbalExtensionTest.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?php declare(strict_types = 1);
/**
* @testCase
*/
namespace NextrasTests\Dbal;
use Nette\DI\Compiler;
use Nette\DI\Container;
use Nette\DI\ContainerLoader;
use Nextras\Dbal\Bridges\NetteDI\DbalExtension;
use Nextras\Dbal\Bridges\NetteTracy\ConnectionPanel;
use Nextras\Dbal\Connection;
use Tester\Assert;
use Tracy\Bridges\Nette\TracyExtension;
use Tracy\Debugger;
require_once __DIR__ . '/../../bootstrap.php';
class DbalExtensionTest extends IntegrationTestCase
{
/**
* @dataProvider provideData
*/
public function testExtension($config, $debug, $expectTracyPanel)
{
$dic = $this->buildDic($config, $debug);
Assert::type('Nette\DI\Container', $dic);
Assert::count(1, $dic->findByType(Connection::class));
/** @var Connection $connection */
$connection = $dic->getByType(Connection::class);
$conf = $connection->getConfig();
Assert::same('mysqli', $conf['driver']);
Assert::same('bar', $conf['username']);
Assert::same('foo', $conf['password']);
if ($expectTracyPanel) {
Assert::type(
ConnectionPanel::class,
Debugger::getBar()->getPanel('Nextras\Dbal\Bridges\NetteTracy\ConnectionPanel')
);
}
}
private function buildDic($config, $debug, callable $compilerCb = null)
{
$loader = new ContainerLoader(TEMP_DIR);
$key = __FILE__ . ':' . __LINE__ . ':' . $config;
$className = $loader->load(function (Compiler $compiler) use ($config, $debug, $compilerCb) {
if ($debug) {
Debugger::enable(Debugger::DEVELOPMENT);
}
if ($compilerCb) {
$compilerCb($compiler);
}
$compiler->addExtension('tracy', new TracyExtension($debug));
$compiler->addExtension('dbal', new DbalExtension());
$compiler->loadConfig(__DIR__ . "/DbalExtensionTest.$config.neon");
}, $key);
/** @var Container $dic */
$dic = new $className;
return $dic;
}
public function provideData()
{
return [
['configA', true, true],
['configB', false, true],
['configC', false, false],
];
}
public function testAutowired()
{
$dic = $this->buildDic('configD', false, function (Compiler $compiler) {
$compiler->addExtension('dbal2', new DbalExtension());
});
Assert::count(2, $dic->findByType(Connection::class));
$connection = $dic->getByType(Connection::class);
Assert::type(Connection::class, $connection);
Assert::equal('bar', $connection->getConfig()['username']);
Assert::type(SqlProcessorFactory::class, $connection->getConfig()['sqlProcessorFactory']);
$connection = $dic->getService('dbal2.connection');
Assert::type(Connection::class, $connection);
Assert::equal('bar2', $connection->getConfig()['username']);
}
}
$test = new DbalExtensionTest();
$test->run();