fc696c03a866ff0097613063b1fe7280f33ddf0d
[yaffs-website] / web / core / modules / views_ui / tests / src / FunctionalJavascript / ViewsListingTest.php
1 <?php
2
3 namespace Drupal\Tests\views_ui\FunctionalJavascript;
4
5 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
6
7 /**
8  * Tests the JavaScript filtering on the Views listing page.
9  *
10  * @see core/modules/views_ui/js/views_ui.listing.js
11  * @group views_ui
12  */
13 class ViewsListingTest extends WebDriverTestBase {
14
15   /**
16    * {@inheritdoc}
17    */
18   public static $modules = ['node', 'views', 'views_ui'];
19
20   /**
21    * {@inheritdoc}
22    */
23   protected function setUp() {
24     parent::setUp();
25
26     $admin_user = $this->drupalCreateUser([
27       'administer site configuration',
28       'administer views',
29     ]);
30     $this->drupalLogin($admin_user);
31   }
32
33   /**
34    * Tests the filtering on the Views listing page.
35    */
36   public function testFilterViewsListing() {
37     $enabled_views_count = 6;
38     $disabled_views_count = 2;
39     $content_views_count = 3;
40
41     $this->drupalGet('admin/structure/views');
42
43     $session = $this->assertSession();
44
45     $page = $this->getSession()->getPage();
46
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);
52
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);
56
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');
60
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);
65
66     $this->assertCount(1, $enabled_rows);
67     $this->assertCount(0, $disabled_rows);
68
69     // Filter on a string that also appears in the description.
70     $search_input->setValue('content');
71
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);
76
77     $this->assertCount($content_views_count, $enabled_rows);
78     $this->assertCount($disabled_views_count, $disabled_rows);
79
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);
84
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);
89
90     $this->assertCount($enabled_views_count, $enabled_rows);
91     $this->assertCount($disabled_views_count, $disabled_rows);
92
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     $view_description = $enabled_view->find('css', '.views-ui-view-name h3')->getText();
96     // Open the dropdown with additional actions.
97     $enabled_view->find('css', 'li.dropbutton-toggle button')->click();
98     $disable_button = $enabled_view->find('css', 'li.disable.dropbutton-action a');
99     // Check that the disable button is visible now.
100     $this->assertTrue($disable_button->isVisible());
101     $disable_button->click();
102
103     $session->assertWaitOnAjaxRequest();
104
105     $enabled_rows = $page->findAll('css', 'tr.views-ui-list-enabled');
106     $enabled_rows = $this->filterVisibleElements($enabled_rows);
107     $disabled_rows = $page->findAll('css', 'tr.views-ui-list-disabled');
108     $disabled_rows = $this->filterVisibleElements($disabled_rows);
109
110     // Test that one enabled View has been moved to the disabled list.
111     $this->assertCount($enabled_views_count - 1, $enabled_rows);
112     $this->assertCount($disabled_views_count + 1, $disabled_rows);
113
114     // Test that the keyboard focus is on the dropdown button of the View we
115     // just disabled.
116     $this->assertTrue($this->getSession()->evaluateScript("jQuery(document.activeElement).parent().is('li.enable.dropbutton-action')"));
117     $this->assertEquals($view_description, $this->getSession()->evaluateScript("jQuery(document.activeElement).parents('tr').find('h3').text()"));
118
119     // Enable the view again and ensure we have the focus on the edit button.
120     $this->getSession()->evaluateScript('jQuery(document.activeElement).click()');
121     $session->assertWaitOnAjaxRequest();
122
123     $this->assertTrue($this->getSession()->evaluateScript("jQuery(document.activeElement).parent().is('li.edit.dropbutton-action')"));
124     $this->assertEquals($view_description, $this->getSession()->evaluateScript("jQuery(document.activeElement).parents('tr').find('h3').text()"));
125   }
126
127   /**
128    * Removes any non-visible elements from the passed array.
129    *
130    * @param array $elements
131    * @return array
132    */
133   protected function filterVisibleElements($elements) {
134     $elements = array_filter($elements, function ($element) {
135       return $element->isVisible();
136     });
137     return $elements;
138   }
139
140 }