Commit 6b7039c8 authored by xjm's avatar xjm

Issue #2508679 by tim.plunkett, Fabianx: Fix empty redirects and redirects...

Issue #2508679 by tim.plunkett, Fabianx: Fix empty redirects and redirects with options in \Drupal\field_ui\FieldUI::getNextDestination()
parent 2068e0ba
......@@ -40,10 +40,15 @@ public static function getOverviewRouteInfo($entity_type_id, $bundle) {
* @param array $destinations
* An array of destinations to redirect to.
*
* @return \Drupal\Core\Url
* @return \Drupal\Core\Url|null
* The next destination to redirect to.
*/
public static function getNextDestination(array $destinations) {
// If there are no valid destinations left, return here.
if (empty($destinations)) {
return NULL;
}
$next_destination = array_shift($destinations);
if (is_array($next_destination)) {
$next_destination['options']['query']['destinations'] = $destinations;
......@@ -59,7 +64,7 @@ public static function getNextDestination(array $destinations) {
}
// Redirect to any given path within the same domain.
// @todo Revisit this in https://www.drupal.org/node/2418219.
$next_destination = Url::fromUserInput('/' . $options['path']);
$next_destination = Url::fromUserInput('/' . $options['path'], $options);
}
return $next_destination;
}
......
<?php
/**
* @file
* Contains \Drupal\Tests\field_ui\Unit\FieldUiTest.
*/
namespace Drupal\Tests\field_ui\Unit;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\field_ui\FieldUI;
use Drupal\Tests\UnitTestCase;
/**
* @coversDefaultClass \Drupal\field_ui\FieldUI
*
* @group field_ui
*/
class FieldUiTest extends UnitTestCase {
/**
* The path validator.
*
* @var \Drupal\Core\Path\PathValidatorInterface|\PHPUnit_Framework_MockObject_MockObject
*/
protected $pathValidator;
/**
* {@inheritdoc}
*/
protected function setUp() {
parent::setUp();
$this->pathValidator = $this->getMock('Drupal\Core\Path\PathValidatorInterface');
$container = new ContainerBuilder();
$container->set('path.validator', $this->pathValidator);
\Drupal::setContainer($container);
}
/**
* @covers ::getNextDestination
*/
public function testGetNextDestination() {
$destinations = ['admin', 'admin/content'];
$expected_uri = 'base:admin';
$expected_query = [
'destinations' => ['admin/content'],
];
$actual = FieldUI::getNextDestination($destinations);
$this->assertSame($expected_uri, $actual->getUri());
$this->assertSame($expected_query, $actual->getOption('query'));
}
/**
* @covers ::getNextDestination
*/
public function testGetNextDestinationEmpty() {
$destinations = [];
$actual = FieldUI::getNextDestination($destinations);
$this->assertNull($actual);
}
/**
* @covers ::getNextDestination
*/
public function testGetNextDestinationRouteName() {
$destinations = [['route_name' => 'system.admin'], ['route_name' => 'system.admin_content']];
$expected_route_name = 'system.admin';
$expected_query = [
'destinations' => [['route_name' => 'system.admin_content']],
];
$actual = FieldUI::getNextDestination($destinations);
$this->assertSame($expected_route_name, $actual->getRouteName());
$this->assertSame($expected_query, $actual->getOption('query'));
}
}
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