3 namespace Drupal\Tests\rest\Kernel;
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;
16 * Test REST RequestHandler controller logic.
19 * @coversDefaultClass \Drupal\rest\RequestHandler
21 class RequestHandlerTest extends KernelTestBase {
24 * @var \Drupal\rest\RequestHandler
26 protected $requestHandler;
28 public static $modules = ['serialization', 'rest'];
33 * @var \Prophecy\Prophecy\ObjectProphecy
35 protected $entityStorage;
40 public function setUp() {
42 $this->entityStorage = $this->prophesize(EntityStorageInterface::class);
43 $this->requestHandler = new RequestHandler($this->entityStorage->reveal());
44 $this->requestHandler->setContainer($this->container);
50 public function testHandle() {
51 $request = new Request();
52 $route_match = new RouteMatch('test', new Route('/rest/test', ['_rest_resource_config' => 'restplugin'], ['_format' => 'json']));
54 $resource = $this->prophesize(StubRequestHandlerResourcePlugin::class);
55 $resource->get(NULL, $request)
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());
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);
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);
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);
92 * Stub class where we can prophesize methods.
94 class StubRequestHandlerResourcePlugin extends ResourceBase {
96 public function get() {}
97 public function post() {}
98 public function patch() {}
99 public function delete() {}