Mercurial > hg > isophonics-drupal-site
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 } |