Repository navigation
Expand file tree
/
Copy pathDoctrine1.php
More file actions
136 lines (123 loc) · 3.59 KB
/
Copy pathDoctrine1.php
File metadata and controls
136 lines (123 loc) · 3.59 KB
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<?php
namespace Codeception\Module;
/**
* Performs DB operations with Doctrine ORM 1.x
*
* Uses active Doctrine connection. If none can be found will fail.
*
* This module cleans all cached data after each test.
*
* ## Status
*
* * Maintainer: **davert**
* * Stability: **stable**
* * Contact: codecept@davert.mail.ua
*
* ## Config
* * cleanup: true - all doctrine queries will be run in transaction, which will be rolled back at the end of test.
*
*/
class Doctrine1 extends \Codeception\Module
{
protected $config = array('cleanup' => true);
protected $dbh;
protected $tables;
public function _initialize() {
$this->dbh = \Doctrine_Manager::connection()->getDbh();
}
public function _before(\Codeception\TestCase $test) {
if ($this->config['cleanup']) {
\Doctrine_Manager::connection()->beginTransaction();
}
}
public function _after(\Codeception\TestCase $test)
{
if ($this->config['cleanup']) {
\Doctrine_Manager::connection()->rollback();
}
$this->tables = \Doctrine_Manager::connection()->getTables();
foreach ($this->tables as $table) {
foreach ($table->getRepository() as $record) {
$record->clearRelated();
}
$table->getRepository()->evictAll();
$table->clear();
}
}
protected function proceedSeeInDatabase($model, $values = array())
{
$query = \Doctrine_Core::getTable($model)->createQuery();
$string = array();
foreach ($values as $key => $value) {
$query->addWhere("$key = ?", $value);
$string[] = "$key = '$value'";
}
return array('True', ($query->count() > 0), "$model with " . implode(', ', $string));
}
/**
* Checks table contains row with specified values
* Provide Doctrine model name can be passed to addWhere DQL
*
* Example:
*
* ``` php
* <?php
* $I->seeInTable('User', array('name' => 'Davert', 'email' => 'davert@mail.com'));
*
* ```
*
* @param $model
* @param array $values
*/
public function seeInTable($model, $values = array())
{
$res = $this->proceedSeeInDatabase($model, $values);
$this->assert($res);
}
/**
* Checks table doesn't contain row with specified values
* Provide Doctrine model name and criteria that can be passed to addWhere DQL
*
* Example:
*
* ``` php
* <?php
* $I->dontSeeInTable('User', array('name' => 'Davert', 'email' => 'davert@mail.com'));
*
* ```
*
* @param $model
* @param array $values
*/
public function dontSeeInTable($model, $values = array())
{
$res = $this->proceedSeeInDatabase($model, $values);
$this->assertNot($res);
}
/**
* Fetches single value from a database.
* Provide Doctrine model name, desired field, and criteria that can be passed to addWhere DQL
*
* Example:
*
* ``` php
* <?php
* $mail = $I->grabFromTable('User', 'email', array('name' => 'Davert'));
*
* ```
*
* @param $model
* @param $column
* @param array $values
* @return mixed
*/
public function grabFromTable($model, $column, $values = array()) {
$query = \Doctrine_Core::getTable($model)->createQuery();
$string = array();
foreach ($values as $key => $value) {
$query->addWhere("$key = ?", $value);
$string[] = "$key = '$value'";
}
return $query->select($column)->fetchOne();
}
}