diff --git a/core/modules/rest/src/Plugin/views/style/Serializer.php b/core/modules/rest/src/Plugin/views/style/Serializer.php index d9e7274e643..db9b05c564f 100644 --- a/core/modules/rest/src/Plugin/views/style/Serializer.php +++ b/core/modules/rest/src/Plugin/views/style/Serializer.php @@ -135,7 +135,7 @@ class Serializer extends StylePluginBase implements CacheableDependencyInterface else { $content_type = !empty($this->options['formats']) ? reset($this->options['formats']) : 'json'; } - return $this->serializer->serialize($rows, $content_type); + return $this->serializer->serialize($rows, $content_type, ['views_style_plugin' => $this]); } /** diff --git a/core/modules/rest/tests/src/Unit/Plugin/views/style/SerializerTest.php b/core/modules/rest/tests/src/Unit/Plugin/views/style/SerializerTest.php new file mode 100644 index 00000000000..efa708eb106 --- /dev/null +++ b/core/modules/rest/tests/src/Unit/Plugin/views/style/SerializerTest.php @@ -0,0 +1,83 @@ +view = $this->getMockBuilder(ViewExecutable::class) + ->disableOriginalConstructor() + ->getMock(); + + // Make the view result empty so we don't have to mock the row plugin render + // call. + $this->view->result = []; + + $this->displayHandler = $this->getMockBuilder(RestExport::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->displayHandler->expects($this->any()) + ->method('getContentType') + ->willReturn('json'); + } + + /** + * Tests that the symfony serializer receives style plugin from the render() method. + * + * @covers ::render + */ + public function testSerializerReceivesOptions() { + $mock_serializer = $this->prophesize(SerializerInterface::class); + + // This is the main expectation of the test. We want to make sure the + // serializer options are passed to the SerializerInterface object. + $mock_serializer->serialize([], 'json', Argument::that(function ($argument) { + return isset($argument['views_style_plugin']) && $argument['views_style_plugin'] instanceof Serializer; + })) + ->willReturn() + ->shouldBeCalled(); + + $view_serializer_style = new Serializer([], 'dummy_serializer', [], $mock_serializer->reveal(), ['json', 'xml']); + $view_serializer_style->options = ['formats' => ['xml', 'json']]; + $view_serializer_style->view = $this->view; + $view_serializer_style->displayHandler = $this->displayHandler; + $view_serializer_style->render(); + } + +}