3 namespace Drupal\Tests\views_ui\FunctionalJavascript;
5 use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
8 * Tests the JavaScript filtering on the Views listing page.
10 * @see core/modules/views_ui/js/views_ui.listing.js
13 class ViewsListingTest extends JavascriptTestBase {
18 public static $modules = ['node', 'views', 'views_ui'];
23 protected function setUp() {
26 $admin_user = $this->drupalCreateUser([
27 'administer site configuration',
30 $this->drupalLogin($admin_user);
34 * Tests the filtering on the Views listing page.
36 public function testFilterViewsListing() {
37 $enabled_views_count = 6;
38 $disabled_views_count = 2;
39 $content_views_count = 3;
41 $this->drupalGet('admin/structure/views');
43 $session = $this->assertSession();
45 $page = $this->getSession()->getPage();
47 // Test that we search in both the enabled and disabled rows.
48 $enabled_rows = $page->findAll('css', 'tr.views-ui-list-enabled');
49 $enabled_rows = $this->filterVisibleElements($enabled_rows);
50 $disabled_rows = $page->findAll('css', 'tr.views-ui-list-disabled');
51 $disabled_rows = $this->filterVisibleElements($disabled_rows);
53 // Test that we see some rows of views in both tables.
54 $this->assertCount($enabled_views_count, $enabled_rows);
55 $this->assertCount($disabled_views_count, $disabled_rows);
57 // Filter on the string 'people'. This should only show the people view.
58 $search_input = $page->find('css', '.views-filter-text.form-search');
59 $search_input->setValue('people');
61 $enabled_rows = $page->findAll('css', 'tr.views-ui-list-enabled');
62 $enabled_rows = $this->filterVisibleElements($enabled_rows);
63 $disabled_rows = $page->findAll('css', 'tr.views-ui-list-disabled');
64 $disabled_rows = $this->filterVisibleElements($disabled_rows);
66 $this->assertCount(1, $enabled_rows);
67 $this->assertCount(0, $disabled_rows);
69 // Filter on a string that also appears in the description.
70 $search_input->setValue('content');
72 $enabled_rows = $page->findAll('css', 'tr.views-ui-list-enabled');
73 $enabled_rows = $this->filterVisibleElements($enabled_rows);
74 $disabled_rows = $page->findAll('css', 'tr.views-ui-list-disabled');
75 $disabled_rows = $this->filterVisibleElements($disabled_rows);
77 $this->assertCount($content_views_count, $enabled_rows);
78 $this->assertCount($disabled_views_count, $disabled_rows);
80 // Reset the search string and check that we are back to the initial stage.
81 $search_input->setValue('');
82 // Add a backspace to trigger the keyUp event.
83 $search_input->keyUp(8);
85 $enabled_rows = $page->findAll('css', 'tr.views-ui-list-enabled');
86 $enabled_rows = $this->filterVisibleElements($enabled_rows);
87 $disabled_rows = $page->findAll('css', 'tr.views-ui-list-disabled');
88 $disabled_rows = $this->filterVisibleElements($disabled_rows);
90 $this->assertCount($enabled_views_count, $enabled_rows);
91 $this->assertCount($disabled_views_count, $disabled_rows);
93 // Disable a View and see if it moves to the disabled listing.
94 $enabled_view = $page->find('css', 'tr.views-ui-list-enabled');
95 // Open the dropdown with additional actions.
96 $enabled_view->find('css', 'li.dropbutton-toggle button')->click();
97 $disable_button = $enabled_view->find('css', 'li.disable.dropbutton-action a');
98 // Check that the disable button is visible now.
99 $this->assertTrue($disable_button->isVisible());
100 $disable_button->click();
102 $session->assertWaitOnAjaxRequest();
104 $enabled_rows = $page->findAll('css', 'tr.views-ui-list-enabled');
105 $enabled_rows = $this->filterVisibleElements($enabled_rows);
106 $disabled_rows = $page->findAll('css', 'tr.views-ui-list-disabled');
107 $disabled_rows = $this->filterVisibleElements($disabled_rows);
109 // Test that one enabled View has been moved to the disabled list.
110 $this->assertCount($enabled_views_count - 1, $enabled_rows);
111 $this->assertCount($disabled_views_count + 1, $disabled_rows);
115 * Removes any non-visible elements from the passed array.
117 * @param array $elements
120 protected function filterVisibleElements($elements) {
121 $elements = array_filter($elements, function($element) {
122 return $element->isVisible();