]> source.dussan.org Git - nextcloud-server.git/commitdiff
tests(DB): Add test for date time comparisons in query builder 26540/head
authorJulius Härtl <jus@bitgrid.net>
Mon, 10 Jul 2023 17:41:46 +0000 (19:41 +0200)
committerJulius Härtl <jus@bitgrid.net>
Fri, 29 Dec 2023 09:36:59 +0000 (10:36 +0100)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
tests/lib/DB/QueryBuilder/ExpressionBuilderDBTest.php

index 35d8b4faa343afacbcb5cf60164ad14e83ef9e30..33b5824a0dd081e241c74f8efbebce5efaa13262 100644 (file)
 
 namespace Test\DB\QueryBuilder;
 
+use Doctrine\DBAL\Schema\SchemaException;
+use Doctrine\DBAL\Types\Types;
 use OC\DB\QueryBuilder\Literal;
 use OCP\DB\QueryBuilder\IQueryBuilder;
+use OCP\IConfig;
+use OCP\Server;
 use Test\TestCase;
 
 /**
@@ -31,11 +35,13 @@ use Test\TestCase;
 class ExpressionBuilderDBTest extends TestCase {
        /** @var \Doctrine\DBAL\Connection|\OCP\IDBConnection */
        protected $connection;
+       protected $schemaSetup = false;
 
        protected function setUp(): void {
                parent::setUp();
 
                $this->connection = \OC::$server->getDatabaseConnection();
+               $this->prepareTestingTable();
        }
 
        public function likeProvider() {
@@ -150,6 +156,59 @@ class ExpressionBuilderDBTest extends TestCase {
                self::assertEquals('myvalue', $entries[0]['configvalue']);
        }
 
+       public function testDateTimeEquals() {
+               $dateTime = new \DateTime('2023-01-01');
+               $insert = $this->connection->getQueryBuilder();
+               $insert->insert('testing')
+                       ->values(['datetime' => $insert->createNamedParameter($dateTime, IQueryBuilder::PARAM_DATE)])
+                       ->executeStatement();
+
+               $query = $this->connection->getQueryBuilder();
+               $result = $query->select('*')
+                       ->from('testing')
+                       ->where($query->expr()->eq('datetime', $query->createNamedParameter($dateTime, IQueryBuilder::PARAM_DATE)))
+                       ->executeQuery();
+               $entries = $result->fetchAll();
+               $result->closeCursor();
+               self::assertCount(1, $entries);
+       }
+
+       public function testDateTimeLess() {
+               $dateTime = new \DateTime('2022-01-01');
+               $dateTimeCompare = new \DateTime('2022-01-02');
+               $insert = $this->connection->getQueryBuilder();
+               $insert->insert('testing')
+                       ->values(['datetime' => $insert->createNamedParameter($dateTime, IQueryBuilder::PARAM_DATE)])
+                       ->executeStatement();
+
+               $query = $this->connection->getQueryBuilder();
+               $result = $query->select('*')
+                       ->from('testing')
+                       ->where($query->expr()->lt('datetime', $query->createNamedParameter($dateTimeCompare, IQueryBuilder::PARAM_DATE)))
+                       ->executeQuery();
+               $entries = $result->fetchAll();
+               $result->closeCursor();
+               self::assertCount(1, $entries);
+       }
+
+       public function testDateTimeGreater() {
+               $dateTime = new \DateTime('2023-01-02');
+               $dateTimeCompare = new \DateTime('2023-01-01');
+               $insert = $this->connection->getQueryBuilder();
+               $insert->insert('testing')
+                       ->values(['datetime' => $insert->createNamedParameter($dateTime, IQueryBuilder::PARAM_DATE)])
+                       ->executeStatement();
+
+               $query = $this->connection->getQueryBuilder();
+               $result = $query->select('*')
+                       ->from('testing')
+                       ->where($query->expr()->gt('datetime', $query->createNamedParameter($dateTimeCompare, IQueryBuilder::PARAM_DATE)))
+                       ->executeQuery();
+               $entries = $result->fetchAll();
+               $result->closeCursor();
+               self::assertCount(1, $entries);
+       }
+
        protected function createConfig($appId, $key, $value) {
                $query = $this->connection->getQueryBuilder();
                $query->insert('appconfig')
@@ -160,4 +219,31 @@ class ExpressionBuilderDBTest extends TestCase {
                        ])
                        ->execute();
        }
+
+       protected function prepareTestingTable(): void {
+               if ($this->schemaSetup) {
+                       $this->connection->getQueryBuilder()->delete('testing')->executeStatement();
+               }
+
+               $prefix = Server::get(IConfig::class)->getSystemValueString('dbtableprefix', 'oc_');
+               $schema = $this->connection->createSchema();
+               try {
+                       $schema->getTable($prefix . 'testing');
+                       $this->connection->getQueryBuilder()->delete('testing')->executeStatement();
+               } catch (SchemaException $e) {
+                       $this->schemaSetup = true;
+                       $table = $schema->createTable($prefix . 'testing');
+                       $table->addColumn('id', Types::BIGINT, [
+                               'autoincrement' => true,
+                               'notnull' => true,
+                       ]);
+
+                       $table->addColumn('datetime', Types::DATETIME_MUTABLE, [
+                               'notnull' => false,
+                       ]);
+
+                       $table->setPrimaryKey(['id']);
+                       $this->connection->migrateToSchema($schema);
+               }
+       }
 }