Issue #2568413 by grasmash, pwolanin, dawehner, Wim Leers, xjm, klausi: REST views: Pass views style plugin instance to REST Export serializer
parent
0da7e5ffe9
commit
b1cd7326e0
|
@ -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]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -0,0 +1,83 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Contains \Drupal\Tests\rest\Unit\Plugin\views\style\SerializerTest.
|
||||
*/
|
||||
|
||||
namespace Drupal\Tests\rest\Unit\Plugin\views\style;
|
||||
|
||||
use Drupal\rest\Plugin\views\display\RestExport;
|
||||
use Drupal\rest\Plugin\views\style\Serializer;
|
||||
use Drupal\Tests\UnitTestCase;
|
||||
use Drupal\views\ViewExecutable;
|
||||
use Prophecy\Argument;
|
||||
use Symfony\Component\Serializer\SerializerInterface;
|
||||
|
||||
/**
|
||||
* @coversDefaultClass \Drupal\rest\Plugin\views\style\Serializer
|
||||
* @group rest
|
||||
*/
|
||||
class SerializerTest extends UnitTestCase {
|
||||
|
||||
/**
|
||||
* The View instance.
|
||||
*
|
||||
* @var \Drupal\views\ViewExecutable|\PHPUnit_Framework_MockObject_MockObject
|
||||
*/
|
||||
protected $view;
|
||||
|
||||
/**
|
||||
* The RestExport display handler.
|
||||
*
|
||||
* @var \Drupal\rest\Plugin\views\display\RestExport|\PHPUnit_Framework_MockObject_MockObject
|
||||
*/
|
||||
protected $displayHandler;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
protected function setUp() {
|
||||
parent::setUp();
|
||||
|
||||
$this->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();
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue