Unverified Commit 6e594c26 authored by alexpott's avatar alexpott

Issue #3060603 by nuez, marcoscano, phenaproxima, alexpott, seanB: Live...

Issue #3060603 by nuez, marcoscano, phenaproxima, alexpott, seanB: Live preview is broken when editing the media_library view
parent 1598f3e5
......@@ -70,7 +70,21 @@ function media_library_views_post_render(ViewExecutable $view, &$output, CachePl
if ($view->id() === 'media_library') {
$output['#attached']['library'][] = 'media_library/view';
if (strpos($view->current_display, 'widget') === 0) {
$query = MediaLibraryState::fromRequest($view->getRequest())->all();
try {
$query = MediaLibraryState::fromRequest($view->getRequest())->all();
}
catch (InvalidArgumentException $e) {
// MediaLibraryState::fromRequest() will throw an exception if the view
// is being previewed, since not all required query parameters will be
// present. In a preview, however, this can be omitted since we're
// merely previewing.
// @todo Use the views API for checking for the preview mode when it
// lands. https://www.drupal.org/project/drupal/issues/3060855
if (empty($view->preview) && empty($view->live_preview)) {
throw $e;
}
}
// If the current query contains any parameters we use to contextually
// filter the view, ensure they persist across AJAX rebuilds.
// The ajax_path is shared for all AJAX views on the page, but our query
......
......@@ -26,7 +26,13 @@ class MediaLibraryTest extends WebDriverTestBase {
/**
* {@inheritdoc}
*/
protected static $modules = ['block', 'media_library_test', 'field_ui'];
protected static $modules = [
'block',
'media_library_test',
'field_ui',
'views',
'views_ui',
];
/**
* {@inheritdoc}
......@@ -73,6 +79,7 @@ protected function setUp() {
'delete any media',
'view media',
'administer node form display',
'administer views',
]);
$this->drupalLogin($user);
$this->drupalPlaceBlock('local_tasks_block');
......@@ -272,6 +279,43 @@ public function testWidgetWithoutMediaTypes() {
$assert_session->elementNotExists('css', '.media-library-open-button[name^="field_null_types_media"]');
}
/**
* Tests that the integration with Views works correctly.
*/
public function testViewsAdmin() {
$assert_session = $this->assertSession();
$page = $this->getSession()->getPage();
// Assert that the widget can be seen and that there are 8 items.
$this->drupalGet('/admin/structure/views/view/media_library/edit/widget');
$assert_session->assertWaitOnAjaxRequest();
$assert_session->elementsCount('css', '.media-library-item', 8);
// Assert that filtering works in live preview.
$page->find('css', '.media-library-view .view-filters')->fillField('name', 'snake');
$page->find('css', '.media-library-view .view-filters')->pressButton('Apply filters');
$assert_session->assertWaitOnAjaxRequest();
$assert_session->elementsCount('css', '.media-library-item', 1);
// Test the same routine but in the view for the table wiget.
$this->drupalGet('/admin/structure/views/view/media_library/edit/widget_table');
$assert_session->assertWaitOnAjaxRequest();
$assert_session->elementsCount('css', '.media-library-item', 8);
// Assert that filtering works in live preview.
$page->find('css', '.media-library-view .view-filters')->fillField('name', 'snake');
$page->find('css', '.media-library-view .view-filters')->pressButton('Apply filters');
$assert_session->assertWaitOnAjaxRequest();
$assert_session->elementsCount('css', '.media-library-item', 1);
// We cannot test clicking the 'Insert selected' button in either view
// because we expect an AJAX error, which would always throw an exception
// on ::tearDown even if we try to catch it here. If there is an API for
// marking certain elements 'unsuitable for previewing', we could test that
// here.
// @see https://www.drupal.org/project/drupal/issues/3060852
}
/**
* Tests that the widget access works as expected.
*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment