Update to drupal 8.0.0-rc1. For more information, see https://www.drupal.org/node/2582663

This commit is contained in:
Greg Anderson 2015-10-08 11:40:12 -07:00
parent eb34d130a8
commit f32e58e4b1
8476 changed files with 211648 additions and 170042 deletions

View file

@ -0,0 +1,73 @@
<?php
/**
* @file
* Contains database additions to drupal-8.bare.standard.php.gz for testing the
* upgrade path of https://www.drupal.org/node/2429191.
*/
use Drupal\Core\Database\Database;
use Drupal\Component\Serialization\Yaml;
$connection = Database::getConnection();
// Configuration for a View with an "entity_reference selection" display.
$config = Yaml::decode(file_get_contents(__DIR__ . '/views.view.entity_reference_plugins_2429191.yml'));
$connection->insert('config')
->fields([
'collection',
'name',
'data',
])
->values([
'collection' => '',
'name' => 'views.view.' . $config['id'],
'data' => serialize($config),
])
->execute();
// Configuration for an entity_reference field storage.
$config = Yaml::decode(file_get_contents(__DIR__ . '/field.storage.node.field_ref_views_select_2429191.yml'));
$connection->insert('config')
->fields([
'collection',
'name',
'data',
])
->values([
'collection' => '',
'name' => 'field.storage.' . $config['id'],
'data' => serialize($config),
])
->execute();
// We need to Update the registry of "last installed" field definitions.
$installed = $connection->select('key_value')
->fields('key_value', ['value'])
->condition('collection', 'entity.definitions.installed')
->condition('name', 'node.field_storage_definitions')
->execute()
->fetchField();
$installed = unserialize($installed);
$installed['field_ref_views_select_2429191'] = new \Drupal\field\Entity\FieldStorageConfig($config);
$connection->update('key_value')
->condition('collection', 'entity.definitions.installed')
->condition('name', 'node.field_storage_definitions')
->fields([
'value' => serialize($installed)
])
->execute();
// Configuration for an entity_reference field using the View for selection.
$config = Yaml::decode(file_get_contents(__DIR__ . '/field.field.node.article.field_ref_views_select_2429191.yml'));
$connection->insert('config')
->fields([
'collection',
'name',
'data',
])
->values([
'collection' => '',
'name' => 'field.field.' . $config['id'],
'data' => serialize($config),
])
->execute();

View file

@ -0,0 +1,27 @@
uuid: ac77b88d-dfa0-4b07-b700-ba50cb51f72a
langcode: en
status: true
dependencies:
config:
- field.storage.node.field_ref_views_select_2429191
- node.type.article
module:
- entity_reference
id: node.article.field_ref_views_select_2429191
field_name: field_ref_views_select_2429191
entity_type: node
bundle: article
label: reference_views_select
description: ''
required: false
translatable: false
default_value: { }
default_value_callback: ''
settings:
handler: views
handler_settings:
view:
view_name: entity_reference_plugins_2429191
display_name: entity_reference_1
arguments: { }
field_type: entity_reference

View file

@ -0,0 +1,19 @@
uuid: 7f5e9177-56b3-4b84-a936-54bfd4d4c078
langcode: en
status: true
dependencies:
module:
- entity_reference
- node
id: node.field_ref_views_select_2429191
field_name: field_ref_views_select_2429191
entity_type: node
type: entity_reference
settings:
target_type: node
module: entity_reference
locked: false
cardinality: 1
translatable: true
indexes: { }
persist_with_no_fields: false

View file

@ -0,0 +1,214 @@
uuid: 8b3d9ae1-c8f9-4219-af35-53f687e6081b
langcode: en
status: true
dependencies:
module:
- entity_reference
- node
- user
id: entity_reference_plugins_2429191
label: test
module: views
description: ''
tag: ''
base_table: node_field_data
base_field: nid
core: 8.x
display:
default:
display_plugin: default
id: default
display_title: Master
position: 0
display_options:
access:
type: perm
options:
perm: 'access content'
cache:
type: tag
options: { }
query:
type: views_query
options:
disable_sql_rewrite: false
distinct: false
replica: false
query_comment: ''
query_tags: { }
exposed_form:
type: basic
options:
submit_button: Apply
reset_button: false
reset_button_label: Reset
exposed_sorts_label: 'Sort by'
expose_sort_order: true
sort_asc_label: Asc
sort_desc_label: Desc
pager:
type: full
options:
items_per_page: 10
offset: 0
id: 0
total_pages: null
expose:
items_per_page: false
items_per_page_label: 'Items per page'
items_per_page_options: '5, 10, 25, 50'
items_per_page_options_all: false
items_per_page_options_all_label: '- All -'
offset: false
offset_label: Offset
tags:
previous: ' previous'
next: 'next '
first: '« first'
last: 'last »'
quantity: 9
style:
type: default
options:
grouping: { }
row_class: ''
default_row_class: true
uses_fields: false
row:
type: fields
options:
inline: { }
separator: ''
hide_empty: false
default_field_elements: true
fields:
title:
id: title
table: node_field_data
field: title
entity_type: node
entity_field: title
label: ''
alter:
alter_text: false
make_link: false
absolute: false
trim: false
word_boundary: false
ellipsis: false
strip_tags: false
html: false
hide_empty: false
empty_zero: false
settings:
link_to_entity: true
plugin_id: field
relationship: none
group_type: group
admin_label: ''
exclude: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: true
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_alter_empty: true
click_sort_column: value
type: string
group_column: value
group_columns: { }
group_rows: true
delta_limit: 0
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: false
filters:
status:
value: true
table: node_field_data
field: status
plugin_id: boolean
entity_type: node
entity_field: status
id: status
expose:
operator: ''
group: 1
title:
id: title
table: node_field_data
field: title
relationship: none
group_type: group
admin_label: ''
operator: contains
value: foo
group: 1
exposed: false
expose:
operator_id: ''
label: ''
description: ''
multiple: false
remember: false
entity_type: node
entity_field: title
plugin_id: string
sorts:
created:
id: created
table: node_field_data
field: created
order: DESC
entity_type: node
entity_field: created
plugin_id: date
relationship: none
group_type: group
admin_label: ''
exposed: false
expose:
label: ''
granularity: second
header: { }
footer: { }
empty: { }
relationships: { }
arguments: { }
display_extenders: { }
cache_metadata:
max-age: -1
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- url.query_args
- 'user.node_grants:view'
- user.permissions
tags: { }
entity_reference_1:
display_plugin: entity_reference
id: entity_reference_1
display_title: 'Entity Reference'
position: 1
display_options:
display_extenders: { }
style:
type: entity_reference
options:
search_fields:
title: title
cache_metadata:
max-age: -1
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- 'user.node_grants:view'
- user.permissions
tags: { }

View file

@ -40,6 +40,12 @@ field.widget.settings.test_field_widget:
test_widget_setting:
type: string
label: 'Test setting'
role:
type: string
label: 'A referenced role'
role2:
type: string
label: 'A 2nd referenced role'
field.widget.settings.test_field_widget_multiple:
type: mapping
@ -49,6 +55,14 @@ field.widget.settings.test_field_widget_multiple:
type: string
label: 'Test setting'
field.widget.third_party.color:
type: mapping
label: 'Field test entity display color module third party settings'
mapping:
foo:
type: string
label: 'Foo setting'
field.storage_settings.test_field:
type: mapping
label: 'Test field storage settings'

View file

@ -38,7 +38,7 @@ class TestFieldApplicableFormatter extends FormatterBase {
/**
* {@inheritdoc}
*/
public function viewElements(FieldItemListInterface $items) {
public function viewElements(FieldItemListInterface $items, $langcode) {
return array('#markup' => 'Nothing to see here');
}
}

View file

@ -62,7 +62,7 @@ class TestFieldDefaultFormatter extends FormatterBase {
/**
* {@inheritdoc}
*/
public function viewElements(FieldItemListInterface $items) {
public function viewElements(FieldItemListInterface $items, $langcode) {
$elements = array();
foreach ($items as $delta => $item) {

View file

@ -35,7 +35,7 @@ class TestFieldEmptyFormatter extends FormatterBase {
/**
* {@inheritdoc}
*/
public function viewElements(FieldItemListInterface $items) {
public function viewElements(FieldItemListInterface $items, $langcode) {
$elements = array();
if ($items->isEmpty()) {

View file

@ -63,7 +63,7 @@ class TestFieldEmptySettingFormatter extends FormatterBase {
/**
* {@inheritdoc}
*/
public function viewElements(FieldItemListInterface $items) {
public function viewElements(FieldItemListInterface $items, $langcode) {
$elements = array();
if (!empty($items)) {

View file

@ -63,7 +63,7 @@ class TestFieldMultipleFormatter extends FormatterBase {
/**
* {@inheritdoc}
*/
public function viewElements(FieldItemListInterface $items) {
public function viewElements(FieldItemListInterface $items, $langcode) {
$elements = array();
if (!empty($items)) {

View file

@ -27,7 +27,7 @@ class TestFieldNoSettingsFormatter extends FormatterBase {
/**
* {@inheritdoc}
*/
public function viewElements(FieldItemListInterface $items) {
public function viewElements(FieldItemListInterface $items, $langcode) {
$elements = array();
foreach ($items as $delta => $item) {

View file

@ -75,7 +75,7 @@ class TestFieldPrepareViewFormatter extends FormatterBase {
/**
* {@inheritdoc}
*/
public function viewElements(FieldItemListInterface $items) {
public function viewElements(FieldItemListInterface $items, $langcode) {
$elements = array();
foreach ($items as $delta => $item) {

View file

@ -34,6 +34,8 @@ class TestFieldWidget extends WidgetBase {
public static function defaultSettings() {
return array(
'test_widget_setting' => 'dummy test string',
'role' => 'anonymous',
'role2' => 'anonymous',
) + parent::defaultSettings();
}
@ -78,4 +80,42 @@ class TestFieldWidget extends WidgetBase {
return $element['value'];
}
/**
* {@inheritdoc}
*/
public function calculateDependencies() {
$dependencies = parent::calculateDependencies();
foreach (['role', 'role2'] as $setting) {
if (!empty($role_id = $this->getSetting($setting))) {
// Create a dependency on the role config entity referenced in settings.
$dependencies['config'][] = "user.role.$role_id";
}
}
return $dependencies;
}
/**
* {@inheritdoc}
*/
public function onDependencyRemoval(array $dependencies) {
$changed = parent::onDependencyRemoval($dependencies);
// Only the setting 'role' is resolved here. When the dependency related to
// this setting is removed, is expected that the widget component will be
// update accordingly in the display entity. The 'role2' setting is
// deliberately left out from being updated. When the dependency
// corresponding to this setting is removed, is expected that the widget
// component will be disabled in the display entity.
if (!empty($role_id = $this->getSetting('role'))) {
if (!empty($dependencies['config']["user.role.$role_id"])) {
$this->setSetting('role', 'anonymous');
$changed = TRUE;
}
}
return $changed;
}
}

View file

@ -99,7 +99,7 @@ class TestFieldWidgetMultiple extends WidgetBase {
/**
* {@inheritdoc}
* Used in \Drupal\entity_reference\Tests\EntityReferenceAdminTest::testAvailableFormatters().
* Used in \Drupal\field\Tests\EntityReference\EntityReferenceAdminTest::testAvailableFormatters().
*/
public static function isApplicable(FieldDefinitionInterface $field_definition) {
// Returns FALSE if machine name of the field equals field_onewidgetfield.

View file

@ -17,3 +17,4 @@ dependencies:
- entity_test
- text
persist_with_no_fields: false
custom_storage: false

View file

@ -17,3 +17,4 @@ dependencies:
- entity_test
- text
persist_with_no_fields: false
custom_storage: false

View file

@ -1,10 +1,10 @@
id: entity_test.entity_test.field_test_import_staging
id: entity_test.entity_test.field_test_import_sync
uuid: ea711065-6940-47cd-813d-618f64095481
langcode: en
field_name: field_test_import_staging
field_name: field_test_import_sync
entity_type: entity_test
bundle: entity_test
label: 'Import from staging'
label: 'Import from sync'
description: ''
required: '0'
default_value: { }
@ -13,4 +13,4 @@ settings: { }
field_type: text
dependencies:
config:
- field.storage.entity_test.field_test_import_staging
- field.storage.entity_test.field_test_import_sync

View file

@ -1,7 +1,7 @@
id: entity_test.test_bundle.field_test_import_staging_2
id: entity_test.test_bundle.field_test_import_sync_2
uuid: f07794a2-d7cc-45b6-b40d-13cf021b5552
langcode: en
field_name: field_test_import_staging_2
field_name: field_test_import_sync_2
entity_type: entity_test
bundle: test_bundle
label: 'Test import field 2 on test bundle'
@ -13,4 +13,4 @@ settings: { }
field_type: text
dependencies:
config:
- field.storage.entity_test.field_test_import_staging_2
- field.storage.entity_test.field_test_import_sync_2

View file

@ -1,7 +1,7 @@
id: entity_test.test_bundle_2.field_test_import_staging_2
id: entity_test.test_bundle_2.field_test_import_sync_2
uuid: 49d6dd19-5097-443d-8f00-fc79525bebce
langcode: en
field_name: field_test_import_staging_2
field_name: field_test_import_sync_2
entity_type: entity_test
bundle: test_bundle_2
label: 'Test import field 2 on test bundle 2'
@ -13,4 +13,4 @@ settings: { }
field_type: text
dependencies:
config:
- field.storage.entity_test.field_test_import_staging_2
- field.storage.entity_test.field_test_import_sync_2

View file

@ -1,7 +1,7 @@
id: entity_test.field_test_import_staging
id: entity_test.field_test_import_sync
uuid: 0bf654cc-f14a-4881-b94c-76959e47466b
langcode: en
field_name: field_test_import_staging
field_name: field_test_import_sync
entity_type: entity_test
type: text
settings:
@ -18,3 +18,4 @@ dependencies:
- entity_test
- text
persist_with_no_fields: false
custom_storage: false

View file

@ -1,7 +1,7 @@
id: entity_test.field_test_import_staging_2
id: entity_test.field_test_import_sync_2
uuid: 2165d9aa-9a0c-41a1-be02-2a49f3405c00
langcode: en
field_name: field_test_import_staging_2
field_name: field_test_import_sync_2
entity_type: entity_test
type: text
settings:
@ -18,3 +18,4 @@ dependencies:
- entity_test
- text
persist_with_no_fields: false
custom_storage: false

View file

@ -1,6 +1,6 @@
name: 'User test views'
name: 'Field test views'
type: module
description: 'Provides default views for views user tests.'
description: 'Provides default views for views field tests.'
package: Testing
version: VERSION
core: 8.x

View file

@ -0,0 +1,52 @@
langcode: en
status: true
dependencies:
module:
- node
- user
config:
- field.storage.node.field_test
id: test_view_field_delete
label: test_view_field_delete
module: views
description: ''
tag: default
base_table: node
base_field: nid
core: '8'
display:
default:
display_options:
access:
type: perm
fields:
nid:
field: nid
id: nid
table: node
plugin_id: field
entity_type: node
entity_field: nid
field_test:
id: field_test
table: node__field_test
field: field_test
plugin_id: field
entity_type: node
entity_field: field_test
cache:
type: tag
exposed_form:
type: basic
pager:
type: full
query:
type: views_query
style:
type: default
row:
type: fields
display_plugin: default
display_title: Master
id: default
position: 0

View file

@ -153,7 +153,7 @@ class FieldConfigEntityUnitTest extends UnitTestCase {
'bundle' => 'test_bundle',
'field_type' => 'test_field',
), $this->entityTypeId);
$dependencies = $field->calculateDependencies();
$dependencies = $field->calculateDependencies()->getDependencies();
$this->assertContains('field.storage.test_entity_type.test_field', $dependencies['config']);
$this->assertContains('test.test_entity_type.id', $dependencies['config']);
$this->assertEquals(['test_module', 'test_module2', 'test_module3'], $dependencies['module']);

View file

@ -8,6 +8,9 @@
namespace Drupal\Tests\field\Unit;
use Drupal\Core\DependencyInjection\ContainerBuilder;
use Drupal\Core\Field\FieldItemBase;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Field\FieldTypePluginManagerInterface;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\Tests\UnitTestCase;
@ -39,16 +42,25 @@ class FieldStorageConfigEntityUnitTest extends UnitTestCase {
*/
protected $uuid;
/**
* The field type manager.
*
* @var \Drupal\Core\Field\FieldTypePluginManagerInterface|\PHPUnit_Framework_MockObject_MockObject
*/
protected $fieldTypeManager;
/**
* {@inheritdoc}
*/
protected function setUp() {
$this->entityManager = $this->getMock('\Drupal\Core\Entity\EntityManagerInterface');
$this->uuid = $this->getMock('\Drupal\Component\Uuid\UuidInterface');
$this->fieldTypeManager = $this->getMock(FieldTypePluginManagerInterface::class);
$container = new ContainerBuilder();
$container->set('entity.manager', $this->entityManager);
$container->set('uuid', $this->uuid);
$container->set('plugin.manager.field.field_type', $this->fieldTypeManager);
\Drupal::setContainer($container);
}
@ -73,29 +85,50 @@ class FieldStorageConfigEntityUnitTest extends UnitTestCase {
// ConfigEntityBase::addDependency() to get the provider of the field config
// entity type and once in FieldStorageConfig::calculateDependencies() to
// get the provider of the entity type that field is attached to.
$this->entityManager->expects($this->at(0))
$this->entityManager->expects($this->any())
->method('getDefinition')
->with('field_storage_config')
->will($this->returnValue($fieldStorageConfigentityType));
$this->entityManager->expects($this->at(1))
->method('getDefinition')
->with($attached_entity_type_id)
->will($this->returnValue($attached_entity_type));
$this->entityManager->expects($this->at(2))
->method('getDefinition')
->with('field_storage_config')
->will($this->returnValue($fieldStorageConfigentityType));
->willReturnMap([
['field_storage_config', TRUE, $fieldStorageConfigentityType],
[$attached_entity_type_id, TRUE, $attached_entity_type],
]);
$field_storage = new FieldStorageConfig(array(
$this->fieldTypeManager->expects($this->atLeastOnce())
->method('getDefinition')
->with('test_field_type', FALSE)
->willReturn([
'class' => TestFieldType::class,
]);
$field_storage = new FieldStorageConfig([
'entity_type' => $attached_entity_type_id,
'field_name' => 'test_field',
'type' => 'test_field_type',
'module' => 'test_module',
));
]);
$dependencies = $field_storage->calculateDependencies();
$this->assertContains('test_module', $dependencies['module']);
$this->assertContains('entity_provider_module', $dependencies['module']);
$dependencies = $field_storage->calculateDependencies()->getDependencies();
$this->assertEquals(['entity_provider_module', 'entity_test', 'test_module'], $dependencies['module']);
$this->assertEquals(['stark'], $dependencies['theme']);
}
}
/**
* A test class to test field storage dependencies.
*
* @see \Drupal\Core\Field\FieldItemInterface::calculateStorageDependencies()
*/
class TestFieldType {
/**
* {@inheritdoc}
*/
public static function calculateStorageDependencies(FieldStorageDefinitionInterface $field_definition) {
$dependencies = [];
$dependencies['module'] = ['entity_test'];
$dependencies['theme'] = ['stark'];
return $dependencies;
}
}

View file

@ -7,6 +7,7 @@
namespace Drupal\Tests\field\Unit;
use Drupal\simpletest\AssertHelperTrait;
use Drupal\Tests\UnitTestCase;
/**
@ -15,6 +16,8 @@ use Drupal\Tests\UnitTestCase;
*/
class FieldUninstallValidatorTest extends UnitTestCase {
use AssertHelperTrait;
/**
* @var \Drupal\field\FieldUninstallValidator|\PHPUnit_Framework_MockObject_MockObject
*/
@ -43,7 +46,7 @@ class FieldUninstallValidatorTest extends UnitTestCase {
$module = $this->randomMachineName();
$expected = [];
$reasons = $this->fieldUninstallValidator->validate($module);
$this->assertSame($expected, $reasons);
$this->assertSame($expected, $this->castSafeStrings($reasons));
}
/**
@ -63,7 +66,7 @@ class FieldUninstallValidatorTest extends UnitTestCase {
$module = $this->randomMachineName();
$expected = ['Fields pending deletion'];
$reasons = $this->fieldUninstallValidator->validate($module);
$this->assertSame($expected, $reasons);
$this->assertSame($expected, $this->castSafeStrings($reasons));
}
/**
@ -83,7 +86,7 @@ class FieldUninstallValidatorTest extends UnitTestCase {
$module = $this->randomMachineName();
$expected = ['Fields type(s) in use'];
$reasons = $this->fieldUninstallValidator->validate($module);
$this->assertSame($expected, $reasons);
$this->assertSame($expected, $this->castSafeStrings($reasons));
}
}

View file

@ -0,0 +1,80 @@
<?php
/**
* @file
* Contains \Drupal\Tests\field\Unit\Plugin\migrate\source\d6\FieldInstancePerViewModeTest.
*/
namespace Drupal\Tests\field\Unit\Plugin\migrate\source\d6;
use Drupal\field\Plugin\migrate\source\d6\FieldInstancePerFormDisplay;
use Drupal\Tests\migrate\Unit\MigrateSqlSourceTestCase;
/**
* Tests d6_field_instance_per_form_display source plugin.
*
* @group field
*/
class FieldInstancePerFormDisplayTest extends MigrateSqlSourceTestCase {
const PLUGIN_CLASS = FieldInstancePerFormDisplay::class;
protected $migrationConfiguration = array(
'id' => 'view_mode_test',
'source' => array(
'plugin' => 'd6_field_instance_per_form_display',
),
);
protected $expectedResults = array(
array(
'display_settings' => array(),
'widget_settings' => array(),
'type_name' => 'story',
'widget_active' => TRUE,
'field_name' => 'field_test_filefield',
'type' => 'filefield',
'module' => 'filefield',
'weight' => '8',
'widget_type' => 'filefield_widget',
),
);
/**
* {@inheritdoc}
*/
protected function setUp() {
$empty_array = serialize([]);
$this->databaseContents['content_node_field'] = array(
array(
'field_name' => 'field_test_filefield',
'type' => 'filefield',
'global_settings' => $empty_array,
'required' => '0',
'multiple' => '0',
'db_storage' => '1',
'module' => 'filefield',
'db_columns' => $empty_array,
'active' => '1',
'locked' => '0',
)
);
$this->databaseContents['content_node_field_instance'] = array(
array(
'field_name' => 'field_test_filefield',
'type_name' => 'story',
'weight' => '8',
'label' => 'File Field',
'widget_type' => 'filefield_widget',
'widget_settings' => $empty_array,
'display_settings' => $empty_array,
'description' => 'An example image field.',
'widget_module' => 'filefield',
'widget_active' => '1',
),
);
parent::setUp();
}
}

View file

@ -16,13 +16,9 @@ use Drupal\Tests\migrate\Unit\MigrateSqlSourceTestCase;
*/
class FieldInstancePerViewModeTest extends MigrateSqlSourceTestCase {
// The plugin system is not working during unit testing so the source plugin
// class needs to be manually specified.
const PLUGIN_CLASS = 'Drupal\field\Plugin\migrate\source\d6\FieldInstancePerViewMode';
// The fake Migration configuration entity.
protected $migrationConfiguration = array(
// The ID of the entity, can be any string.
'id' => 'view_mode_test',
'source' => array(
'plugin' => 'd6_field_instance_per_view_mode',
@ -76,7 +72,6 @@ class FieldInstancePerViewModeTest extends MigrateSqlSourceTestCase {
),
);
/**
* {@inheritdoc}
*/

View file

@ -69,7 +69,6 @@ class FieldTest extends MigrateSqlSourceTestCase {
$this->databaseContents['content_node_field'][0]['global_settings'] = serialize($this->databaseContents['content_node_field'][0]['global_settings']);
$this->databaseContents['content_node_field'][0]['db_columns'] = serialize($this->databaseContents['content_node_field'][0]['db_columns']);
$this->databaseContents['content_node_field_instance'][0]['widget_settings'] = serialize(array());
$this->databaseContents['content_node_field_instance'][0]['widget_type'] = 'text_textarea';
$this->databaseContents['content_node_field_instance'][0]['field_name'] = 'field_body';
parent::setUp();