Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / core / modules / rest / tests / src / Functional / EntityResource / EntityTest / EntityTestTextItemNormalizerTest.php
diff --git a/web/core/modules/rest/tests/src/Functional/EntityResource/EntityTest/EntityTestTextItemNormalizerTest.php b/web/core/modules/rest/tests/src/Functional/EntityResource/EntityTest/EntityTestTextItemNormalizerTest.php
new file mode 100644 (file)
index 0000000..cd8654d
--- /dev/null
@@ -0,0 +1,195 @@
+<?php
+
+namespace Drupal\Tests\rest\Functional\EntityResource\EntityTest;
+
+use Drupal\Core\Cache\Cache;
+use Drupal\Core\Language\LanguageInterface;
+use Drupal\filter\Entity\FilterFormat;
+use Drupal\Tests\rest\Functional\AnonResourceTestTrait;
+
+/**
+ * @group rest
+ */
+class EntityTestTextItemNormalizerTest extends EntityTestResourceTestBase {
+
+  use AnonResourceTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['filter_test'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $format = 'json';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $mimeType = 'application/json';
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUpAuthorization($method) {
+    parent::setUpAuthorization($method);
+    if (in_array($method, ['POST', 'PATCH'], TRUE)) {
+      $this->grantPermissionsToTestedRole(['use text format my_text_format']);
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getExpectedNormalizedEntity() {
+    $expected = parent::getExpectedNormalizedEntity();
+    $expected['field_test_text'] = [
+      [
+        'value' => 'Cádiz is the oldest continuously inhabited city in Spain and a nice place to spend a Sunday with friends.',
+        'format' => 'my_text_format',
+        'processed' => '<p>Cádiz is the oldest continuously inhabited city in Spain and a nice place to spend a Sunday with friends.</p>' . "\n" . '<p>This is a dynamic llama.</p>',
+      ],
+    ];
+    return $expected;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function createEntity() {
+    $entity = parent::createEntity();
+    if (!FilterFormat::load('my_text_format')) {
+      FilterFormat::create([
+        'format' => 'my_text_format',
+        'name' => 'My Text Format',
+        'filters' => [
+          'filter_test_assets' => [
+            'weight' => -1,
+            'status' => TRUE,
+          ],
+          'filter_test_cache_tags' => [
+            'weight' => 0,
+            'status' => TRUE,
+          ],
+          'filter_test_cache_contexts' => [
+            'weight' => 0,
+            'status' => TRUE,
+          ],
+          'filter_test_cache_merge' => [
+            'weight' => 0,
+            'status' => TRUE,
+          ],
+          'filter_test_placeholders' => [
+            'weight' => 1,
+            'status' => TRUE,
+          ],
+          'filter_autop' => [
+            'status' => TRUE,
+          ],
+        ],
+      ])->save();
+    }
+    $entity->field_test_text = [
+      'value' => 'Cádiz is the oldest continuously inhabited city in Spain and a nice place to spend a Sunday with friends.',
+      'format' => 'my_text_format',
+    ];
+    $entity->save();
+    return $entity;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getNormalizedPostEntity() {
+    $post_entity = parent::getNormalizedPostEntity();
+    $post_entity['field_test_text'] = [
+      [
+        'value' => 'Llamas are awesome.',
+        'format' => 'my_text_format',
+      ],
+    ];
+    return $post_entity;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getExpectedCacheTags() {
+    return Cache::mergeTags([
+      // The cache tag set by the processed_text element itself.
+      'config:filter.format.my_text_format',
+      // The cache tags set by the filter_test_cache_tags filter.
+      'foo:bar',
+      'foo:baz',
+      // The cache tags set by the filter_test_cache_merge filter.
+      'merge:tag'
+    ], parent::getExpectedCacheTags());
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getExpectedCacheContexts() {
+    return Cache::mergeContexts([
+      // The cache context set by the filter_test_cache_contexts filter.
+      'languages:' . LanguageInterface::TYPE_CONTENT,
+      // The default cache contexts for Renderer.
+      'languages:' . LanguageInterface::TYPE_INTERFACE,
+      'theme',
+      // The cache tags set by the filter_test_cache_merge filter.
+      'user.permissions',
+    ], parent::getExpectedCacheContexts());
+  }
+
+  /**
+   * Tests GETting an entity with the test text field set to a specific format.
+   *
+   * @dataProvider providerTestGetWithFormat
+   */
+  public function testGetWithFormat($text_format_id, array $expected_cache_tags) {
+    FilterFormat::create([
+      'name' => 'Pablo Piccasso',
+      'format' => 'pablo',
+      'langcode' => 'es',
+      'filters' => [],
+    ])->save();
+
+    // Set TextItemBase field's value for testing, using the given text format.
+    $value = [
+      'value' => $this->randomString(),
+    ];
+    if ($text_format_id !== FALSE) {
+      $value['format'] = $text_format_id;
+    }
+    $this->entity->set('field_test_text', $value)->save();
+
+    $this->initAuthentication();
+    $url = $this->getEntityResourceUrl();
+    $url->setOption('query', ['_format' => static::$format]);
+    $request_options = $this->getAuthenticationRequestOptions('GET');
+    $this->provisionEntityResource();
+    $this->setUpAuthorization('GET');
+    $response = $this->request('GET', $url, $request_options);
+    $expected_cache_tags = Cache::mergeTags($expected_cache_tags, parent::getExpectedCacheTags());
+    $this->assertSame($expected_cache_tags, explode(' ', $response->getHeader('X-Drupal-Cache-Tags')[0]));
+  }
+
+  public function providerTestGetWithFormat() {
+    return [
+      'format specified (different from fallback format)' => [
+        'pablo',
+        ['config:filter.format.pablo'],
+      ],
+      'format specified (happens to be the same as fallback format)' => [
+        'plain_text',
+        ['config:filter.format.plain_text'],
+      ],
+      'no format specified: fallback format used automatically' => [
+        FALSE,
+        ['config:filter.format.plain_text', 'config:filter.settings'],
+      ],
+    ];
+  }
+
+}