Version 1
[yaffs-website] / web / core / modules / rest / tests / src / Kernel / RequestHandlerTest.php
1 <?php
2
3 namespace Drupal\Tests\rest\Kernel;
4
5 use Drupal\Core\Entity\EntityStorageInterface;
6 use Drupal\Core\Routing\RouteMatch;
7 use Drupal\KernelTests\KernelTestBase;
8 use Drupal\rest\Plugin\ResourceBase;
9 use Drupal\rest\RequestHandler;
10 use Drupal\rest\ResourceResponse;
11 use Drupal\rest\RestResourceConfigInterface;
12 use Symfony\Component\HttpFoundation\Request;
13 use Symfony\Component\Routing\Route;
14
15 /**
16  * Test REST RequestHandler controller logic.
17  *
18  * @group rest
19  * @coversDefaultClass \Drupal\rest\RequestHandler
20  */
21 class RequestHandlerTest extends KernelTestBase {
22
23   /**
24    * @var \Drupal\rest\RequestHandler
25    */
26   protected $requestHandler;
27
28   public static $modules = ['serialization', 'rest'];
29
30   /**
31    * The entity storage.
32    *
33    * @var \Prophecy\Prophecy\ObjectProphecy
34    */
35   protected $entityStorage;
36
37   /**
38    * {@inheritdoc}
39    */
40   public function setUp() {
41     parent::setUp();
42     $this->entityStorage = $this->prophesize(EntityStorageInterface::class);
43     $this->requestHandler = new RequestHandler($this->entityStorage->reveal());
44     $this->requestHandler->setContainer($this->container);
45   }
46
47   /**
48    * @covers ::handle
49    */
50   public function testHandle() {
51     $request = new Request();
52     $route_match = new RouteMatch('test', new Route('/rest/test', ['_rest_resource_config' => 'restplugin'], ['_format' => 'json']));
53
54     $resource = $this->prophesize(StubRequestHandlerResourcePlugin::class);
55     $resource->get(NULL, $request)
56       ->shouldBeCalled();
57
58     // Setup the configuration.
59     $config = $this->prophesize(RestResourceConfigInterface::class);
60     $config->getResourcePlugin()->willReturn($resource->reveal());
61     $config->getCacheContexts()->willReturn([]);
62     $config->getCacheTags()->willReturn([]);
63     $config->getCacheMaxAge()->willReturn(12);
64     $this->entityStorage->load('restplugin')->willReturn($config->reveal());
65
66     // Response returns NULL this time because response from plugin is not
67     // a ResourceResponse so it is passed through directly.
68     $response = $this->requestHandler->handle($route_match, $request);
69     $this->assertEquals(NULL, $response);
70
71     // Response will return a ResourceResponse this time.
72     $response = new ResourceResponse([]);
73     $resource->get(NULL, $request)
74       ->willReturn($response);
75     $handler_response = $this->requestHandler->handle($route_match, $request);
76     $this->assertEquals($response, $handler_response);
77
78     // We will call the patch method this time.
79     $route_match = new RouteMatch('test', new Route('/rest/test', ['_rest_resource_config' => 'restplugin'], ['_content_type_format' => 'json']));
80     $request->setMethod('PATCH');
81     $response = new ResourceResponse([]);
82     $resource->patch(NULL, $request)
83       ->shouldBeCalledTimes(1)
84       ->willReturn($response);
85     $handler_response = $this->requestHandler->handle($route_match, $request);
86     $this->assertEquals($response, $handler_response);
87   }
88
89 }
90
91 /**
92  * Stub class where we can prophesize methods.
93  */
94 class StubRequestHandlerResourcePlugin extends ResourceBase {
95
96   public function get() {}
97   public function post() {}
98   public function patch() {}
99   public function delete() {}
100
101 }