Security update for Core, with self-updated composer
[yaffs-website] / web / core / modules / settings_tray / tests / src / Unit / Access / BlockPluginHasSettingsTrayFormAccessCheckTest.php
diff --git a/web/core/modules/settings_tray/tests/src/Unit/Access/BlockPluginHasSettingsTrayFormAccessCheckTest.php b/web/core/modules/settings_tray/tests/src/Unit/Access/BlockPluginHasSettingsTrayFormAccessCheckTest.php
new file mode 100644 (file)
index 0000000..c89abfd
--- /dev/null
@@ -0,0 +1,96 @@
+<?php
+
+namespace Drupal\Tests\settings_tray\Unit\Access;
+
+use Drupal\block\BlockInterface;
+use Drupal\Core\Access\AccessResultAllowed;
+use Drupal\Core\Access\AccessResultInterface;
+use Drupal\Core\Access\AccessResultNeutral;
+use Drupal\Core\Block\BlockPluginInterface;
+use Drupal\Core\Plugin\PluginWithFormsInterface;
+use Drupal\settings_tray\Access\BlockPluginHasSettingsTrayFormAccessCheck;
+use Drupal\Tests\UnitTestCase;
+use Prophecy\Argument;
+
+/**
+ * @coversDefaultClass \Drupal\settings_tray\Access\BlockPluginHasSettingsTrayFormAccessCheck
+ * @group settings_tray
+ */
+class BlockPluginHasSettingsTrayFormAccessCheckTest extends UnitTestCase {
+
+  /**
+   * @covers ::access
+   * @covers ::accessBlockPlugin
+   * @dataProvider providerTestAccess
+   */
+  public function testAccess($with_forms, array $plugin_definition, AccessResultInterface $expected_access_result) {
+    $block_plugin = $this->prophesize()->willImplement(BlockPluginInterface::class);
+
+    if ($with_forms) {
+      $block_plugin->willImplement(PluginWithFormsInterface::class);
+      $block_plugin->hasFormClass(Argument::type('string'))->will(function ($arguments) use ($plugin_definition) {
+        return !empty($plugin_definition['forms'][$arguments[0]]);
+      });
+    }
+
+    $block = $this->prophesize(BlockInterface::class);
+    $block->getPlugin()->willReturn($block_plugin->reveal());
+
+    $access_check = new BlockPluginHasSettingsTrayFormAccessCheck();
+    $this->assertEquals($expected_access_result, $access_check->access($block->reveal()));
+    $this->assertEquals($expected_access_result, $access_check->accessBlockPlugin($block_plugin->reveal()));
+  }
+
+  /**
+   * Provides test data for ::testAccess().
+   */
+  public function providerTestAccess() {
+    $annotation_forms_settings_tray_class = [
+      'forms' => [
+        'settings_tray' => $this->randomMachineName(),
+      ],
+    ];
+    $annotation_forms_settings_tray_not_set = [];
+    $annotation_forms_settings_tray_false = [
+      'forms' => [
+        'settings_tray' => FALSE,
+      ],
+    ];
+    return [
+      'block plugin with forms, forms[settings_tray] set to class' => [
+        TRUE,
+        $annotation_forms_settings_tray_class,
+        new AccessResultAllowed(),
+      ],
+      'block plugin with forms, forms[settings_tray] not set' => [
+        TRUE,
+        $annotation_forms_settings_tray_not_set,
+        new AccessResultNeutral(),
+      ],
+      'block plugin with forms, forms[settings_tray] set to FALSE' => [
+        TRUE,
+        $annotation_forms_settings_tray_false,
+        new AccessResultNeutral(),
+      ],
+      // In practice, all block plugins extend BlockBase, which means they all
+      // implement PluginWithFormsInterface, but this may change in the future.
+      // This ensures Settings Tray will continue to work correctly.
+      'block plugin without forms, forms[settings_tray] set to class' => [
+        FALSE,
+        $annotation_forms_settings_tray_class,
+        new AccessResultNeutral(),
+      ],
+      'block plugin without forms, forms[settings_tray] not set' => [
+        FALSE,
+        $annotation_forms_settings_tray_not_set,
+        new AccessResultNeutral(),
+      ],
+      'block plugin without forms, forms[settings_tray] set to FALSE' => [
+        FALSE,
+        $annotation_forms_settings_tray_false,
+        new AccessResultNeutral(),
+      ],
+    ];
+  }
+
+}