X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=web%2Fcore%2Fmodules%2Fsystem%2Ftests%2Fsrc%2FFunctional%2FUpdate%2FEntityUpdateToPublishableTest.php;fp=web%2Fcore%2Fmodules%2Fsystem%2Ftests%2Fsrc%2FFunctional%2FUpdate%2FEntityUpdateToPublishableTest.php;h=e887fd561cfa7928f28d792307cd2699b0e832f8;hp=0000000000000000000000000000000000000000;hb=0bf8d09d2542548982e81a441b1f16e75873a04f;hpb=74df008bdbb3a11eeea356744f39b802369bda3c diff --git a/web/core/modules/system/tests/src/Functional/Update/EntityUpdateToPublishableTest.php b/web/core/modules/system/tests/src/Functional/Update/EntityUpdateToPublishableTest.php new file mode 100644 index 000000000..e887fd561 --- /dev/null +++ b/web/core/modules/system/tests/src/Functional/Update/EntityUpdateToPublishableTest.php @@ -0,0 +1,170 @@ +entityTypeManager = \Drupal::entityTypeManager(); + $this->entityDefinitionUpdateManager = \Drupal::entityDefinitionUpdateManager(); + $this->lastInstalledSchemaRepository = \Drupal::service('entity.last_installed_schema.repository'); + $this->installedStorageSchema = \Drupal::keyValue('entity.storage_schema.sql'); + $this->state = \Drupal::state(); + } + + /** + * {@inheritdoc} + */ + protected function setDatabaseDumpFiles() { + $this->databaseDumpFiles = [ + __DIR__ . '/../../../fixtures/update/drupal-8.0.0-rc1-filled.standard.entity_test_update_mul.php.gz', +]; + } + + /** + * Tests the conversion of an entity type to be publishable. + * + * @see entity_test_update_update_8400() + */ + public function testConvertToPublishable() { + // Check that entity type is not publishable prior to running the update + // process. + $entity_test_update = $this->lastInstalledSchemaRepository->getLastInstalledDefinition('entity_test_update'); + $this->assertFalse($entity_test_update->getKey('published')); + + // Make the entity type translatable and publishable. + $this->updateEntityTypeDefinition(); + + $this->enableUpdates('entity_test_update', 'entity_rev_pub_updates', 8400); + $this->runUpdates(); + + /** @var \Drupal\Core\Entity\EntityTypeInterface $entity_test_update */ + $entity_test_update = $this->lastInstalledSchemaRepository->getLastInstalledDefinition('entity_test_update'); + $this->assertEquals('status', $entity_test_update->getKey('published')); + + /** @var \Drupal\Core\Entity\Sql\SqlEntityStorageInterface $storage */ + $storage = \Drupal::entityTypeManager()->getStorage('entity_test_update'); + $this->assertCount(102, $storage->loadMultiple(), 'All test entities were found.'); + + // The test entity with ID 50 was created before Content Translation was + // enabled, which means it didn't have a 'content_translation_status' field. + // content_translation_update_8400() added values for that field which + // should now be reflected in the entity's 'status' field. + /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */ + $entity = $storage->load(50); + $this->assertEquals(1, $entity->status->value); + + $translation = $entity->getTranslation('ro'); + $this->assertEquals(1, $translation->status->value); + + // The test entity with ID 100 was created with Content Translation enabled + // and it should have the same values as entity 50. + $entity = $storage->load(100); + $this->assertEquals(1, $entity->status->value); + + $translation = $entity->getTranslation('ro'); + $this->assertEquals(1, $translation->status->value); + + // The test entity 101 had 'content_translation_status' set to 0 for the + // English (source) language. + $entity = $storage->load(101); + $this->assertEquals(0, $entity->status->value); + + $translation = $entity->getTranslation('ro'); + $this->assertEquals(1, $translation->status->value); + + // The test entity 102 had 'content_translation_status' set to 0 for the + // Romanian language. + $entity = $storage->load(102); + $this->assertEquals(1, $entity->status->value); + + $translation = $entity->getTranslation('ro'); + $this->assertEquals(0, $translation->status->value); + } + + /** + * Updates the 'entity_test_update' entity type to translatable and + * publishable. + */ + protected function updateEntityTypeDefinition() { + $entity_type = clone $this->entityTypeManager->getDefinition('entity_test_update'); + + $keys = $entity_type->getKeys(); + $keys['published'] = 'status'; + $entity_type->set('entity_keys', $keys); + + $entity_type->set('translatable', TRUE); + $entity_type->set('data_table', 'entity_test_update_data'); + + $this->state->set('entity_test_update.entity_type', $entity_type); + + // Add the status field to the entity type. + $status = BaseFieldDefinition::create('boolean') + ->setLabel(t('Publishing status')) + ->setDescription(t('A boolean indicating the published state.')) + ->setRevisionable(TRUE) + ->setTranslatable(TRUE) + ->setRequired(TRUE) + ->setDefaultValue(TRUE); + + $this->state->set('entity_test_update.additional_base_field_definitions', [ + 'status' => $status, + ]); + + $this->entityTypeManager->clearCachedDefinitions(); + } + +}