Further Drupal 8.6.4 changes. Some core files were not committed before a commit...
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Ajax / AjaxResponseTest.php
1 <?php
2
3 namespace Drupal\Tests\Core\Ajax;
4
5 use Drupal\Core\Ajax\AjaxResponse;
6 use Drupal\Core\EventSubscriber\AjaxResponseSubscriber;
7 use Drupal\Tests\UnitTestCase;
8 use Symfony\Component\HttpFoundation\Request;
9 use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
10 use Symfony\Component\HttpKernel\HttpKernelInterface;
11
12 /**
13  * @coversDefaultClass \Drupal\Core\Ajax\AjaxResponse
14  * @group Ajax
15  */
16 class AjaxResponseTest extends UnitTestCase {
17
18   /**
19    * The tested ajax response object.
20    *
21    * @var \Drupal\Core\Ajax\AjaxResponse
22    */
23   protected $ajaxResponse;
24
25   protected function setUp() {
26     $this->ajaxResponse = new AjaxResponse();
27   }
28
29   /**
30    * Tests the add and getCommands method.
31    *
32    * @see \Drupal\Core\Ajax\AjaxResponse::addCommand()
33    * @see \Drupal\Core\Ajax\AjaxResponse::getCommands()
34    */
35   public function testCommands() {
36     $command_one = $this->getMock('Drupal\Core\Ajax\CommandInterface');
37     $command_one->expects($this->once())
38       ->method('render')
39       ->will($this->returnValue(['command' => 'one']));
40     $command_two = $this->getMock('Drupal\Core\Ajax\CommandInterface');
41     $command_two->expects($this->once())
42       ->method('render')
43       ->will($this->returnValue(['command' => 'two']));
44     $command_three = $this->getMock('Drupal\Core\Ajax\CommandInterface');
45     $command_three->expects($this->once())
46       ->method('render')
47       ->will($this->returnValue(['command' => 'three']));
48
49     $this->ajaxResponse->addCommand($command_one);
50     $this->ajaxResponse->addCommand($command_two);
51     $this->ajaxResponse->addCommand($command_three, TRUE);
52
53     // Ensure that the added commands are in the right order.
54     $commands =& $this->ajaxResponse->getCommands();
55     $this->assertSame(['command' => 'one'], $commands[1]);
56     $this->assertSame(['command' => 'two'], $commands[2]);
57     $this->assertSame(['command' => 'three'], $commands[0]);
58
59     // Remove one and change one element from commands and ensure the reference
60     // worked as expected.
61     unset($commands[2]);
62     $commands[0]['class'] = 'test-class';
63
64     $commands = $this->ajaxResponse->getCommands();
65     $this->assertSame(['command' => 'one'], $commands[1]);
66     $this->assertFalse(isset($commands[2]));
67     $this->assertSame(['command' => 'three', 'class' => 'test-class'], $commands[0]);
68   }
69
70   /**
71    * Tests the support for IE specific headers in file uploads.
72    *
73    * @cover ::prepareResponse
74    */
75   public function testPrepareResponseForIeFormRequestsWithFileUpload() {
76     $request = Request::create('/example', 'POST');
77     $request->headers->set('Accept', 'text/html');
78     $response = new AjaxResponse([]);
79     $response->headers->set('Content-Type', 'application/json; charset=utf-8');
80
81     $ajax_response_attachments_processor = $this->getMock('\Drupal\Core\Render\AttachmentsResponseProcessorInterface');
82     $subscriber = new AjaxResponseSubscriber($ajax_response_attachments_processor);
83     $event = new FilterResponseEvent(
84       $this->getMock('\Symfony\Component\HttpKernel\HttpKernelInterface'),
85       $request,
86       HttpKernelInterface::MASTER_REQUEST,
87       $response
88     );
89     $subscriber->onResponse($event);
90     $this->assertEquals('text/html; charset=utf-8', $response->headers->get('Content-Type'));
91     $this->assertEquals($response->getContent(), '<textarea>[]</textarea>');
92   }
93
94 }