Security update for Core, with self-updated composer
[yaffs-website] / web / core / modules / content_moderation / tests / src / Kernel / ModerationStateWidgetTest.php
diff --git a/web/core/modules/content_moderation/tests/src/Kernel/ModerationStateWidgetTest.php b/web/core/modules/content_moderation/tests/src/Kernel/ModerationStateWidgetTest.php
new file mode 100644 (file)
index 0000000..c40e753
--- /dev/null
@@ -0,0 +1,92 @@
+<?php
+
+namespace Drupal\Tests\content_moderation\Kernel;
+
+use Drupal\content_moderation\Plugin\Field\FieldWidget\ModerationStateWidget;
+use Drupal\Core\Entity\Entity\EntityFormDisplay;
+use Drupal\Core\Form\FormState;
+use Drupal\KernelTests\KernelTestBase;
+use Drupal\node\Entity\Node;
+use Drupal\node\Entity\NodeType;
+use Drupal\workflows\Entity\Workflow;
+
+/**
+ * @coversDefaultClass \Drupal\content_moderation\Plugin\Field\FieldWidget\ModerationStateWidget
+ * @group content_moderation
+ */
+class ModerationStateWidgetTest extends KernelTestBase {
+
+  /**
+   * Modules to install.
+   *
+   * @var array
+   */
+  public static $modules = [
+    'system',
+    'user',
+    'workflows',
+    'content_moderation',
+    'node',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->installEntitySchema('content_moderation_state');
+    $this->installEntitySchema('user');
+    $this->installConfig(['content_moderation', 'system']);
+
+    NodeType::create([
+      'type' => 'moderated',
+    ])->save();
+    NodeType::create([
+      'type' => 'unmoderated',
+    ])->save();
+
+    $workflow = Workflow::load('editorial');
+    $workflow->getTypePlugin()->addEntityTypeAndBundle('node', 'moderated');
+    $workflow->save();
+  }
+
+  /**
+   * Test the widget does not impact a non-moderated entity.
+   */
+  public function testWidgetNonModeratedEntity() {
+    // Create an unmoderated entity and build a form display which will include
+    // the ModerationStateWidget plugin, in a hidden state.
+    $entity = Node::create([
+      'type' => 'unmoderated',
+    ]);
+    $entity_form_display = EntityFormDisplay::create([
+      'targetEntityType' => 'node',
+      'bundle' => 'unmoderated',
+      'mode' => 'default',
+      'status' => TRUE,
+    ]);
+    $form = [];
+    $form_state = new FormState();
+    $entity_form_display->buildForm($entity, $form, $form_state);
+
+    // The moderation_state field should have no values for an entity that isn't
+    // being moderated.
+    $entity_form_display->extractFormValues($entity, $form, $form_state);
+    $this->assertEquals(0, $entity->moderation_state->count());
+  }
+
+  /**
+   * @covers ::isApplicable
+   */
+  public function testIsApplicable() {
+    // The moderation_state field definition should be applicable to our widget.
+    $fields = $this->container->get('entity_field.manager')->getFieldDefinitions('node', 'test_type');
+    $this->assertTrue(ModerationStateWidget::isApplicable($fields['moderation_state']));
+    $this->assertFalse(ModerationStateWidget::isApplicable($fields['status']));
+    // A config override should still be applicable.
+    $field_config = $fields['moderation_state']->getConfig('moderated');
+    $this->assertTrue(ModerationStateWidget::isApplicable($field_config));
+  }
+
+}