Skip to content

Commit c829472

Browse files
committed
tests(DB): Add test for date time comparisons in query builder
Signed-off-by: Julius Härtl <jus@bitgrid.net>
1 parent 064594b commit c829472

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

tests/lib/DB/QueryBuilder/ExpressionBuilderDBTest.php

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,12 @@
2121

2222
namespace Test\DB\QueryBuilder;
2323

24+
use Doctrine\DBAL\Schema\SchemaException;
25+
use Doctrine\DBAL\Types\Types;
2426
use OC\DB\QueryBuilder\Literal;
2527
use OCP\DB\QueryBuilder\IQueryBuilder;
28+
use OCP\IConfig;
29+
use OCP\Server;
2630
use Test\TestCase;
2731

2832
/**
@@ -31,11 +35,13 @@
3135
class ExpressionBuilderDBTest extends TestCase {
3236
/** @var \Doctrine\DBAL\Connection|\OCP\IDBConnection */
3337
protected $connection;
38+
protected $schemaSetup = false;
3439

3540
protected function setUp(): void {
3641
parent::setUp();
3742

3843
$this->connection = \OC::$server->getDatabaseConnection();
44+
$this->prepareTestingTable();
3945
}
4046

4147
public function likeProvider() {
@@ -150,6 +156,59 @@ public function testLongText(): void {
150156
self::assertEquals('myvalue', $entries[0]['configvalue']);
151157
}
152158

159+
public function testDateTimeEquals() {
160+
$dateTime = new \DateTime('2023-01-01');
161+
$insert = $this->connection->getQueryBuilder();
162+
$insert->insert('testing')
163+
->values(['datetime' => $insert->createNamedParameter($dateTime, IQueryBuilder::PARAM_DATE)])
164+
->executeStatement();
165+
166+
$query = $this->connection->getQueryBuilder();
167+
$result = $query->select('*')
168+
->from('testing')
169+
->where($query->expr()->eq('datetime', $query->createNamedParameter($dateTime, IQueryBuilder::PARAM_DATE)))
170+
->executeQuery();
171+
$entries = $result->fetchAll();
172+
$result->closeCursor();
173+
self::assertCount(1, $entries);
174+
}
175+
176+
public function testDateTimeLess() {
177+
$dateTime = new \DateTime('2022-01-01');
178+
$dateTimeCompare = new \DateTime('2022-01-02');
179+
$insert = $this->connection->getQueryBuilder();
180+
$insert->insert('testing')
181+
->values(['datetime' => $insert->createNamedParameter($dateTime, IQueryBuilder::PARAM_DATE)])
182+
->executeStatement();
183+
184+
$query = $this->connection->getQueryBuilder();
185+
$result = $query->select('*')
186+
->from('testing')
187+
->where($query->expr()->lt('datetime', $query->createNamedParameter($dateTimeCompare, IQueryBuilder::PARAM_DATE)))
188+
->executeQuery();
189+
$entries = $result->fetchAll();
190+
$result->closeCursor();
191+
self::assertCount(1, $entries);
192+
}
193+
194+
public function testDateTimeGreater() {
195+
$dateTime = new \DateTime('2023-01-02');
196+
$dateTimeCompare = new \DateTime('2023-01-01');
197+
$insert = $this->connection->getQueryBuilder();
198+
$insert->insert('testing')
199+
->values(['datetime' => $insert->createNamedParameter($dateTime, IQueryBuilder::PARAM_DATE)])
200+
->executeStatement();
201+
202+
$query = $this->connection->getQueryBuilder();
203+
$result = $query->select('*')
204+
->from('testing')
205+
->where($query->expr()->gt('datetime', $query->createNamedParameter($dateTimeCompare, IQueryBuilder::PARAM_DATE)))
206+
->executeQuery();
207+
$entries = $result->fetchAll();
208+
$result->closeCursor();
209+
self::assertCount(1, $entries);
210+
}
211+
153212
protected function createConfig($appId, $key, $value) {
154213
$query = $this->connection->getQueryBuilder();
155214
$query->insert('appconfig')
@@ -160,4 +219,31 @@ protected function createConfig($appId, $key, $value) {
160219
])
161220
->execute();
162221
}
222+
223+
protected function prepareTestingTable(): void {
224+
if ($this->schemaSetup) {
225+
$this->connection->getQueryBuilder()->delete('testing')->executeStatement();
226+
}
227+
228+
$prefix = Server::get(IConfig::class)->getSystemValueString('dbtableprefix', 'oc_');
229+
$schema = $this->connection->createSchema();
230+
try {
231+
$schema->getTable($prefix . 'testing');
232+
$this->connection->getQueryBuilder()->delete('testing')->executeStatement();
233+
} catch (SchemaException $e) {
234+
$this->schemaSetup = true;
235+
$table = $schema->createTable($prefix . 'testing');
236+
$table->addColumn('id', Types::BIGINT, [
237+
'autoincrement' => true,
238+
'notnull' => true,
239+
]);
240+
241+
$table->addColumn('datetime', Types::DATETIME_MUTABLE, [
242+
'notnull' => false,
243+
]);
244+
245+
$table->setPrimaryKey(['id']);
246+
$this->connection->migrateToSchema($schema);
247+
}
248+
}
163249
}

0 commit comments

Comments
 (0)