annotate core/modules/rest/tests/src/Kernel/RequestHandlerTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
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 }