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 {
|
else {
|
||||||
$content_type = !empty($this->options['formats']) ? reset($this->options['formats']) : 'json';
|
$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