diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php index 4ad8849..6560de1 100644 --- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php +++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php @@ -7,6 +7,7 @@ namespace Drupal\Core\Field\Plugin\Field\FieldType; +use Drupal\Component\Utility\String; use Drupal\Core\Entity\TypedData\EntityDataDefinition; use Drupal\Core\Field\FieldDefinitionInterface; use Drupal\Core\Field\FieldItemBase; @@ -58,6 +59,10 @@ public static function propertyDefinitions(FieldDefinitionInterface $field_defin $settings = $field_definition->getSettings(); $target_type_info = \Drupal::entityManager()->getDefinition($settings['target_type']); + if (!$target_type_info) { + throw new \Exception(String::format('Target type @entity_type does not exist.', array('@target_type' => $settings['target_type']))); + } + if ($target_type_info->isSubclassOf('\Drupal\Core\Entity\ContentEntityInterface')) { // @todo: Lookup the entity type's ID data type and use it here. // https://drupal.org/node/2107249 @@ -98,6 +103,9 @@ public static function mainPropertyName() { public static function schema(FieldDefinitionInterface $field_definition) { $target_type = $field_definition->getSetting('target_type'); $target_type_info = \Drupal::entityManager()->getDefinition($target_type); + if (!$target_type_info) { + throw new \Exception(String::format('Target type @entity_type does not exist.', array('@entity_type' => $target_type))); + } if ($target_type_info->isSubclassOf('\Drupal\Core\Entity\ContentEntityInterface')) { $columns = array( diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigImportRecreateTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigImportRecreateTest.php index b7db7b4..4f4d5ca 100644 --- a/core/modules/config/lib/Drupal/config/Tests/ConfigImportRecreateTest.php +++ b/core/modules/config/lib/Drupal/config/Tests/ConfigImportRecreateTest.php @@ -29,7 +29,7 @@ class ConfigImportRecreateTest extends DrupalUnitTestBase { * * @var array */ - public static $modules = array('system', 'entity', 'field', 'text', 'node'); + public static $modules = array('system', 'entity', 'field', 'text', 'node', 'user'); public static function getInfo() { return array( diff --git a/core/modules/field/lib/Drupal/field/Tests/FieldAttachOtherTest.php b/core/modules/field/lib/Drupal/field/Tests/FieldAttachOtherTest.php index 9e42126..7c46cd8 100644 --- a/core/modules/field/lib/Drupal/field/Tests/FieldAttachOtherTest.php +++ b/core/modules/field/lib/Drupal/field/Tests/FieldAttachOtherTest.php @@ -38,7 +38,7 @@ public static function getInfo() { public function setUp() { parent::setUp(); - $this->installSchema('entity_test', array('entity_test_rev', 'entity_test_rev_revision')); + $this->installEntitySchema('entity_test_rev'); $this->createFieldWithInstance(); } diff --git a/core/modules/file/file.module b/core/modules/file/file.module index b707b57..52a689d 100644 --- a/core/modules/file/file.module +++ b/core/modules/file/file.module @@ -254,6 +254,7 @@ function file_move(File $source, $destination = NULL, $replace = FILE_EXISTS_REN $existing = reset($existing_files); $delete_source = TRUE; $file->fid = $existing->id(); + $file->uuid = $existing->uuid(); } } // If we are renaming around an existing file (rather than a directory), diff --git a/core/modules/file/lib/Drupal/file/Tests/FileItemTest.php b/core/modules/file/lib/Drupal/file/Tests/FileItemTest.php index 0f40a14..af73f03 100644 --- a/core/modules/file/lib/Drupal/file/Tests/FileItemTest.php +++ b/core/modules/file/lib/Drupal/file/Tests/FileItemTest.php @@ -42,8 +42,7 @@ public static function getInfo() { public function setUp() { parent::setUp(); - $this->installSchema('file', 'file_managed'); - $this->installSchema('file', 'file_usage'); + $this->installEntitySchema('file'); entity_create('field_config', array( 'name' => 'file_test', diff --git a/core/modules/file/lib/Drupal/file/Tests/FileManagedTestBase.php b/core/modules/file/lib/Drupal/file/Tests/FileManagedTestBase.php index c777691..91edf6b 100644 --- a/core/modules/file/lib/Drupal/file/Tests/FileManagedTestBase.php +++ b/core/modules/file/lib/Drupal/file/Tests/FileManagedTestBase.php @@ -150,22 +150,19 @@ function assertSameFile(FileInterface $file1, FileInterface $file2) { * File entity. */ function createFile($filepath = NULL, $contents = NULL, $scheme = NULL) { - $file = new \stdClass(); - $file->uri = $this->createUri($filepath, $contents, $scheme); - $file->filename = drupal_basename($file->uri); - $file->filemime = 'text/plain'; - $file->uid = 1; - $file->created = REQUEST_TIME; - $file->changed = REQUEST_TIME; - $file->filesize = filesize($file->uri); - $file->status = 0; + // Don't count hook invocations caused by creating the file. + \Drupal::state()->set('file_test.count_hook_invocations', FALSE); + $file = entity_create('file', array( + 'uri' => $this->createUri($filepath, $contents, $scheme), + 'uid' => 1, + )); + $file->save(); // Write the record directly rather than using the API so we don't invoke // the hooks. - $file = (array) $file; - $file['fid'] = db_insert('file_managed') - ->fields($file) - ->execute(); - return entity_create('file', $file); + $this->assertTrue($file->id() > 0, 'The file was added to the database.', 'Create test file'); + + \Drupal::state()->set('file_test.count_hook_invocations', TRUE); + return $file; } /** diff --git a/core/modules/file/lib/Drupal/file/Tests/SpaceUsedTest.php b/core/modules/file/lib/Drupal/file/Tests/SpaceUsedTest.php index a0c8e33..bfedef6 100644 --- a/core/modules/file/lib/Drupal/file/Tests/SpaceUsedTest.php +++ b/core/modules/file/lib/Drupal/file/Tests/SpaceUsedTest.php @@ -23,20 +23,40 @@ function setUp() { parent::setUp(); // Create records for a couple of users with different sizes. - $file = array('uid' => 2, 'uri' => 'public://example1.txt', 'filesize' => 50, 'status' => FILE_STATUS_PERMANENT); - db_insert('file_managed')->fields($file)->execute(); - $file = array('uid' => 2, 'uri' => 'public://example2.txt', 'filesize' => 20, 'status' => FILE_STATUS_PERMANENT); - db_insert('file_managed')->fields($file)->execute(); - $file = array('uid' => 3, 'uri' => 'public://example3.txt', 'filesize' => 100, 'status' => FILE_STATUS_PERMANENT); - db_insert('file_managed')->fields($file)->execute(); - $file = array('uid' => 3, 'uri' => 'public://example4.txt', 'filesize' => 200, 'status' => FILE_STATUS_PERMANENT); - db_insert('file_managed')->fields($file)->execute(); + $this->createFileWithSize('public://example1.txt', 50, 2); + $this->createFileWithSize('public://example2.txt', 20, 2); + $this->createFileWithSize('public://example3.txt', 100, 3); + $this->createFileWithSize('public://example4.txt', 200, 3); // Now create some non-permanent files. - $file = array('uid' => 2, 'uri' => 'public://example5.txt', 'filesize' => 1, 'status' => 0); - db_insert('file_managed')->fields($file)->execute(); - $file = array('uid' => 3, 'uri' => 'public://example6.txt', 'filesize' => 3, 'status' => 0); - db_insert('file_managed')->fields($file)->execute(); + $this->createFileWithSize('public://example5.txt', 1, 2, 0); + $this->createFileWithSize('public://example6.txt', 3, 3, 0); + } + + /** + * Creates a file with a given size. + * + * @param string $uri + * URI of the file to create. + * @param int $size + * Size of the file. + * @param int $uid + * File owner ID. + * @param int $status + * Whether the file should be permanent or temporary. + * + * @return \Drupal\Core\Entity\EntityInterface + * The file entity. + */ + protected function createFileWithSize($uri, $size, $uid, $status = FILE_STATUS_PERMANENT) { + file_put_contents($uri, $this->randomName($size)); + $file = entity_create('file', array( + 'uri' => $uri, + 'uid' => $uid, + 'status' => $status, + )); + $file->save(); + return $file; } /** diff --git a/core/modules/node/lib/Drupal/node/Entity/Node.php b/core/modules/node/lib/Drupal/node/Entity/Node.php index 94bfc7e..c8544f6 100644 --- a/core/modules/node/lib/Drupal/node/Entity/Node.php +++ b/core/modules/node/lib/Drupal/node/Entity/Node.php @@ -425,6 +425,7 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { $fields['revision_timestamp'] = FieldDefinition::create('timestamp') ->setLabel(t('Revision timestamp')) ->setDescription(t('The time that the current revision was created.')) + ->setSetting('default_value', 0) ->setQueryable(FALSE) ->setRevisionable(TRUE);