function StyleSerializerEntityTest::testLivePreview

Same name in other branches
  1. 11.x core/modules/rest/tests/src/Functional/Views/StyleSerializerEntityTest.php \Drupal\Tests\rest\Functional\Views\StyleSerializerEntityTest::testLivePreview()

Tests the live preview output for json output.

File

core/modules/rest/tests/src/Functional/Views/StyleSerializerEntityTest.php, line 521

Class

StyleSerializerEntityTest
Tests the serializer style plugin.

Namespace

Drupal\Tests\rest\Functional\Views

Code

public function testLivePreview() : void {
    // We set up a request so it looks like a request in the live preview.
    $request = new Request();
    $request->query
        ->add([
        MainContentViewSubscriber::WRAPPER_FORMAT => 'drupal_ajax',
    ]);
    $request->setSession(new Session(new MockArraySessionStorage()));
    
    /** @var \Symfony\Component\HttpFoundation\RequestStack $request_stack */
    $request_stack = \Drupal::service('request_stack');
    $request_stack->push($request);
    $view = Views::getView('test_serializer_display_entity');
    $view->setDisplay('rest_export_1');
    $this->executeView($view);
    // Get the serializer service.
    $serializer = $this->container
        ->get('serializer');
    $entities = [];
    foreach ($view->result as $row) {
        $entities[] = $row->_entity;
    }
    $expected = $serializer->serialize($entities, 'json');
    $view->live_preview = TRUE;
    $build = $view->preview();
    $rendered_json = $build['#plain_text'];
    $this->assertArrayNotHasKey('#markup', $build);
    $this->assertSame($expected, $rendered_json, 'Ensure the previewed json is escaped.');
    $view->destroy();
    $expected = $serializer->serialize($entities, 'xml');
    // Change the request format to xml.
    $view->setDisplay('rest_export_1');
    $view->getDisplay()
        ->setOption('style', [
        'type' => 'serializer',
        'options' => [
            'uses_fields' => FALSE,
            'formats' => [
                'xml' => 'xml',
            ],
        ],
    ]);
    $this->executeView($view);
    $build = $view->preview();
    $rendered_xml = $build['#plain_text'];
    $this->assertEquals($expected, $rendered_xml, 'Ensure we preview xml when we change the request format.');
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.