161 lines
5.4 KiB
PHP
161 lines
5.4 KiB
PHP
<?php
|
|
|
|
namespace Drupal\Tests\farm_entity\Kernel;
|
|
|
|
use Drupal\KernelTests\KernelTestBase;
|
|
|
|
/**
|
|
* Tests farmOS entity fields.
|
|
*
|
|
* @group farm
|
|
*/
|
|
class FarmEntityFieldTest extends KernelTestBase {
|
|
|
|
/**
|
|
* The entity field manager.
|
|
*
|
|
* @var \Drupal\Core\Entity\EntityFieldManagerInterface
|
|
*/
|
|
protected $entityFieldManager;
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
protected $profile = 'farm';
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
protected static $modules = [
|
|
'entity',
|
|
'asset',
|
|
'log',
|
|
'plan',
|
|
'farm_field',
|
|
'farm_entity',
|
|
'farm_entity_test',
|
|
'farm_location',
|
|
'farm_log',
|
|
'farm_owner',
|
|
];
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
protected function setUp():void {
|
|
parent::setUp();
|
|
$this->entityFieldManager = $this->container->get('entity_field.manager');
|
|
}
|
|
|
|
/**
|
|
* Test farmOS fields defined in hook_entity_base_field_info().
|
|
*/
|
|
public function testHookEntityBaseFieldInfo() {
|
|
|
|
// Test asset field storage definitions.
|
|
$fields = $this->entityFieldManager->getFieldStorageDefinitions('asset');
|
|
$this->assertArrayHasKey('data', $fields);
|
|
$this->assertArrayHasKey('flag', $fields);
|
|
$this->assertArrayHasKey('file', $fields);
|
|
$this->assertArrayHasKey('id_tag', $fields);
|
|
$this->assertArrayHasKey('image', $fields);
|
|
$this->assertArrayHasKey('intrinsic_geometry', $fields);
|
|
$this->assertArrayHasKey('is_fixed', $fields);
|
|
$this->assertArrayHasKey('is_location', $fields);
|
|
$this->assertArrayHasKey('notes', $fields);
|
|
$this->assertArrayHasKey('parent', $fields);
|
|
|
|
// Test log field storage definitions.
|
|
$fields = $this->entityFieldManager->getFieldStorageDefinitions('log');
|
|
$this->assertArrayHasKey('asset', $fields);
|
|
$this->assertArrayHasKey('category', $fields);
|
|
$this->assertArrayHasKey('data', $fields);
|
|
$this->assertArrayHasKey('flag', $fields);
|
|
$this->assertArrayHasKey('file', $fields);
|
|
$this->assertArrayHasKey('geometry', $fields);
|
|
$this->assertArrayHasKey('image', $fields);
|
|
$this->assertArrayHasKey('is_movement', $fields);
|
|
$this->assertArrayHasKey('location', $fields);
|
|
$this->assertArrayHasKey('notes', $fields);
|
|
$this->assertArrayHasKey('owner', $fields);
|
|
$this->assertArrayHasKey('test_hook_base_field', $fields);
|
|
|
|
// Test plan field storage definitions.
|
|
$fields = $this->entityFieldManager->getFieldStorageDefinitions('plan');
|
|
$this->assertArrayHasKey('data', $fields);
|
|
$this->assertArrayHasKey('flag', $fields);
|
|
$this->assertArrayHasKey('file', $fields);
|
|
$this->assertArrayHasKey('image', $fields);
|
|
$this->assertArrayHasKey('notes', $fields);
|
|
}
|
|
|
|
/**
|
|
* Test farmOS fields defined in hook_farm_entity_bundle_field_info().
|
|
*/
|
|
public function testHookFarmEntityBundleFieldInfo() {
|
|
|
|
// Get the log field storage definitions.
|
|
$log_storage_definitions = $this->entityFieldManager->getFieldStorageDefinitions('log');
|
|
|
|
// Test that 'test_hook_bundle_field' has a storage definition with the
|
|
// correct provider.
|
|
$this->assertArrayHasKey('test_hook_bundle_field', $log_storage_definitions);
|
|
$this->assertEquals('farm_entity_test', $log_storage_definitions['test_hook_bundle_field']->getProvider());
|
|
|
|
// Test fields definitions for the 'test' log type.
|
|
$fields = $this->entityFieldManager->getFieldDefinitions('log', 'test');
|
|
$this->assertArrayHasKey('test_hook_bundle_field', $fields);
|
|
|
|
// Test fields definitions for the 'test_override' log type.
|
|
$fields = $this->entityFieldManager->getFieldDefinitions('log', 'test_override');
|
|
$this->assertArrayHasKey('test_hook_bundle_field', $fields);
|
|
|
|
// Get all log bundles.
|
|
/** @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface $entity_type_bundle_info */
|
|
$entity_type_bundle_info = $this->container->get('entity_type.bundle.info');
|
|
$bundles = $entity_type_bundle_info->getBundleInfo('log');
|
|
|
|
// Test that all log types have a bundle specific field.
|
|
foreach (array_keys($bundles) as $bundle) {
|
|
$fields = $this->entityFieldManager->getFieldDefinitions('log', $bundle);
|
|
$field_name = 'test_hook_bundle_' . $bundle . '_specific_field';
|
|
|
|
// Assert field storage definition exists and has the correct provider.
|
|
$this->assertArrayHasKey($field_name, $log_storage_definitions);
|
|
$this->assertEquals('farm_entity_test', $log_storage_definitions[$field_name]->getProvider());
|
|
|
|
// Assert field definition for the bundle.
|
|
$this->assertArrayHasKey($field_name, $fields);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test farmOS fields defined in buildFieldDefinitions().
|
|
*/
|
|
public function testBuildFieldDefinitions() {
|
|
|
|
// Test plan field definitions.
|
|
$fields = $this->entityFieldManager->getFieldDefinitions('plan', 'test');
|
|
$this->assertArrayHasKey('asset', $fields);
|
|
$this->assertArrayHasKey('log', $fields);
|
|
}
|
|
|
|
/**
|
|
* Test that farmOS base fields can be overridden.
|
|
*/
|
|
public function testFarmFieldsOverride() {
|
|
|
|
// Load field definitions for test_override logs.
|
|
$fields = $this->entityFieldManager->getFieldDefinitions('log', 'test_override');
|
|
|
|
// Test that a module extending FarmLogType can remove default bundle fields
|
|
// that were provided in parent plugin classes.
|
|
$this->assertArrayNotHasKey('test_default_bundle_field', $fields);
|
|
|
|
// But also confirm that a module extending a base log type can NOT remove
|
|
// bundle fields that were provided by hook_farm_entity_bundle_field_info().
|
|
$this->assertArrayHasKey('test_hook_bundle_field', $fields);
|
|
}
|
|
|
|
}
|