Version 1
[yaffs-website] / web / core / modules / rest / tests / src / Kernel / RequestHandlerTest.php
diff --git a/web/core/modules/rest/tests/src/Kernel/RequestHandlerTest.php b/web/core/modules/rest/tests/src/Kernel/RequestHandlerTest.php
new file mode 100644 (file)
index 0000000..b417e2a
--- /dev/null
@@ -0,0 +1,101 @@
+<?php
+
+namespace Drupal\Tests\rest\Kernel;
+
+use Drupal\Core\Entity\EntityStorageInterface;
+use Drupal\Core\Routing\RouteMatch;
+use Drupal\KernelTests\KernelTestBase;
+use Drupal\rest\Plugin\ResourceBase;
+use Drupal\rest\RequestHandler;
+use Drupal\rest\ResourceResponse;
+use Drupal\rest\RestResourceConfigInterface;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Routing\Route;
+
+/**
+ * Test REST RequestHandler controller logic.
+ *
+ * @group rest
+ * @coversDefaultClass \Drupal\rest\RequestHandler
+ */
+class RequestHandlerTest extends KernelTestBase {
+
+  /**
+   * @var \Drupal\rest\RequestHandler
+   */
+  protected $requestHandler;
+
+  public static $modules = ['serialization', 'rest'];
+
+  /**
+   * The entity storage.
+   *
+   * @var \Prophecy\Prophecy\ObjectProphecy
+   */
+  protected $entityStorage;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+    $this->entityStorage = $this->prophesize(EntityStorageInterface::class);
+    $this->requestHandler = new RequestHandler($this->entityStorage->reveal());
+    $this->requestHandler->setContainer($this->container);
+  }
+
+  /**
+   * @covers ::handle
+   */
+  public function testHandle() {
+    $request = new Request();
+    $route_match = new RouteMatch('test', new Route('/rest/test', ['_rest_resource_config' => 'restplugin'], ['_format' => 'json']));
+
+    $resource = $this->prophesize(StubRequestHandlerResourcePlugin::class);
+    $resource->get(NULL, $request)
+      ->shouldBeCalled();
+
+    // Setup the configuration.
+    $config = $this->prophesize(RestResourceConfigInterface::class);
+    $config->getResourcePlugin()->willReturn($resource->reveal());
+    $config->getCacheContexts()->willReturn([]);
+    $config->getCacheTags()->willReturn([]);
+    $config->getCacheMaxAge()->willReturn(12);
+    $this->entityStorage->load('restplugin')->willReturn($config->reveal());
+
+    // Response returns NULL this time because response from plugin is not
+    // a ResourceResponse so it is passed through directly.
+    $response = $this->requestHandler->handle($route_match, $request);
+    $this->assertEquals(NULL, $response);
+
+    // Response will return a ResourceResponse this time.
+    $response = new ResourceResponse([]);
+    $resource->get(NULL, $request)
+      ->willReturn($response);
+    $handler_response = $this->requestHandler->handle($route_match, $request);
+    $this->assertEquals($response, $handler_response);
+
+    // We will call the patch method this time.
+    $route_match = new RouteMatch('test', new Route('/rest/test', ['_rest_resource_config' => 'restplugin'], ['_content_type_format' => 'json']));
+    $request->setMethod('PATCH');
+    $response = new ResourceResponse([]);
+    $resource->patch(NULL, $request)
+      ->shouldBeCalledTimes(1)
+      ->willReturn($response);
+    $handler_response = $this->requestHandler->handle($route_match, $request);
+    $this->assertEquals($response, $handler_response);
+  }
+
+}
+
+/**
+ * Stub class where we can prophesize methods.
+ */
+class StubRequestHandlerResourcePlugin extends ResourceBase {
+
+  public function get() {}
+  public function post() {}
+  public function patch() {}
+  public function delete() {}
+
+}