Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / core / modules / views / tests / src / Unit / Plugin / views / query / MysqlDateSqlTest.php
diff --git a/web/core/modules/views/tests/src/Unit/Plugin/views/query/MysqlDateSqlTest.php b/web/core/modules/views/tests/src/Unit/Plugin/views/query/MysqlDateSqlTest.php
new file mode 100644 (file)
index 0000000..575cc58
--- /dev/null
@@ -0,0 +1,97 @@
+<?php
+
+namespace Drupal\Tests\views\Unit\Plugin\views\query;
+
+use Drupal\Core\Database\Connection;
+use Drupal\Tests\UnitTestCase;
+use Drupal\views\Plugin\views\query\MysqlDateSql;
+
+/**
+ * Tests the MySQL-specific date query handler.
+ *
+ * @coversDefaultClass \Drupal\views\Plugin\views\query\MysqlDateSql
+ *
+ * @group views
+ */
+class MysqlDateSqlTest extends UnitTestCase {
+
+  /**
+   * The mocked database service.
+   *
+   * @var \Drupal\Core\Database\Connection
+   */
+  protected $database;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+    $this->database = $this->prophesize(Connection::class)->reveal();
+  }
+
+  /**
+   * Tests the getDateField method.
+   *
+   * @covers ::getDateField
+   */
+  public function testGetDateField() {
+    $date_sql = new MysqlDateSql($this->database);
+
+    $expected = 'foo.field';
+    $this->assertEquals($expected, $date_sql->getDateField('foo.field', TRUE));
+
+    $expected = "DATE_ADD('19700101', INTERVAL foo.field SECOND)";
+    $this->assertEquals($expected, $date_sql->getDateField('foo.field', FALSE));
+  }
+
+  /**
+   * Tests date formatting replacement.
+   *
+   * @covers ::getDateFormat
+   *
+   * @dataProvider providerTestGetDateFormat
+   */
+  public function testGetDateFormat($field, $format, $expected_format) {
+    $date_sql = new MysqlDateSql($this->database);
+
+    $this->assertEquals("DATE_FORMAT($field, '$expected_format')", $date_sql->getDateFormat($field, $format));
+  }
+
+  /**
+   * Provider for date formatting test.
+   */
+  public function providerTestGetDateFormat() {
+    return [
+      ['foo.field', 'Y-y-M-m', '%Y-%y-%b-%m'],
+      ['bar.field', 'n-F D d l', '%c-%M %a %d %W'],
+      ['baz.bar_field', 'j/W/H-h i s A', '%e/%v/%H-%h %i %s %p'],
+    ];
+  }
+
+  /**
+   * Tests timezone offset formatting.
+   *
+   * @covers ::setFieldTimezoneOffset
+   */
+  public function testSetFieldTimezoneOffset() {
+    $date_sql = new MysqlDateSql($this->database);
+
+    $field = 'foobar.field';
+    $date_sql->setFieldTimezoneOffset($field, 42);
+    $this->assertEquals("(foobar.field + INTERVAL 42 SECOND)", $field);
+  }
+
+  /**
+   * Tests setting the database offset.
+   *
+   * @covers ::setTimezoneOffset
+   */
+  public function testSetTimezoneOffset() {
+    $database = $this->prophesize(Connection::class);
+    $database->query("SET @@session.time_zone = '42'")->shouldBeCalledTimes(1);
+    $date_sql = new MysqlDateSql($database->reveal());
+    $date_sql->setTimezoneOffset(42);
+  }
+
+}