Version 1
[yaffs-website] / web / core / modules / views / tests / src / FunctionalJavascript / Plugin / views / Handler / GroupedExposedFilterTest.php
diff --git a/web/core/modules/views/tests/src/FunctionalJavascript/Plugin/views/Handler/GroupedExposedFilterTest.php b/web/core/modules/views/tests/src/FunctionalJavascript/Plugin/views/Handler/GroupedExposedFilterTest.php
new file mode 100644 (file)
index 0000000..9a9b2da
--- /dev/null
@@ -0,0 +1,105 @@
+<?php
+
+namespace Drupal\Tests\views\FunctionalJavascript\Plugin\views\Handler;
+
+use Drupal\field\Entity\FieldConfig;
+use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
+use Drupal\node\Entity\NodeType;
+use Drupal\views\Tests\ViewTestData;
+
+/**
+ * Tests the grouped exposed filter admin UI.
+ *
+ * @group views
+ */
+class GroupedExposedFilterTest extends JavascriptTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['node', 'views', 'views_ui', 'user', 'views_test_config'];
+
+  /**
+   * Views used by this test.
+   *
+   * @var array
+   */
+  public static $testViews = ['test_exposed_admin_ui'];
+
+  /**
+   * The account.
+   *
+   * @var \Drupal\user\UserInterface
+   */
+  protected $account;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    ViewTestData::createTestViews(get_class($this), ['views_test_config']);
+
+    // Disable automatic live preview to make the sequence of calls clearer.
+    \Drupal::configFactory()->getEditable('views.settings')->set('ui.always_live_preview', FALSE)->save();
+
+    $this->account = $this->drupalCreateUser(['administer views']);
+    $this->drupalLogin($this->account);
+
+    // Setup a node type that has the right fields for the test view.
+    NodeType::create([
+      'type' => 'page',
+    ])->save();
+
+    FieldConfig::create([
+      'entity_type' => 'node',
+      'field_name' => 'body',
+      'bundle' => 'page',
+    ])->save();
+  }
+
+  /**
+   * Test if the right fields are shown and the right values set.
+   */
+  public function testGroupedFilterValuesUI() {
+    $web_assert = $this->assertSession();
+
+    $this->drupalGet('/admin/structure/views/view/test_exposed_admin_ui');
+    $page = $this->getSession()->getPage();
+
+    // Open the dialog for the grouped filter.
+    $page->clickLink('Content: Authored on (grouped)');
+    $web_assert->assertWaitOnAjaxRequest();
+
+    // Test that the 'min' field is shown and that it contains the right value.
+    $between_from = $page->findField('options[group_info][group_items][1][value][min]');
+    $this->assertNotEmpty($between_from->isVisible());
+    $this->assertEquals('2015-01-01', $between_from->getValue());
+
+    // Test that the 'max' field is shown and that it contains the right value.
+    $between_to = $page->findField('options[group_info][group_items][1][value][max]');
+    $this->assertNotEmpty($between_to->isVisible());
+    $this->assertEquals('2016-01-01', $between_to->getValue());
+
+    $weight = $page->findField('options[group_info][group_items][1][weight]');
+
+    // If there are 3 items, values from -3 to 3 should be available.
+    $this->assertFalse($weight->find('named', ['option', -4]));
+    foreach (range(-3, 3) as $value) {
+      $this->assertTrue($weight->find('named', ['option', $value]));
+    }
+    $this->assertFalse($weight->find('named', ['option', 4]));
+
+    $page->pressButton("Add another item");
+    $web_assert->waitForField('options[group_info][group_items][4][title]');
+
+    // A new items was added, weight options should now be -4 to 4.
+    $this->assertFalse($weight->find('named', ['option', -5]));
+    foreach (range(-4, 4) as $value) {
+      $this->assertTrue($weight->find('named', ['option', $value]));
+    }
+    $this->assertFalse($weight->find('named', ['option', 5]));
+  }
+
+}