123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 |
- <?php
- namespace Drupal\Tests\Core\Entity;
- use Drupal\Core\DependencyInjection\ContainerBuilder;
- use Drupal\Core\Field\BaseFieldDefinition;
- use Drupal\Core\Field\FieldItemBase;
- use Drupal\Core\Field\FieldStorageDefinitionInterface;
- use Drupal\Core\TypedData\DataDefinition;
- use Drupal\Tests\UnitTestCase;
- /**
- * Unit test for BaseFieldDefinition.
- *
- * @group Entity
- * @coversDefaultClass \Drupal\Core\Field\BaseFieldDefinition
- */
- class BaseFieldDefinitionTest extends UnitTestCase {
- /**
- * A dummy field type name.
- *
- * @var string
- */
- protected $fieldType;
- /**
- * A dummy field type definition.
- *
- * @var string
- */
- protected $fieldTypeDefinition;
- /**
- * {@inheritdoc}
- */
- protected function setUp() {
- // Mock the field type manager and place it in the container.
- $field_type_manager = $this->createMock('Drupal\Core\Field\FieldTypePluginManagerInterface');
- $this->fieldType = $this->randomMachineName();
- $this->fieldTypeDefinition = [
- 'id' => $this->fieldType,
- 'storage_settings' => [
- 'some_setting' => 'value 1',
- ],
- 'field_settings' => [
- 'some_instance_setting' => 'value 2',
- ],
- ];
- $field_type_manager->expects($this->any())
- ->method('getDefinitions')
- ->will($this->returnValue([$this->fieldType => $this->fieldTypeDefinition]));
- $field_type_manager->expects($this->any())
- ->method('getDefinition')
- ->with($this->fieldType)
- ->will($this->returnValue($this->fieldTypeDefinition));
- $field_type_manager->expects($this->any())
- ->method('getDefaultStorageSettings')
- ->with($this->fieldType)
- ->will($this->returnValue($this->fieldTypeDefinition['storage_settings']));
- $field_type_manager->expects($this->any())
- ->method('getDefaultFieldSettings')
- ->with($this->fieldType)
- ->will($this->returnValue($this->fieldTypeDefinition['field_settings']));
- $container = new ContainerBuilder();
- $container->set('plugin.manager.field.field_type', $field_type_manager);
- \Drupal::setContainer($container);
- }
- /**
- * Tests field name methods.
- *
- * @covers ::getName
- */
- public function testFieldName() {
- $definition = BaseFieldDefinition::create($this->fieldType);
- $field_name = $this->randomMachineName();
- $definition->setName($field_name);
- $this->assertEquals($field_name, $definition->getName());
- }
- /**
- * Tests field label methods.
- *
- * @covers ::getLabel
- */
- public function testFieldLabel() {
- $definition = BaseFieldDefinition::create($this->fieldType);
- $label = $this->randomMachineName();
- $definition->setLabel($label);
- $this->assertEquals($label, $definition->getLabel());
- }
- /**
- * Tests field description methods.
- *
- * @covers ::getDescription
- */
- public function testFieldDescription() {
- $definition = BaseFieldDefinition::create($this->fieldType);
- $description = $this->randomMachineName();
- $definition->setDescription($description);
- $this->assertEquals($description, $definition->getDescription());
- }
- /**
- * Tests field type methods.
- *
- * @covers ::getType
- */
- public function testFieldType() {
- $definition = BaseFieldDefinition::create($this->fieldType);
- $this->assertEquals($this->fieldType, $definition->getType());
- }
- /**
- * Tests field settings methods.
- *
- * @covers ::getSetting
- * @covers ::setSetting
- * @covers ::getSettings
- */
- public function testFieldSettings() {
- $definition = BaseFieldDefinition::create($this->fieldType);
- $setting = $this->randomMachineName();
- $value = $this->randomMachineName();
- $definition->setSetting($setting, $value);
- $this->assertEquals($value, $definition->getSetting($setting));
- $default_settings = $this->fieldTypeDefinition['storage_settings'] + $this->fieldTypeDefinition['field_settings'];
- $this->assertEquals([$setting => $value] + $default_settings, $definition->getSettings());
- }
- /**
- * Tests the initialization of default field settings.
- *
- * @covers ::getSetting
- * @covers ::setSetting
- * @covers ::getSettings
- */
- public function testDefaultFieldSettings() {
- $definition = BaseFieldDefinition::create($this->fieldType);
- $expected_settings = $this->fieldTypeDefinition['storage_settings'] + $this->fieldTypeDefinition['field_settings'];
- $this->assertEquals($expected_settings, $definition->getSettings());
- foreach ($expected_settings as $setting => $value) {
- $this->assertEquals($value, $definition->getSetting($setting));
- }
- }
- /**
- * Tests field default value.
- *
- * @covers ::getDefaultValue
- * @covers ::setDefaultValue
- */
- public function testFieldDefaultValue() {
- $definition = BaseFieldDefinition::create($this->fieldType);
- $default_value = [
- 'value' => $this->randomMachineName(),
- ];
- $expected_default_value = [$default_value];
- $definition->setDefaultValue($default_value);
- $entity = $this->getMockBuilder('Drupal\Core\Entity\ContentEntityBase')
- ->disableOriginalConstructor()
- ->getMock();
- // Set the field item list class to be used to avoid requiring the typed
- // data manager to retrieve it.
- $definition->setClass('Drupal\Core\Field\FieldItemList');
- $definition->setItemDefinition(DataDefinition::createFromDataType('string')->setClass(FieldItemBase::class));
- $this->assertEquals($expected_default_value, $definition->getDefaultValue($entity));
- $data_definition = $this->getMockBuilder('Drupal\Core\TypedData\DataDefinition')
- ->disableOriginalConstructor()
- ->getMock();
- $data_definition->expects($this->any())
- ->method('getClass')
- ->will($this->returnValue('Drupal\Core\Field\FieldItemBase'));
- $definition->setItemDefinition($data_definition);
- // Set default value only with a literal.
- $definition->setDefaultValue($default_value['value']);
- $this->assertEquals($expected_default_value, $definition->getDefaultValue($entity));
- // Set default value with an indexed array.
- $definition->setDefaultValue($expected_default_value);
- $this->assertEquals($expected_default_value, $definition->getDefaultValue($entity));
- // Set default value with an empty array.
- $definition->setDefaultValue([]);
- $this->assertEquals([], $definition->getDefaultValue($entity));
- // Set default value with NULL.
- $definition->setDefaultValue(NULL);
- $this->assertEquals([], $definition->getDefaultValue($entity));
- }
- /**
- * Tests field initial value.
- *
- * @covers ::getInitialValue
- * @covers ::setInitialValue
- */
- public function testFieldInitialValue() {
- $definition = BaseFieldDefinition::create($this->fieldType);
- $definition->setItemDefinition(DataDefinition::createFromDataType('string')->setClass(FieldItemBase::class));
- $default_value = [
- 'value' => $this->randomMachineName(),
- ];
- $expected_default_value = [$default_value];
- $definition->setInitialValue($default_value);
- $entity = $this->getMockBuilder('Drupal\Core\Entity\ContentEntityBase')
- ->disableOriginalConstructor()
- ->getMock();
- // Set the field item list class to be used to avoid requiring the typed
- // data manager to retrieve it.
- $definition->setClass('Drupal\Core\Field\FieldItemList');
- $this->assertEquals($expected_default_value, $definition->getInitialValue($entity));
- $data_definition = $this->getMockBuilder('Drupal\Core\TypedData\DataDefinition')
- ->disableOriginalConstructor()
- ->getMock();
- $data_definition->expects($this->any())
- ->method('getClass')
- ->will($this->returnValue('Drupal\Core\Field\FieldItemBase'));
- $definition->setItemDefinition($data_definition);
- // Set default value only with a literal.
- $definition->setInitialValue($default_value['value']);
- $this->assertEquals($expected_default_value, $definition->getInitialValue($entity));
- // Set default value with an indexed array.
- $definition->setInitialValue($expected_default_value);
- $this->assertEquals($expected_default_value, $definition->getInitialValue($entity));
- // Set default value with an empty array.
- $definition->setInitialValue([]);
- $this->assertEquals([], $definition->getInitialValue($entity));
- // Set default value with NULL.
- $definition->setInitialValue(NULL);
- $this->assertEquals([], $definition->getInitialValue($entity));
- }
- /**
- * Tests field translatable methods.
- *
- * @covers ::isTranslatable
- * @covers ::setTranslatable
- */
- public function testFieldTranslatable() {
- $definition = BaseFieldDefinition::create($this->fieldType);
- $this->assertFalse($definition->isTranslatable());
- $definition->setTranslatable(TRUE);
- $this->assertTrue($definition->isTranslatable());
- $definition->setTranslatable(FALSE);
- $this->assertFalse($definition->isTranslatable());
- }
- /**
- * Tests field revisionable methods.
- *
- * @covers ::isRevisionable
- * @covers ::setRevisionable
- */
- public function testFieldRevisionable() {
- $definition = BaseFieldDefinition::create($this->fieldType);
- $this->assertFalse($definition->isRevisionable());
- $definition->setRevisionable(TRUE);
- $this->assertTrue($definition->isRevisionable());
- $definition->setRevisionable(FALSE);
- $this->assertFalse($definition->isRevisionable());
- }
- /**
- * Tests field cardinality.
- *
- * @covers ::getCardinality
- * @covers ::setCardinality
- */
- public function testFieldCardinality() {
- $definition = BaseFieldDefinition::create($this->fieldType);
- $this->assertEquals(1, $definition->getCardinality());
- $definition->setCardinality(2);
- $this->assertEquals(2, $definition->getCardinality());
- $definition->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
- $this->assertEquals(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED, $definition->getCardinality());
- }
- /**
- * Tests required.
- *
- * @covers ::isRequired
- * @covers ::setRequired
- */
- public function testFieldRequired() {
- $definition = BaseFieldDefinition::create($this->fieldType);
- $this->assertFalse($definition->isRequired());
- $definition->setRequired(TRUE);
- $this->assertTrue($definition->isRequired());
- $definition->setRequired(FALSE);
- $this->assertFalse($definition->isRequired());
- }
- /**
- * Tests storage required.
- *
- * @covers ::isStorageRequired
- * @covers ::setStorageRequired
- */
- public function testFieldStorageRequired() {
- $definition = BaseFieldDefinition::create($this->fieldType);
- $this->assertFalse($definition->isStorageRequired());
- $definition->setStorageRequired(TRUE);
- $this->assertTrue($definition->isStorageRequired());
- $definition->setStorageRequired(FALSE);
- $this->assertFalse($definition->isStorageRequired());
- }
- /**
- * Tests provider.
- *
- * @covers ::getProvider
- * @covers ::setProvider
- */
- public function testFieldProvider() {
- $definition = BaseFieldDefinition::create($this->fieldType);
- $provider = $this->randomMachineName();
- $definition->setProvider($provider);
- $this->assertEquals($provider, $definition->getProvider());
- }
- /**
- * Tests custom storage.
- *
- * @covers ::hasCustomStorage
- * @covers ::setCustomStorage
- */
- public function testCustomStorage() {
- $definition = BaseFieldDefinition::create($this->fieldType);
- $this->assertFalse($definition->hasCustomStorage());
- $definition->setCustomStorage(TRUE);
- $this->assertTrue($definition->hasCustomStorage());
- $definition->setCustomStorage(FALSE);
- $this->assertFalse($definition->hasCustomStorage());
- }
- /**
- * Tests default value callbacks.
- *
- * @covers ::setDefaultValueCallback
- */
- public function testDefaultValueCallback() {
- $definition = BaseFieldDefinition::create($this->fieldType);
- $callback = get_class($this) . '::mockDefaultValueCallback';
- // setDefaultValueCallback returns $this.
- $this->assertSame($definition, $definition->setDefaultValueCallback($callback));
- }
- /**
- * Tests invalid default value callbacks.
- *
- * @covers ::setDefaultValueCallback
- */
- public function testInvalidDefaultValueCallback() {
- $definition = BaseFieldDefinition::create($this->fieldType);
- // setDefaultValueCallback returns $this.
- $this->expectException(\InvalidArgumentException::class);
- $definition->setDefaultValueCallback([get_class($this), 'mockDefaultValueCallback']);
- }
- /**
- * Tests NULL default value callbacks.
- *
- * @covers ::setDefaultValueCallback
- */
- public function testNullDefaultValueCallback() {
- $definition = BaseFieldDefinition::create($this->fieldType);
- // setDefaultValueCallback returns $this.
- $this->assertSame($definition, $definition->setDefaultValueCallback(NULL));
- }
- /**
- * Provides a Mock base field default value callback.
- *
- * @param \Drupal\Core\Entity\EntityInterface $entity
- * Entity interface.
- * @param \Drupal\Core\Field\FieldDefinitionInterface $definition
- * Field definition.
- *
- * @return string
- * Default value.
- */
- public static function mockDefaultValueCallback($entity, $definition) {
- return 'a default value';
- }
- }
|