Mercurial > hg > isophonics-drupal-site
diff core/modules/quickedit/tests/src/Functional/QuickEditCustomPipelineTest.php @ 18:af1871eacc83
Update to Drupal core 8.7.1
| author | Chris Cannam |
|---|---|
| date | Thu, 09 May 2019 15:33:08 +0100 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/quickedit/tests/src/Functional/QuickEditCustomPipelineTest.php Thu May 09 15:33:08 2019 +0100 @@ -0,0 +1,102 @@ +<?php + +namespace Drupal\Tests\quickedit\Functional; + +use Drupal\Component\Serialization\Json; +use Drupal\Core\EventSubscriber\MainContentViewSubscriber; +use Drupal\Tests\BrowserTestBase; + +/** + * Tests using a custom pipeline with Quick Edit. + * + * @group quickedit + */ +class QuickEditCustomPipelineTest extends BrowserTestBase { + + /** + * {@inheritdoc} + */ + protected static $modules = [ + 'quickedit', + 'quickedit_test', + 'node', + ]; + + /** + * Tests that Quick Edit works with custom render pipelines. + */ + public function testCustomPipeline() { + // Create a node type. + $this->drupalCreateContentType([ + 'type' => 'article', + 'name' => 'Article', + ]); + $node = $this->createNode(['type' => 'article']); + $editor_user = $this->drupalCreateUser([ + 'access content', + 'create article content', + 'edit any article content', + 'access in-place editing', + ]); + $this->drupalLogin($editor_user); + + $custom_render_url = $this->buildUrl('quickedit/form/node/' . $node->id() . '/body/en/quickedit_test-custom-render-data'); + + $client = $this->getHttpClient(); + $post = ['nocssjs' => 'true']; + $response = $client->post($custom_render_url, [ + 'body' => http_build_query($post), + 'query' => [MainContentViewSubscriber::WRAPPER_FORMAT => 'drupal_ajax'], + 'cookies' => $this->getSessionCookies(), + 'headers' => [ + 'Accept' => 'application/json', + 'Content-Type' => 'application/x-www-form-urlencoded', + ], + 'http_errors' => FALSE, + ]); + + $this->assertEquals(200, $response->getStatusCode()); + + $ajax_commands = Json::decode($response->getBody()); + // Request editing to render results with the custom render pipeline. + + // Prepare form values for submission. drupalPostAJAX() is not suitable for + // handling pages with JSON responses, so we need our own solution here. + $form_tokens_found = preg_match('/\sname="form_token" value="([^"]+)"/', $ajax_commands[0]['data'], $token_match) && preg_match('/\sname="form_build_id" value="([^"]+)"/', $ajax_commands[0]['data'], $build_id_match); + $this->assertTrue($form_tokens_found, 'Form tokens found in output.'); + + $post = [ + 'form_id' => 'quickedit_field_form', + 'form_token' => $token_match[1], + 'form_build_id' => $build_id_match[1], + 'body[0][summary]' => '', + 'body[0][value]' => '<p>Fine thanks.</p>', + 'body[0][format]' => 'filtered_html', + 'op' => t('Save'), + ]; + // Assume there is another field on this page, which doesn't use a custom + // render pipeline, but the default one, and it uses the "full" view mode. + $post += ['other_view_modes[]' => 'full']; + + // Submit field form and check response. Should render with the custom + // render pipeline. + $response = $client->post($custom_render_url, [ + 'body' => http_build_query($post), + 'query' => [MainContentViewSubscriber::WRAPPER_FORMAT => 'drupal_ajax'], + 'cookies' => $this->getSessionCookies(), + 'headers' => [ + 'Accept' => 'application/json', + 'Content-Type' => 'application/x-www-form-urlencoded', + ], + 'http_errors' => FALSE, + ]); + $ajax_commands = Json::decode($response->getBody()); + $this->assertIdentical(1, count($ajax_commands), 'The field form HTTP request results in one AJAX command.'); + $this->assertIdentical('quickeditFieldFormSaved', $ajax_commands[0]['command'], 'The first AJAX command is a quickeditFieldFormSaved command.'); + $this->assertTrue(strpos($ajax_commands[0]['data'], 'Fine thanks.'), 'Form value saved and printed back.'); + $this->assertTrue(strpos($ajax_commands[0]['data'], '<div class="quickedit-test-wrapper">') !== FALSE, 'Custom render pipeline used to render the value.'); + $this->assertIdentical(array_keys($ajax_commands[0]['other_view_modes']), ['full'], 'Field was also rendered in the "full" view mode.'); + $this->assertTrue(strpos($ajax_commands[0]['other_view_modes']['full'], 'Fine thanks.'), '"full" version of field contains the form value.'); + } + +}
