comparison core/modules/rest/tests/src/Kernel/RequestHandlerTest.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 1fec387a4317
comparison
equal deleted inserted replaced
-1:000000000000 0:4c8ae668cc8c
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']))->setMethods(['GET']));
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']))->setMethods(['PATCH']));
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 }