Version 1
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Ajax / AjaxResponseTest.php
diff --git a/web/core/tests/Drupal/Tests/Core/Ajax/AjaxResponseTest.php b/web/core/tests/Drupal/Tests/Core/Ajax/AjaxResponseTest.php
new file mode 100644 (file)
index 0000000..880aaec
--- /dev/null
@@ -0,0 +1,94 @@
+<?php
+
+namespace Drupal\Tests\Core\Ajax;
+
+use Drupal\Core\Ajax\AjaxResponse;
+use Drupal\Core\EventSubscriber\AjaxResponseSubscriber;
+use Drupal\Tests\UnitTestCase;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
+use Symfony\Component\HttpKernel\HttpKernelInterface;
+
+/**
+ * @coversDefaultClass \Drupal\Core\Ajax\AjaxResponse
+ * @group Ajax
+ */
+class AjaxResponseTest extends UnitTestCase {
+
+  /**
+   * The tested ajax response object.
+   *
+   * @var \Drupal\Core\Ajax\AjaxResponse
+   */
+  protected $ajaxResponse;
+
+  protected function setUp() {
+    $this->ajaxResponse = new AjaxResponse();
+  }
+
+  /**
+   * Tests the add and getCommands method.
+   *
+   * @see \Drupal\Core\Ajax\AjaxResponse::addCommand()
+   * @see \Drupal\Core\Ajax\AjaxResponse::getCommands()
+   */
+  public function testCommands() {
+    $command_one = $this->getMock('Drupal\Core\Ajax\CommandInterface');
+    $command_one->expects($this->once())
+      ->method('render')
+      ->will($this->returnValue(['command' => 'one']));
+    $command_two = $this->getMock('Drupal\Core\Ajax\CommandInterface');
+    $command_two->expects($this->once())
+      ->method('render')
+      ->will($this->returnValue(['command' => 'two']));
+    $command_three = $this->getMock('Drupal\Core\Ajax\CommandInterface');
+    $command_three->expects($this->once())
+      ->method('render')
+      ->will($this->returnValue(['command' => 'three']));
+
+    $this->ajaxResponse->addCommand($command_one);
+    $this->ajaxResponse->addCommand($command_two);
+    $this->ajaxResponse->addCommand($command_three, TRUE);
+
+    // Ensure that the added commands are in the right order.
+    $commands =& $this->ajaxResponse->getCommands();
+    $this->assertSame($commands[1], ['command' => 'one']);
+    $this->assertSame($commands[2], ['command' => 'two']);
+    $this->assertSame($commands[0], ['command' => 'three']);
+
+    // Remove one and change one element from commands and ensure the reference
+    // worked as expected.
+    unset($commands[2]);
+    $commands[0]['class'] = 'test-class';
+
+    $commands = $this->ajaxResponse->getCommands();
+    $this->assertSame($commands[1], ['command' => 'one']);
+    $this->assertFalse(isset($commands[2]));
+    $this->assertSame($commands[0], ['command' => 'three', 'class' => 'test-class']);
+  }
+
+  /**
+   * Tests the support for IE specific headers in file uploads.
+   *
+   * @cover ::prepareResponse
+   */
+  public function testPrepareResponseForIeFormRequestsWithFileUpload() {
+    $request = Request::create('/example', 'POST');
+    $request->headers->set('Accept', 'text/html');
+    $response = new AjaxResponse([]);
+    $response->headers->set('Content-Type', 'application/json; charset=utf-8');
+
+    $ajax_response_attachments_processor = $this->getMock('\Drupal\Core\Render\AttachmentsResponseProcessorInterface');
+    $subscriber = new AjaxResponseSubscriber($ajax_response_attachments_processor);
+    $event = new FilterResponseEvent(
+      $this->getMock('\Symfony\Component\HttpKernel\HttpKernelInterface'),
+      $request,
+      HttpKernelInterface::MASTER_REQUEST,
+      $response
+    );
+    $subscriber->onResponse($event);
+    $this->assertEquals('text/html; charset=utf-8', $response->headers->get('Content-Type'));
+    $this->assertEquals($response->getContent(), '<textarea>[]</textarea>');
+  }
+
+}