Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / core / modules / views / tests / src / Unit / Plugin / views / query / SqliteDateSqlTest.php
diff --git a/web/core/modules/views/tests/src/Unit/Plugin/views/query/SqliteDateSqlTest.php b/web/core/modules/views/tests/src/Unit/Plugin/views/query/SqliteDateSqlTest.php
new file mode 100644 (file)
index 0000000..f296507
--- /dev/null
@@ -0,0 +1,98 @@
+<?php
+
+namespace Drupal\Tests\views\Unit\Plugin\views\query;
+
+use Drupal\Core\Database\Connection;
+use Drupal\Tests\UnitTestCase;
+use Drupal\views\Plugin\views\query\SqliteDateSql;
+
+/**
+ * Tests the MySQL-specific date query handler.
+ *
+ * @coversDefaultClass \Drupal\views\Plugin\views\query\SqliteDateSql
+ *
+ * @group views
+ */
+class SqliteDateSqlTest 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 SqliteDateSql($this->database);
+
+    $expected = "strftime('%s', foo.field)";
+    $this->assertEquals($expected, $date_sql->getDateField('foo.field', TRUE));
+
+    $expected = 'foo.field';
+    $this->assertEquals($expected, $date_sql->getDateField('foo.field', FALSE));
+  }
+
+  /**
+   * Tests date formatting replacement.
+   *
+   * @covers ::getDateFormat
+   *
+   * @dataProvider providerTestGetDateFormat
+   */
+  public function testGetDateFormat($field, $format, $expected) {
+    $date_sql = new SqliteDateSql($this->database);
+
+    $this->assertEquals($expected, $date_sql->getDateFormat($field, $format));
+  }
+
+  /**
+   * Provider for date formatting test.
+   */
+  public function providerTestGetDateFormat() {
+    return [
+      ['foo.field', 'Y-y-M-m', "strftime('%Y-%Y-%m-%m', foo.field, 'unixepoch')"],
+      ['bar.field', 'n-F D d l', "strftime('%m-%m %d %d %d', bar.field, 'unixepoch')"],
+      ['baz.bar_field', 'j/W/H-h i s A', "strftime('%d/%W/%H-%H %M %S ', baz.bar_field, 'unixepoch')"],
+      ['foo.field', 'W', "CAST(((strftime('%j', date(strftime('%Y-%m-%d', foo.field, 'unixepoch'), '-3 days', 'weekday 4')) - 1) / 7 + 1) AS NUMERIC)"]
+    ];
+  }
+
+  /**
+   * Tests timezone offset formatting.
+   *
+   * @covers ::setFieldTimezoneOffset
+   */
+  public function testSetFieldTimezoneOffset() {
+    $date_sql = new SqliteDateSql($this->database);
+
+    $field = 'foobar.field';
+    $date_sql->setFieldTimezoneOffset($field, 42);
+    $this->assertEquals("(foobar.field + 42)", $field);
+  }
+
+  /**
+   * Tests setting the database offset.
+   *
+   * @covers ::setTimezoneOffset
+   */
+  public function testSetTimezoneOffset() {
+    $database = $this->prophesize(Connection::class);
+    $database->query()->shouldNotBeCalled();
+    $date_sql = new SqliteDateSql($database->reveal());
+    $date_sql->setTimezoneOffset(42);
+  }
+
+}