Skip to content

Commit c533202

Browse files
committed
Merge branch '2.0'
* 2.0: Bringing 2.0 up to date with 1.0 changes from #10
2 parents e311315 + e924e85 commit c533202

File tree

7 files changed

+672
-80
lines changed

7 files changed

+672
-80
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"type": "library",
55
"require": {
66
"php": ">=5.4.0",
7-
"codeception/codeception": "~2.1"
7+
"codeception/codeception": "~2.1.0"
88
},
99
"license": "MIT",
1010
"authors": [

examples/tests/_data/dump.sql

Lines changed: 0 additions & 68 deletions
This file was deleted.

examples/tests/_data/primary.sql

Lines changed: 463 additions & 0 deletions
Large diffs are not rendered by default.

examples/tests/_data/secondary.sql

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
-- schema
2+
3+
--
4+
-- Table structure for table `Audit`
5+
--
6+
7+
CREATE TABLE IF NOT EXISTS `DemoWarehouse`.`Audit` (
8+
`OrganisationID` int(10) unsigned NOT NULL,
9+
`UserID` int(10) unsigned DEFAULT NULL,
10+
`Time` datetime NOT NULL,
11+
`JSON` text NOT NULL,
12+
13+
KEY `UserID` (`UserID`),
14+
KEY `OrganisationID` (`OrganisationID`),
15+
KEY `Time` (`Time`)
16+
);
17+
18+
ALTER TABLE `Audit`
19+
ADD FOREIGN KEY (`OrganisationID`) REFERENCES `DemoConfig`.`Organisation`(`ID`)
20+
ON DELETE CASCADE ON UPDATE CASCADE;
21+
22+
-- data
23+
24+
-- `DemoWarehouse`.`Audit`
25+
INSERT INTO `DemoWarehouse`.`Audit` VALUES
26+
(1,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
27+
(2,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
28+
(3,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
29+
(4,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
30+
(5,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
31+
(6,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
32+
(7,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
33+
(8,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
34+
(9,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
35+
(10,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
36+
(11,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
37+
(12,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
38+
(13,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
39+
(14,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
40+
(15,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
41+
(16,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
42+
(17,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
43+
(18,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
44+
(19,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
45+
(20,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
46+
(21,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
47+
(22,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
48+
(23,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
49+
(24,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
50+
(25,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
51+
(26,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
52+
(27,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
53+
(28,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
54+
(29,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
55+
(30,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
56+
(31,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
57+
(32,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
58+
(33,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
59+
(34,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
60+
(35,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
61+
(36,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
62+
(37,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
63+
(38,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
64+
(39,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
65+
(40,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
66+
(41,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
67+
(42,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
68+
(43,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
69+
(44,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
70+
(45,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
71+
(46,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
72+
(47,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
73+
(48,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
74+
(49,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
75+
(50,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
76+
(51,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
77+
(52,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
78+
(53,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
79+
(54,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
80+
(55,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
81+
(56,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
82+
(57,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
83+
(58,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
84+
(59,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
85+
(60,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
86+
(61,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
87+
(62,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
88+
(63,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
89+
(64,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
90+
(65,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
91+
(66,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
92+
(67,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
93+
(68,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
94+
(69,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
95+
(70,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
96+
(71,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
97+
(72,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
98+
(73,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
99+
(74,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
100+
(75,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
101+
(76,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
102+
(77,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
103+
(78,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
104+
(79,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
105+
(80,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
106+
(81,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
107+
(82,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
108+
(83,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
109+
(84,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
110+
(85,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
111+
(86,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
112+
(87,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
113+
(88,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
114+
(89,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
115+
(90,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
116+
(91,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
117+
(92,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
118+
(93,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
119+
(94,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
120+
(95,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
121+
(96,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
122+
(97,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
123+
(98,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
124+
(99,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}'),
125+
(100,NULL,'2016-06-17 12:35:59','{\"Description\": \"Organisation created\", \"OrderNumber\": 15371}');

examples/tests/acceptance.suite.yml

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,16 @@ modules:
77
Codeception\Extension\MultiDb:
88
connectors:
99
Primary:
10-
dsn: "mysql:host=server1.db.example.com;port=3306;dbname=Config"
11-
user: 'demo_primary'
12-
password: ''
10+
dsn: "mysql:host=primary.db.example.com;port=3306;dbname=DemoConfig"
11+
user: 'demo'
12+
password: 'notsecure'
13+
dump: 'tests/_data/primary.sql'
14+
populate: true
15+
cleanup: true
1316
Secondary:
14-
dsn: "mysql:host=server2.db.example.com;port=3306;dbname=Warehouse"
15-
user: 'demo_secondary'
16-
password: ''
17+
dsn: "mysql:host=secondary.db.example.com;port=3306;dbname=DemoWarehouse"
18+
user: 'demo'
19+
password: 'notsecure'
20+
dump: 'tests/_data/secondary.sql'
21+
populate: true
22+
cleanup: true

examples/tests/acceptance/DemoCest.php

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public function demo(AcceptanceTester $I)
3333

3434
private function createOrganisation(AcceptanceTester $I, array $details = [])
3535
{
36-
return $I->haveInDb('Config.Organisation', array_merge([
36+
return $I->haveInDb('DemoConfig.Organisation', array_merge([
3737
'Name' => $this->faker->name.' & Co. Ltd.',
3838
'Address' => str_replace("\n", ', ', $this->faker->address),
3939
'Active' => 'YES'
@@ -42,7 +42,7 @@ private function createOrganisation(AcceptanceTester $I, array $details = [])
4242

4343
private function createUser(AcceptanceTester $I, array $details = [])
4444
{
45-
return $I->haveInDb('Config.User', array_merge([
45+
return $I->haveInDb('DemoConfig.User', array_merge([
4646
'Name' => $this->faker->name,
4747
'Email' => $this->faker->email,
4848
'Address' => str_replace("\n", ', ', $this->faker->address),
@@ -56,7 +56,7 @@ private function createUserPassword(AcceptanceTester $I, $user_id, $password = n
5656
$password = $this->faker->password;
5757
}
5858

59-
$I->haveInDb('Config.UserPassword', [
59+
$I->haveInDb('DemoConfig.UserPassword', [
6060
'UserID' => $user_id,
6161
'Hash' => sha1($password, true),
6262
'CreatedAt' => '@asis NOW()',
@@ -66,10 +66,11 @@ private function createUserPassword(AcceptanceTester $I, $user_id, $password = n
6666

6767
private function createAudit(AcceptanceTester $I, $organisation_id, $user_id, array $data)
6868
{
69-
$I->haveInDb('Warehouse.Audit', [
69+
$I->haveInDb('DemoWarehouse.Audit', [
7070
'OrganisationID'=>$organisation_id,
7171
'UserID'=>$user_id,
72-
'JSON'=>json_encode($data)
72+
'JSON'=>json_encode($data),
73+
'Time'=>'@asis NOW()'
7374
], 'OrganisationID', $organisation_id);
7475
}
7576
}

src/Codeception/Extension/MultiDb.php

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
namespace Codeception\Extension;
77

8+
use Codeception\Configuration;
89
use Codeception\Exception\TestRuntimeException;
910
use Codeception\Extension\MultiDb\Utils\AsIs;
1011
use Codeception\Extension\MultiDb\Utils\CleanupAction;
@@ -85,6 +86,70 @@ public function _initialize()
8586
$this->timezone = $this->config['timezone'];
8687

8788
parent::_initialize();
89+
90+
foreach ($this->config['connectors'] as $connector => $connectorConfig) {
91+
if ($connectorConfig['populate']) {
92+
if ($connectorConfig['cleanup']) {
93+
$this->cleanup($connector);
94+
}
95+
$this->loadDump($connector);
96+
}
97+
}
98+
}
99+
100+
/**
101+
* Load SQL dump for a connector
102+
*
103+
* @param string $connector
104+
*
105+
* @throws ModuleConfigException
106+
* @throws ModuleException
107+
*/
108+
protected function loadDump($connector)
109+
{
110+
$config = $this->config['connectors'][$connector];
111+
112+
if ($config['dump'] && ($config['cleanup'] || $config['populate'])) {
113+
if (!file_exists(Configuration::projectDir() . $config['dump'])) {
114+
throw new ModuleConfigException(
115+
__CLASS__,
116+
"\n{$connector} - Dump file doesn't exist. Please check path: {$config['dump']}"
117+
);
118+
}
119+
$sql = file_get_contents(Configuration::projectDir() . $config['dump']);
120+
// remove any comments of the form /* ... */
121+
$sql = preg_replace('%/\*(?!!\d+)(?:(?!\*/).)*\*/%s', '', $sql);
122+
if ($sql) {
123+
$sql = explode("\n", $sql);
124+
}
125+
126+
try {
127+
$this->debugSection(__CLASS__, "{$connector} - Loading dump from {$config['dump']}");
128+
$this->getDriver($connector)->load($sql);
129+
} catch (\PDOException $e) {
130+
throw new ModuleException(
131+
__CLASS__,
132+
$e->getMessage() . "\nSQL query being executed: " . $sql
133+
);
134+
}
135+
}
136+
}
137+
138+
/**
139+
* Cleanup databases
140+
*
141+
* @param $connector
142+
*
143+
* @throws ModuleException
144+
*/
145+
protected function cleanup($connector)
146+
{
147+
try {
148+
$this->debugSection(__CLASS__, "$connector - Cleaning up");
149+
$this->getDriver($connector)->cleanup();
150+
} catch (\Exception $e) {
151+
throw new ModuleException(__CLASS__, $e->getMessage());
152+
}
88153
}
89154

90155
// HOOK: before scenario

0 commit comments

Comments
 (0)