Version 1
[yaffs-website] / web / core / modules / editor / tests / src / Kernel / EditorFileReferenceFilterTest.php
diff --git a/web/core/modules/editor/tests/src/Kernel/EditorFileReferenceFilterTest.php b/web/core/modules/editor/tests/src/Kernel/EditorFileReferenceFilterTest.php
new file mode 100644 (file)
index 0000000..c68ae48
--- /dev/null
@@ -0,0 +1,123 @@
+<?php
+
+namespace Drupal\Tests\editor\Kernel;
+
+use Drupal\Core\Cache\Cache;
+use Drupal\file\Entity\File;
+use Drupal\filter\FilterPluginCollection;
+use Drupal\KernelTests\KernelTestBase;
+
+/**
+ * Tests Editor module's file reference filter.
+ *
+ * @group editor
+ */
+class EditorFileReferenceFilterTest extends KernelTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['system', 'filter', 'editor', 'field', 'file', 'user'];
+
+  /**
+   * @var \Drupal\filter\Plugin\FilterInterface[]
+   */
+  protected $filters;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->installConfig(['system']);
+    $this->installEntitySchema('file');
+    $this->installSchema('file', ['file_usage']);
+
+    $manager = $this->container->get('plugin.manager.filter');
+    $bag = new FilterPluginCollection($manager, []);
+    $this->filters = $bag->getAll();
+  }
+
+  /**
+   * Tests the editor file reference filter.
+   */
+  public function testEditorFileReferenceFilter() {
+    $filter = $this->filters['editor_file_reference'];
+
+    $test = function($input) use ($filter) {
+      return $filter->process($input, 'und');
+    };
+
+    file_put_contents('public://llama.jpg', $this->randomMachineName());
+    $image = File::create(['uri' => 'public://llama.jpg']);
+    $image->save();
+    $id = $image->id();
+    $uuid = $image->uuid();
+    $cache_tag = ['file:' . $id];
+
+    file_put_contents('public://alpaca.jpg', $this->randomMachineName());
+    $image_2 = File::create(['uri' => 'public://alpaca.jpg']);
+    $image_2->save();
+    $id_2 = $image_2->id();
+    $uuid_2 = $image_2->uuid();
+    $cache_tag_2 = ['file:' . $id_2];
+
+    $this->pass('No data-entity-type and no data-entity-uuid attribute.');
+    $input = '<img src="llama.jpg" />';
+    $output = $test($input);
+    $this->assertIdentical($input, $output->getProcessedText());
+
+    $this->pass('A non-file data-entity-type attribute value.');
+    $input = '<img src="llama.jpg" data-entity-type="invalid-entity-type-value" data-entity-uuid="' . $uuid . '" />';
+    $output = $test($input);
+    $this->assertIdentical($input, $output->getProcessedText());
+
+    $this->pass('One data-entity-uuid attribute.');
+    $input = '<img src="llama.jpg" data-entity-type="file" data-entity-uuid="' . $uuid . '" />';
+    $expected_output = '<img src="/' . $this->siteDirectory . '/files/llama.jpg" data-entity-type="file" data-entity-uuid="' . $uuid . '" />';
+    $output = $test($input);
+    $this->assertIdentical($expected_output, $output->getProcessedText());
+    $this->assertEqual($cache_tag, $output->getCacheTags());
+
+    $this->pass('One data-entity-uuid attribute with odd capitalization.');
+    $input = '<img src="llama.jpg" data-entity-type="file" DATA-entity-UUID =   "' . $uuid . '" />';
+    $expected_output = '<img src="/' . $this->siteDirectory . '/files/llama.jpg" data-entity-type="file" data-entity-uuid="' . $uuid . '" />';
+    $output = $test($input);
+    $this->assertIdentical($expected_output, $output->getProcessedText());
+    $this->assertEqual($cache_tag, $output->getCacheTags());
+
+    $this->pass('One data-entity-uuid attribute on a non-image tag.');
+    $input = '<video src="llama.jpg" data-entity-type="file" data-entity-uuid="' . $uuid . '" />';
+    $expected_output = '<video src="/' . $this->siteDirectory . '/files/llama.jpg" data-entity-type="file" data-entity-uuid="' . $uuid . '"></video>';
+    $output = $test($input);
+    $this->assertIdentical($expected_output, $output->getProcessedText());
+    $this->assertEqual($cache_tag, $output->getCacheTags());
+
+    $this->pass('One data-entity-uuid attribute with an invalid value.');
+    $input = '<img src="llama.jpg" data-entity-type="file" data-entity-uuid="invalid-' . $uuid . '" />';
+    $output = $test($input);
+    $this->assertIdentical($input, $output->getProcessedText());
+    $this->assertEqual([], $output->getCacheTags());
+
+    $this->pass('Two different data-entity-uuid attributes.');
+    $input = '<img src="llama.jpg" data-entity-type="file" data-entity-uuid="' . $uuid . '" />';
+    $input .= '<img src="alpaca.jpg" data-entity-type="file" data-entity-uuid="' . $uuid_2 . '" />';
+    $expected_output = '<img src="/' . $this->siteDirectory . '/files/llama.jpg" data-entity-type="file" data-entity-uuid="' . $uuid . '" />';
+    $expected_output .= '<img src="/' . $this->siteDirectory . '/files/alpaca.jpg" data-entity-type="file" data-entity-uuid="' . $uuid_2 . '" />';
+    $output = $test($input);
+    $this->assertIdentical($expected_output, $output->getProcessedText());
+    $this->assertEqual(Cache::mergeTags($cache_tag, $cache_tag_2), $output->getCacheTags());
+
+    $this->pass('Two identical  data-entity-uuid attributes.');
+    $input = '<img src="llama.jpg" data-entity-type="file" data-entity-uuid="' . $uuid . '" />';
+    $input .= '<img src="llama.jpg" data-entity-type="file" data-entity-uuid="' . $uuid . '" />';
+    $expected_output = '<img src="/' . $this->siteDirectory . '/files/llama.jpg" data-entity-type="file" data-entity-uuid="' . $uuid . '" />';
+    $expected_output .= '<img src="/' . $this->siteDirectory . '/files/llama.jpg" data-entity-type="file" data-entity-uuid="' . $uuid . '" />';
+    $output = $test($input);
+    $this->assertIdentical($expected_output, $output->getProcessedText());
+    $this->assertEqual($cache_tag, $output->getCacheTags());
+  }
+
+}