5 use Dkan\Datastore\Resource;
6 use Drupal\Core\Database\Connection;
7 use Drupal\Core\Database\Query\Insert;
8 use Drupal\Core\Database\Query\Select;
9 use Drupal\Core\Database\Schema;
10 use Drupal\Core\Database\Statement;
12 use MockChain\Sequence;
15 use PHPUnit\Framework\TestCase;
28 $this->getConnectionChain()->getMock(),
31 $this->assertTrue(is_object($databaseTable));
40 (object) [
'Field' =>
"first_name"],
41 (
object) [
'Field' =>
"last_name"],
44 $sequence = (
new Sequence())
48 $connection = $this->getConnectionChain()
49 ->add(Connection::class,
"select", Select::class)
50 ->add(Select::class,
"fields", Select::class)
51 ->add(Select::class,
"execute", Statement::class)
52 ->add(Statement::class,
'fetchAll', $sequence)
59 $this->assertEquals([], $databaseTable->retrieveAll());
66 $connectionChain = $this->getConnectionChain()
67 ->add(Connection::class,
'insert', Insert::class)
68 ->add(Insert::class,
'fields', Insert::class)
69 ->add(Insert::class,
'values', Insert::class)
70 ->add(Insert::class,
'execute',
"1")
71 ->add(Connection::class,
'select', Select::class,
'select_1')
72 ->add(Select::class,
'fields', Select::class)
73 ->add(Select::class,
'condition', Select::class)
74 ->add(Select::class,
'execute', Statement::class)
75 ->add(Statement::class,
'fetch', NULL);
78 $connectionChain->getMock(),
81 $this->assertEquals(
"1", $databaseTable->store(
'["Gerardo", "Gonzalez"]',
"1"));
88 $connectionChain = $this->getConnectionChain()
89 ->add(Connection::class,
'insert', Insert::class)
90 ->add(Insert::class,
'fields', Insert::class)
91 ->add(Insert::class,
'values', Insert::class)
92 ->add(Insert::class,
'execute',
"1")
93 ->add(Connection::class,
'select', Select::class,
'select_1')
94 ->add(Select::class,
'fields', Select::class)
95 ->add(Select::class,
'condition', Select::class)
96 ->add(Select::class,
'execute', Statement::class)
97 ->add(Statement::class,
'fetch', NULL);
100 $connectionChain->getMock(),
103 $this->expectExceptionMessageRegExp(
"/The number of fields and data given do not match:/");
104 $this->assertEquals(
"1", $databaseTable->store(
'["Foobar"]',
"1"));
111 $connectionChain = $this->getConnectionChain()
112 ->add(Connection::class,
'insert', Insert::class)
113 ->add(Insert::class,
'fields', Insert::class)
114 ->add(Insert::class,
'values', Insert::class)
115 ->add(Insert::class,
'execute',
"1")
116 ->add(Connection::class,
'select', Select::class,
'select_1')
117 ->add(Select::class,
'fields', Select::class)
118 ->add(Select::class,
'condition', Select::class)
119 ->add(Select::class,
'execute', Statement::class)
120 ->add(Statement::class,
'fetch', NULL);
123 $connectionChain->getMock(),
127 '["Gerardo", "Gonzalez"]',
128 '["Thierry", "Dallacroce"]',
131 $this->assertEquals(
"1", $databaseTable->storeMultiple($data,
"1"));
138 $connectionChain = $this->getConnectionChain()
139 ->add(Connection::class,
'insert', Insert::class)
140 ->add(Insert::class,
'fields', Insert::class)
141 ->add(Insert::class,
'values', Insert::class)
142 ->add(Insert::class,
'execute',
"1")
143 ->add(Connection::class,
'select', Select::class,
'select_1')
144 ->add(Select::class,
'fields', Select::class)
145 ->add(Select::class,
'condition', Select::class)
146 ->add(Select::class,
'execute', Statement::class)
147 ->add(Statement::class,
'fetch', NULL);
150 $connectionChain->getMock(),
158 $this->expectExceptionMessageRegExp(
"/The number of fields and data given do not match:/");
159 $this->assertEquals(
"1", $databaseTable->storeMultiple($data,
"1"));
166 $connectionChain = $this->getConnectionChain()
167 ->add(Connection::class,
'select', Select::class,
'select_1')
168 ->add(Select::class,
'fields', Select::class)
169 ->add(Select::class,
'countQuery', Select::class)
170 ->add(Select::class,
'execute', Statement::class)
171 ->add(Statement::class,
'fetchField', 1);
174 $connectionChain->getMock(),
177 $this->assertEquals(1, $databaseTable->count());
184 $connectionChain = $this->getConnectionChain()
185 ->add(Connection::class,
'select', Select::class,
'select_1')
186 ->add(Select::class,
'fields', Select::class)
187 ->add(Select::class,
'countQuery', Select::class)
188 ->add(Select::class,
'execute', Statement::class)
189 ->add(Statement::class,
'fetchField', 1);
192 $connectionChain->getMock(),
198 [
"record_number",
"first_name",
"last_name"],
200 ), $databaseTable->getSummary());
207 $connectionChain = $this->getConnectionChain();
210 $connectionChain->getMock(),
214 $this->assertTrue(TRUE);
222 $connectionChain = $this->getConnectionChain()
223 ->add(Connection::class,
'insert', Insert::class)
224 ->add(Insert::class,
'fields', Insert::class)
225 ->add(Insert::class,
'values', Insert::class)
226 ->add(Insert::class,
'execute',
"1")
227 ->add(Connection::class,
'select', Select::class,
'select_1')
228 ->add(Select::class,
'fields', Select::class)
229 ->add(Select::class,
'condition', Select::class)
230 ->add(Select::class,
'execute', Statement::class)
231 ->add(Statement::class,
'fetch', NULL);
234 $connectionChain->getMock(),
237 $this->expectExceptionMessage(
'Import for 1 returned an error when preparing table header: {"foo":"bar"}');
238 $this->assertEquals(
"1", $databaseTable->store(
'{"foo":"bar"}',
"1"));
245 $connectionChain = $this->getConnectionChain()
246 ->add(Connection::class,
'insert', Insert::class)
247 ->add(Insert::class,
'fields', Insert::class)
248 ->add(Insert::class,
'values', Insert::class)
249 ->add(Insert::class,
'execute',
"1")
250 ->add(Connection::class,
'select', Select::class,
'select_1')
251 ->add(Select::class,
'fields', Select::class)
252 ->add(Select::class,
'condition', Select::class)
253 ->add(Select::class,
'execute', Statement::class)
254 ->add(Statement::class,
'fetch', NULL);
257 $connectionChain->getMock(),
260 $this->expectExceptionMessage(
"Import for 1 error when decoding foobar");
261 $this->assertEquals(
"1", $databaseTable->store(
"foobar",
"1"));
267 private function getConnectionChain() {
269 (object) [
'Field' =>
"first_name"],
270 (
object) [
'Field' =>
"last_name"],
273 $chain = (
new Chain($this))
275 ->add(Connection::class,
"schema", Schema::class)
276 ->add(Connection::class,
'query', Statement::class)
277 ->add(Statement::class,
'fetchAll', $fieldInfo)
278 ->add(Schema::class,
"tableExists", TRUE);
286 private function getResource() {
287 return new Resource(
"people",
"",
"text/csv");