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