3 namespace Drupal\Tests\Core\Render\Element;
5 use Drupal\Core\DependencyInjection\ContainerBuilder;
6 use Drupal\Core\Form\FormBuilderInterface;
7 use Drupal\Core\GeneratedUrl;
8 use Drupal\Core\Render\Element\RenderElement;
9 use Drupal\Tests\UnitTestCase;
10 use Symfony\Component\HttpFoundation\Request;
11 use Symfony\Component\HttpFoundation\RequestStack;
14 * @coversDefaultClass \Drupal\Core\Render\Element\RenderElement
17 class RenderElementTest extends UnitTestCase {
22 * @var \Symfony\Component\HttpFoundation\RequestStack
24 protected $requestStack;
29 * @var \Drupal\Core\DependencyInjection\ContainerBuilder
36 protected function setUp() {
39 $this->requestStack = new RequestStack();
40 $this->container = new ContainerBuilder();
41 $this->container->set('request_stack', $this->requestStack);
42 \Drupal::setContainer($this->container);
46 * @covers ::preRenderAjaxForm
48 public function testPreRenderAjaxForm() {
49 $request = Request::create('/test');
50 $request->query->set('foo', 'bar');
51 $this->requestStack->push($request);
53 $prophecy = $this->prophesize('Drupal\Core\Routing\UrlGeneratorInterface');
54 $url = '/test?foo=bar&ajax_form=1';
55 $prophecy->generateFromRoute('<current>', [], ['query' => ['foo' => 'bar', FormBuilderInterface::AJAX_FORM_REQUEST => TRUE]], TRUE)
56 ->willReturn((new GeneratedUrl())->setCacheContexts(['route'])->setGeneratedUrl($url));
58 $url_generator = $prophecy->reveal();
59 $this->container->set('url_generator', $url_generator);
66 'callback' => 'test-callback',
70 $element = RenderElement::preRenderAjaxForm($element);
72 $this->assertTrue($element['#ajax_processed']);
73 $this->assertEquals($url, $element['#attached']['drupalSettings']['ajax']['test']['url']);
77 * @covers ::preRenderAjaxForm
79 public function testPreRenderAjaxFormWithQueryOptions() {
80 $request = Request::create('/test');
81 $request->query->set('foo', 'bar');
82 $this->requestStack->push($request);
84 $prophecy = $this->prophesize('Drupal\Core\Routing\UrlGeneratorInterface');
85 $url = '/test?foo=bar&other=query&ajax_form=1';
86 $prophecy->generateFromRoute('<current>', [], ['query' => ['foo' => 'bar', 'other' => 'query', FormBuilderInterface::AJAX_FORM_REQUEST => TRUE]], TRUE)
87 ->willReturn((new GeneratedUrl())->setCacheContexts(['route'])->setGeneratedUrl($url));
89 $url_generator = $prophecy->reveal();
90 $this->container->set('url_generator', $url_generator);
97 'callback' => 'test-callback',
106 $element = RenderElement::preRenderAjaxForm($element);
108 $this->assertTrue($element['#ajax_processed']);
109 $this->assertEquals($url, $element['#attached']['drupalSettings']['ajax']['test']['url']);