Version 1
[yaffs-website] / web / core / modules / field / tests / src / Unit / FieldUninstallValidatorTest.php
diff --git a/web/core/modules/field/tests/src/Unit/FieldUninstallValidatorTest.php b/web/core/modules/field/tests/src/Unit/FieldUninstallValidatorTest.php
new file mode 100644 (file)
index 0000000..c238b95
--- /dev/null
@@ -0,0 +1,106 @@
+<?php
+
+namespace Drupal\Tests\field\Unit;
+
+use Drupal\simpletest\AssertHelperTrait;
+use Drupal\Tests\UnitTestCase;
+
+/**
+ * @coversDefaultClass \Drupal\field\FieldUninstallValidator
+ * @group field
+ */
+class FieldUninstallValidatorTest extends UnitTestCase {
+
+  use AssertHelperTrait;
+
+  /**
+   * @var \Drupal\field\FieldUninstallValidator|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $fieldUninstallValidator;
+
+  /**
+   * The mock field type plugin manager;
+   *
+   * @var \Drupal\Core\Field\FieldTypePluginManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $fieldTypePluginManager;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+    $this->fieldUninstallValidator = $this->getMockBuilder('Drupal\field\FieldUninstallValidator')
+      ->disableOriginalConstructor()
+      ->setMethods(['getFieldStoragesByModule', 'getFieldTypeLabel'])
+      ->getMock();
+    $this->fieldUninstallValidator->setStringTranslation($this->getStringTranslationStub());
+  }
+
+  /**
+   * @covers ::validate
+   */
+  public function testValidateNoStorages() {
+    $this->fieldUninstallValidator->expects($this->once())
+      ->method('getFieldStoragesByModule')
+      ->willReturn([]);
+
+    $module = $this->randomMachineName();
+    $expected = [];
+    $reasons = $this->fieldUninstallValidator->validate($module);
+    $this->assertSame($expected, $this->castSafeStrings($reasons));
+  }
+
+  /**
+   * @covers ::validate
+   */
+  public function testValidateDeleted() {
+    $field_storage = $this->getMockBuilder('Drupal\field\Entity\FieldStorageConfig')
+      ->disableOriginalConstructor()
+      ->getMock();
+    $field_storage->expects($this->once())
+      ->method('isDeleted')
+      ->willReturn(TRUE);
+    $this->fieldUninstallValidator->expects($this->once())
+      ->method('getFieldStoragesByModule')
+      ->willReturn([$field_storage]);
+
+    $module = $this->randomMachineName();
+    $expected = ['Fields pending deletion'];
+    $reasons = $this->fieldUninstallValidator->validate($module);
+    $this->assertSame($expected, $this->castSafeStrings($reasons));
+  }
+
+  /**
+   * @covers ::validate
+   */
+  public function testValidateNoDeleted() {
+    $field_storage = $this->getMockBuilder('Drupal\field\Entity\FieldStorageConfig')
+      ->disableOriginalConstructor()
+      ->getMock();
+    $field_storage->expects($this->once())
+      ->method('isDeleted')
+      ->willReturn(FALSE);
+    $field_type = $this->randomMachineName();
+    $field_storage->expects($this->once())
+      ->method('getType')
+      ->willReturn($field_type);
+    $field_name = $this->randomMachineName();
+    $field_storage->expects($this->once())
+      ->method('getLabel')
+      ->willReturn($field_name);
+    $this->fieldUninstallValidator->expects($this->once())
+      ->method('getFieldStoragesByModule')
+      ->willReturn([$field_storage]);
+    $field_type_label = $this->randomMachineName();
+    $this->fieldUninstallValidator->expects($this->once())
+      ->method('getFieldTypeLabel')
+      ->willReturn($field_type_label);
+
+    $module = $this->randomMachineName();
+    $expected = ["The <em class=\"placeholder\">$field_type_label</em> field type is used in the following field: $field_name"];
+    $reasons = $this->fieldUninstallValidator->validate($module);
+    $this->assertSame($expected, $this->castSafeStrings($reasons));
+  }
+
+}