Version 1
[yaffs-website] / web / modules / contrib / embed / src / Tests / EmbedButtonEditorAccessCheckTest.php
diff --git a/web/modules/contrib/embed/src/Tests/EmbedButtonEditorAccessCheckTest.php b/web/modules/contrib/embed/src/Tests/EmbedButtonEditorAccessCheckTest.php
new file mode 100644 (file)
index 0000000..c73887a
--- /dev/null
@@ -0,0 +1,106 @@
+<?php
+
+namespace Drupal\embed\Tests;
+
+use Drupal\editor\Entity\Editor;
+
+/**
+ * Tests EmbedButtonEditorAccessCheck.
+ *
+ * @group embed
+ */
+class EmbedButtonEditorAccessCheckTest extends EmbedTestBase {
+
+  const SUCCESS = 'Success!';
+
+  /**
+   * Tests \Drupal\embed\Access\EmbedButtonEditorAccessCheck.
+   */
+  public function testEmbedButtonEditorAccessCheck() {
+    // The anonymous user should have access to the plain_text format, but it
+    // hasn't been configured to use an editor yet.
+    $this->getRoute('plain_text', 'embed_test_default');
+    $this->assertResponse(404);
+    $this->assertCacheContext('route');
+    $this->assertNoCacheTag('config:editor.editor.embed_test');
+    $this->assertNoCacheTag('config:embed.button.embed_test_default');
+
+    // The anonymous user should not have permission to use embed_test format.
+    $this->getRoute('embed_test', 'embed_test_default');
+    $this->assertResponse(403);
+    $this->assertCacheContext('route');
+    $this->assertNoCacheTag('config:editor.editor.embed_test');
+    $this->assertNoCacheTag('config:embed.button.embed_test_default');
+
+    // Now login a user that can use the embed_test format.
+    $this->drupalLogin($this->webUser);
+
+    $this->getRoute('plain_text', 'embed_test_default');
+    $this->assertResponse(404);
+    $this->assertCacheContext('route');
+    $this->assertNoCacheTag('config:editor.editor.plain_text');
+    $this->assertNoCacheTag('config:embed.button.embed_test_default');
+
+    // Add an empty configuration for the plain_text editor configuration.
+    $editor = Editor::create([
+      'format' => 'plain_text',
+      'editor' => 'ckeditor',
+    ]);
+    $editor->save();
+    $this->getRoute('plain_text', 'embed_test_default');
+    $this->assertResponse(403);
+    $this->assertCacheContext('route');
+    $this->assertCacheTag('config:editor.editor.plain_text');
+    $this->assertCacheTag('config:embed.button.embed_test_default');
+
+    $this->getRoute('embed_test', 'embed_test_default');
+    $this->assertResponse(200);
+    $this->assertCacheContext('route');
+    $this->assertCacheTag('config:editor.editor.embed_test');
+    $this->assertCacheTag('config:embed.button.embed_test_default');
+    $this->assertText(static::SUCCESS);
+
+    // Test route with an empty request.
+    $this->getRoute('embed_test', 'embed_test_default', '');
+    $this->assertResponse(404);
+    $this->assertCacheContext('route');
+    $this->assertCacheTag('config:editor.editor.embed_test');
+    $this->assertCacheTag('config:embed.button.embed_test_default');
+
+    // Test route with an invalid text format.
+    $this->getRoute('invalid_editor', 'embed_test_default');
+    $this->assertResponse(404);
+    $this->assertCacheContext('route');
+    $this->assertNoCacheTag('config:editor.editor.invalid_editor');
+    $this->assertNoCacheTag('config:embed.button.embed_test_default');
+
+    // Test route with an invalid embed button.
+    $this->getRoute('embed_test', 'invalid_button');
+    $this->assertResponse(404);
+    $this->assertCacheContext('route');
+    $this->assertNoCacheTag('config:editor.editor.embed_test');
+    $this->assertNoCacheTag('config:embed.button.invalid_button');
+  }
+
+  /**
+   * Performs a request to the embed_test.test_access route.
+   *
+   * @param string $editor_id
+   *   ID of the editor.
+   * @param string $embed_button_id
+   *   ID of the embed button.
+   * @param string $value
+   *   The query string value to include.
+   *
+   * @return string
+   *   The retrieved HTML string.
+   */
+  public function getRoute($editor_id, $embed_button_id, $value = NULL) {
+    $url = 'embed-test/access/' . $editor_id . '/' . $embed_button_id;
+    if (!isset($value)) {
+      $value = static::SUCCESS;
+    }
+    return $this->drupalGet($url, ['query' => ['value' => $value]]);
+  }
+
+}