/** * Tests the translation values when saving a forward revision. */ public function testTranslationValuesWhenSavingForwardRevisions() { $user = $this->createUser(); $storage = $this->entityManager->getStorage('entity_test_mulrev'); // Create a test entity and a translation for it. $entity = EntityTestMulRev::create(['name' => 'default revision - en', 'user_id' => $user->id(), 'language' => 'en']); $entity->addTranslation('de', ['name' => 'default revision - de']); $entity->save(); // Create a forward revision for the entity and change a field value for // both languages. $forward_revision = $this->reloadEntity($entity); $forward_revision->setNewRevision(); $forward_revision->isDefaultRevision(FALSE); $forward_revision->name = 'forward revision - en'; $forward_revision->save(); $forward_revision_translation = $forward_revision->getTranslation('de'); $forward_revision_translation->name = 'forward revision - de'; $forward_revision_translation->save(); $forward_revision_id = $forward_revision->getRevisionId(); $forward_revision = $storage->loadRevision($forward_revision_id); // Change the value of the field in the default language, save the forward // revision and check that the value of the field in the second language is // also taken from the forward revision, *not* from the default revision. $forward_revision->name = 'updated forward revision - en'; $forward_revision->save(); $forward_revision = $storage->loadRevision($forward_revision_id); $this->assertEquals($forward_revision->name->value, 'updated forward revision - en'); $this->assertEquals($forward_revision->getTranslation('de')->name->value, 'forward revision - de'); }
/** * Tests non-revisionable fields on revisionable and translatable entities. */ public function testMulNonRevisionableField() { $user1 = $this->createUser(); $user2 = $this->createUser(); // Create a test entity. $entity = EntityTestMulRev::create(array('name' => $this->randomString(), 'user_id' => $user1->id(), 'language' => 'en', 'non_rev_field' => 'Huron')); $entity->save(); // Create a test entity. $entity2 = EntityTestMulRev::create(array('name' => $this->randomString(), 'user_id' => $user1->id(), 'language' => 'en', 'non_rev_field' => 'Michigan')); $entity2->save(); $this->assertEquals('Huron', $entity->get('non_rev_field')->value, 'Huron found on entity 1'); $this->assertEquals('Michigan', $entity2->get('non_rev_field')->value, 'Michigan found on entity 2'); $entity->setNewRevision(); $entity->setOwner($user2); $entity->save(); $entity2->setNewRevision(); $entity2->setOwner($user2); $entity2->save(); $this->assertEquals($user2->id(), $entity->getOwner()->id(), 'User 2 found on entity 1'); $this->assertEquals($user2->id(), $entity2->getOwner()->id(), 'User 2 found on entity 2'); $entity->addTranslation('de'); $entity->save(); $entity2->addTranslation('de'); $entity2->save(); $expected_revision_ids = [4 => 2, 3 => 1, 2 => 2, 1 => 1]; $revision_ids = $this->mulRev->getQuery()->allRevisions()->sort('revision_id', 'DESC')->execute(); $this->assertEquals($expected_revision_ids, $revision_ids, 'Revision ids found'); $expected_non_rev_field_revision_ids = [3 => 1, 1 => 1]; $non_rev_field_revision_ids = $this->mulRev->getQuery()->allRevisions()->condition('non_rev_field', 'Huron')->sort('revision_id', 'DESC')->execute(); $this->assertEquals($expected_non_rev_field_revision_ids, $non_rev_field_revision_ids, 'Revision ids found'); }
/** * Tests if the translation object has the right revision id after new revision. */ public function testNewRevisionAfterTranslation() { $user = $this->createUser(); // Create a test entity. $entity = EntityTestMulRev::create(['name' => $this->randomString(), 'user_id' => $user->id(), 'language' => 'en']); $entity->save(); $old_rev_id = $entity->getRevisionId(); $translation = $entity->addTranslation('de'); $translation->setNewRevision(); $translation->save(); $this->assertTrue($translation->getRevisionId() > $old_rev_id, 'The saved translation in new revision has a newer revision id.'); $this->assertTrue($this->reloadEntity($entity)->getRevisionId() > $old_rev_id, 'The entity from the storage has a newer revision id.'); }
/** * Test that fields referencing UUIDs can be denormalized. */ function testUuidEntityResolver() { // Create an entity to get the UUID from. $entity = EntityTestMulRev::create(array('type' => 'entity_test_mulrev')); $entity->set('name', 'foobar'); $entity->set('field_test_entity_reference', array(array('target_id' => 1))); $entity->save(); $field_uri = Url::fromUri('base:rest/relation/entity_test_mulrev/entity_test_mulrev/field_test_entity_reference', array('absolute' => TRUE))->toString(); $data = array('_links' => array('type' => array('href' => Url::fromUri('base:rest/type/entity_test_mulrev/entity_test_mulrev', array('absolute' => TRUE))->toString()), $field_uri => array(array('href' => $entity->url()))), '_embedded' => array($field_uri => array(array('_links' => array('self' => $entity->url()), 'uuid' => array(array('value' => $entity->uuid())))))); $denormalized = $this->container->get('serializer')->denormalize($data, 'Drupal\\entity_test\\Entity\\EntityTestMulRev', $this->format); $field_value = $denormalized->get('field_test_entity_reference')->getValue(); $this->assertEqual($field_value[0]['target_id'], 1, 'Entity reference resolved using UUID.'); }
/** * Tests translating a non-revisionable field. */ function testTranslatingNonRevisionableField() { /** @var \Drupal\Core\Entity\ContentEntityBase $entity */ $entity = EntityTestMulRev::create(); $entity->set('non_rev_field', 'Hello'); $entity->save(); $translation = $entity->addTranslation('es'); $translation->set('non_rev_field', 'Hola'); $translation->save(); $reloaded = EntityTestMulRev::load($entity->id()); $this->assertEquals('Hello', $reloaded->getTranslation('en')->get('non_rev_field')->value); $this->assertEquals('Hola', $reloaded->getTranslation('es')->get('non_rev_field')->value); }
/** * Tests the field item save workflow. */ public function testSaveWorkflow() { $entity = EntityTestMulRev::create(['name' => $this->randomString(), 'field_test_item' => $this->randomString(), $this->fieldName => $this->randomString()]); // Save a new entity and verify that the initial field value is overwritten // with a value containing the entity id, which implies a resave. Check that // the entity data structure and the stored values match. $this->assertSavedFieldItemValue($entity, "field_test:{$this->fieldName}:1:1"); // Update the entity and verify that the field value is overwritten on // presave if it is not resaved. $this->assertSavedFieldItemValue($entity, 'overwritten'); // Flag the field value as needing to be resaved and verify it actually is. $entity->field_test_item->value = $entity->{$this->fieldName}->value = 'resave'; $this->assertSavedFieldItemValue($entity, "field_test:{$this->fieldName}:1:3"); }
protected function setUp() { parent::setUp(); // User create needs sequence table. $this->installSchema('system', array('sequences')); // Create a test user to use as the entity owner. $this->user = \Drupal::entityManager()->getStorage('user')->create(['name' => 'serialization_test_user', 'mail' => '*****@*****.**', 'pass' => '123456']); $this->user->save(); // Create a test entity to serialize. $this->values = array('name' => $this->randomMachineName(), 'user_id' => $this->user->id(), 'field_test_text' => array('value' => $this->randomMachineName(), 'format' => 'full_html')); $this->entity = EntityTestMulRev::create($this->values); $this->entity->save(); $this->serializer = $this->container->get('serializer'); $this->installConfig(array('field')); }
/** * Tests if the translation object has the right revision id after new revision. */ public function testRevertRevisionAfterTranslation() { $user = $this->createUser(); $storage = $this->entityManager->getStorage('entity_test_mulrev'); // Create a test entity. $entity = EntityTestMulRev::create(['name' => $this->randomString(), 'user_id' => $user->id(), 'language' => 'en']); $entity->save(); $old_rev_id = $entity->getRevisionId(); $translation = $entity->addTranslation('de'); $translation->setNewRevision(); $translation->save(); $entity = $this->reloadEntity($entity); $this->assertTrue($entity->hasTranslation('de')); $entity = $storage->loadRevision($old_rev_id); $entity->setNewRevision(); $entity->isDefaultRevision(TRUE); $entity->save(); $entity = $this->reloadEntity($entity); $this->assertFalse($entity->hasTranslation('de')); }
/** * Check that field translatability is handled properly. */ function testFieldDefinitions() { // Check that field translatability can be altered to be enabled or disabled // in field definitions. $entity_type = 'entity_test_mulrev'; $this->state->set('entity_test.field_definitions.translatable', array('name' => FALSE)); $this->entityManager->clearCachedFieldDefinitions(); $definitions = $this->entityManager->getBaseFieldDefinitions($entity_type); $this->assertFalse($definitions['name']->isTranslatable(), 'Field translatability can be disabled programmatically.'); $this->state->set('entity_test.field_definitions.translatable', array('name' => TRUE)); $this->entityManager->clearCachedFieldDefinitions(); $definitions = $this->entityManager->getBaseFieldDefinitions($entity_type); $this->assertTrue($definitions['name']->isTranslatable(), 'Field translatability can be enabled programmatically.'); // Check that field translatability is disabled by default. $base_field_definitions = EntityTestMulRev::baseFieldDefinitions($this->entityManager->getDefinition($entity_type)); $this->assertTrue(!isset($base_field_definitions['id']->translatable), 'Translatability for the <em>id</em> field is not defined.'); $this->assertFalse($definitions['id']->isTranslatable(), 'Field translatability is disabled by default.'); // Check that entity ids and langcode fields cannot be translatable. foreach (array('id', 'uuid', 'revision_id', 'type', 'langcode') as $name) { $this->state->set('entity_test.field_definitions.translatable', array($name => TRUE)); $this->entityManager->clearCachedFieldDefinitions(); $message = format_string('Field %field cannot be translatable.', array('%field' => $name)); try { $this->entityManager->getBaseFieldDefinitions($entity_type); $this->fail($message); } catch (\LogicException $e) { $this->pass($message); } } }
/** * Test forward-revisions. */ public function testForwardRevisions() { // Ensure entity 14 is returned. $result = \Drupal::entityQuery('entity_test_mulrev')->condition('id', [14], 'IN')->execute(); $this->assertEqual(count($result), 1); // Set a revision on entity 14 that isn't the current default. $entity = EntityTestMulRev::load(14); $current_values = $entity->{$this->figures}->getValue(); $entity->setNewRevision(TRUE); $entity->isDefaultRevision(FALSE); $entity->{$this->figures}->setValue(['color' => 'red', 'shape' => 'square']); $entity->save(); // Entity query should still return entity 14. $result = \Drupal::entityQuery('entity_test_mulrev')->condition('id', [14], 'IN')->execute(); $this->assertEqual(count($result), 1); // Verify that field conditions on the default and forward revision are // work as expected. $result = \Drupal::entityQuery('entity_test_mulrev')->condition('id', [14], 'IN')->condition("{$this->figures}.color", $current_values[0]['color'])->execute(); $this->assertEqual($result, [14 => '14']); $result = $this->factory->get('entity_test_mulrev')->condition('id', [14], 'IN')->condition("{$this->figures}.color", 'red')->allRevisions()->execute(); $this->assertEqual($result, [16 => '14']); }
/** * Tests fields on the revision table. */ public function testRevisionTableFields() { $entity_type = $this->baseEntityType->set('base_table', 'entity_test_mulrev')->set('revision_table', 'entity_test_mulrev_revision')->set('data_table', 'entity_test_mulrev_property_data')->set('revision_data_table', 'entity_test_mulrev_property_revision')->set('id', 'entity_test_mulrev')->set('translatable', TRUE); $base_field_definitions = $this->setupBaseFields(EntityTestMulRev::baseFieldDefinitions($this->baseEntityType)); $user_base_field_definitions = ['uid' => BaseFieldDefinition::create('integer')->setLabel('ID')->setDescription('The ID of the user entity.')->setReadOnly(TRUE)->setSetting('unsigned', TRUE)]; $this->entityManager->expects($this->any())->method('getBaseFieldDefinitions')->will($this->returnValueMap([['user', $user_base_field_definitions], ['entity_test_mulrev', $base_field_definitions]])); $this->viewsData->setEntityType($entity_type); // Setup the table mapping. $table_mapping = $this->getMock('Drupal\\Core\\Entity\\Sql\\TableMappingInterface'); $table_mapping->expects($this->any())->method('getTableNames')->willReturn(['entity_test_mulrev', 'entity_test_mulrev_revision', 'entity_test_mulrev_property_data', 'entity_test_mulrev_property_revision']); $table_mapping->expects($this->any())->method('getColumnNames')->willReturnMap([['id', ['value' => 'id']], ['uuid', ['value' => 'uuid']], ['type', ['value' => 'type']], ['langcode', ['value' => 'langcode']], ['name', ['value' => 'name']], ['description', ['value' => 'description__value', 'format' => 'description__format']], ['homepage', ['value' => 'homepage']], ['user_id', ['target_id' => 'user_id']], ['revision_id', ['value' => 'id']]]); $table_mapping->expects($this->any())->method('getFieldNames')->willReturnMap([['entity_test_mulrev', ['id', 'revision_id', 'uuid', 'type']], ['entity_test_mulrev_revision', ['id', 'revision_id', 'langcode']], ['entity_test_mulrev_property_data', ['id', 'revision_id', 'langcode', 'name', 'description', 'homepage', 'user_id']], ['entity_test_mulrev_property_revision', ['id', 'revision_id', 'langcode', 'name', 'description', 'homepage', 'user_id']]]); $table_mapping->expects($this->any())->method('getFieldTableName')->willReturnCallback(function ($field) { if ($field == 'uuid') { return 'entity_test_mulrev'; } return 'entity_test_mulrev_property_data'; }); $this->entityStorage->expects($this->once())->method('getTableMapping')->willReturn($table_mapping); $this->setupFieldStorageDefinition(); $data = $this->viewsData->getViewsData(); // Check the base fields. $this->assertFalse(isset($data['entity_test_mulrev']['id'])); $this->assertFalse(isset($data['entity_test_mulrev']['type'])); $this->assertFalse(isset($data['entity_test_mulrev']['revision_id'])); $this->assertUuidField($data['entity_test_mulrev']['uuid']); $this->assertField($data['entity_test_mulrev']['uuid'], 'uuid'); // Also ensure that field_data only fields don't appear on the base table. $this->assertFalse(isset($data['entity_test_mulrev']['name'])); $this->assertFalse(isset($data['entity_test_mul']['description'])); $this->assertFalse(isset($data['entity_test_mul']['description__value'])); $this->assertFalse(isset($data['entity_test_mul']['description__format'])); $this->assertFalse(isset($data['entity_test_mul']['homepage'])); $this->assertFalse(isset($data['entity_test_mulrev']['langcode'])); $this->assertFalse(isset($data['entity_test_mulrev']['user_id'])); // Check the revision fields. The revision ID should only appear in the data // table. $this->assertFalse(isset($data['entity_test_mulrev_revision']['revision_id'])); // Also ensure that field_data only fields don't appear on the revision table. $this->assertFalse(isset($data['entity_test_mulrev_revision']['id'])); $this->assertFalse(isset($data['entity_test_mulrev_revision']['name'])); $this->assertFalse(isset($data['entity_test_mulrev_revision']['description'])); $this->assertFalse(isset($data['entity_test_mulrev_revision']['description__value'])); $this->assertFalse(isset($data['entity_test_mulrev_revision']['description__format'])); $this->assertFalse(isset($data['entity_test_mulrev_revision']['homepage'])); $this->assertFalse(isset($data['entity_test_mulrev_revision']['user_id'])); // Check the data fields. $this->assertNumericField($data['entity_test_mulrev_property_data']['id']); $this->assertField($data['entity_test_mulrev_property_data']['id'], 'id'); $this->assertNumericField($data['entity_test_mulrev_property_data']['revision_id']); $this->assertField($data['entity_test_mulrev_property_data']['revision_id'], 'revision_id'); $this->assertLanguageField($data['entity_test_mulrev_property_data']['langcode']); $this->assertField($data['entity_test_mulrev_property_data']['langcode'], 'langcode'); $this->assertStringField($data['entity_test_mulrev_property_data']['name']); $this->assertField($data['entity_test_mulrev_property_data']['name'], 'name'); $this->assertLongTextField($data['entity_test_mulrev_property_data'], 'description'); $this->assertField($data['entity_test_mulrev_property_data']['description__value'], 'description'); $this->assertField($data['entity_test_mulrev_property_data']['description__format'], 'description'); $this->assertUriField($data['entity_test_mulrev_property_data']['homepage']); $this->assertField($data['entity_test_mulrev_property_data']['homepage'], 'homepage'); $this->assertEntityReferenceField($data['entity_test_mulrev_property_data']['user_id']); $this->assertField($data['entity_test_mulrev_property_data']['user_id'], 'user_id'); $relationship = $data['entity_test_mulrev_property_data']['user_id']['relationship']; $this->assertEquals('users_field_data', $relationship['base']); $this->assertEquals('uid', $relationship['base field']); // Check the property data fields. $this->assertNumericField($data['entity_test_mulrev_property_revision']['id']); $this->assertField($data['entity_test_mulrev_property_revision']['id'], 'id'); $this->assertLanguageField($data['entity_test_mulrev_property_revision']['langcode']); $this->assertField($data['entity_test_mulrev_property_revision']['langcode'], 'langcode'); $this->assertEquals('Translation language', $data['entity_test_mulrev_property_revision']['langcode']['title']); $this->assertStringField($data['entity_test_mulrev_property_revision']['name']); $this->assertField($data['entity_test_mulrev_property_revision']['name'], 'name'); $this->assertLongTextField($data['entity_test_mulrev_property_revision'], 'description'); $this->assertField($data['entity_test_mulrev_property_revision']['description__value'], 'description'); $this->assertField($data['entity_test_mulrev_property_revision']['description__format'], 'description'); $this->assertUriField($data['entity_test_mulrev_property_revision']['homepage']); $this->assertField($data['entity_test_mulrev_property_revision']['homepage'], 'homepage'); $this->assertEntityReferenceField($data['entity_test_mulrev_property_revision']['user_id']); $this->assertField($data['entity_test_mulrev_property_revision']['user_id'], 'user_id'); $relationship = $data['entity_test_mulrev_property_revision']['user_id']['relationship']; $this->assertEquals('users_field_data', $relationship['base']); $this->assertEquals('uid', $relationship['base field']); }
/** * Tests fields on the revision table. */ public function testRevisionTableFields() { $entity_type = $this->baseEntityType->set('base_table', 'entity_test_mulrev')->set('revision_table', 'entity_test_mulrev_revision')->set('data_table', 'entity_test_mulrev_property_data')->set('revision_data_table', 'entity_test_mulrev_property_revision')->set('id', 'entity_test_mulrev'); $base_field_definitions = $this->setupBaseFields(EntityTestMulRev::baseFieldDefinitions($this->baseEntityType)); $this->entityManager->expects($this->once())->method('getBaseFieldDefinitions')->with('entity_test_mulrev')->willReturn($base_field_definitions); $this->viewsData->setEntityType($entity_type); // Setup the table mapping. $table_mapping = $this->getMock('Drupal\\Core\\Entity\\Sql\\TableMappingInterface'); $table_mapping->expects($this->any())->method('getTableNames')->willReturn(['entity_test_mulrev', 'entity_test_mulrev_revision', 'entity_test_mulrev_property_data', 'entity_test_mulrev_property_revision']); $table_mapping->expects($this->any())->method('getColumnNames')->willReturnMap([['id', ['value' => 'id']], ['uuid', ['value' => 'uuid']], ['type', ['value' => 'type']], ['langcode', ['value' => 'langcode']], ['name', ['value' => 'name']], ['description', ['value' => 'description__value', 'format' => 'description__format']], ['homepage', ['value' => 'homepage']], ['user_id', ['target_id' => 'user_id']], ['revision_id', ['value' => 'id']]]); $table_mapping->expects($this->any())->method('getFieldNames')->willReturnMap([['entity_test_mulrev', ['id', 'revision_id', 'uuid', 'type']], ['entity_test_mulrev_revision', ['id', 'revision_id', 'langcode']], ['entity_test_mulrev_property_data', ['id', 'revision_id', 'langcode', 'name', 'description', 'homepage', 'user_id']], ['entity_test_mulrev_property_revision', ['id', 'revision_id', 'langcode', 'name', 'description', 'homepage', 'user_id']]]); $this->entityStorage->expects($this->once())->method('getTableMapping')->willReturn($table_mapping); $this->setupFieldStorageDefinition(); $data = $this->viewsData->getViewsData(); // Check the base fields. $this->assertNumericField($data['entity_test_mulrev']['id']); $this->assertNumericField($data['entity_test_mulrev']['revision_id']); $this->assertUuidField($data['entity_test_mulrev']['uuid']); $this->assertStringField($data['entity_test_mulrev']['type']); // Also ensure that field_data only fields don't appear on the base table. $this->assertFalse(isset($data['entity_test_mulrev']['name'])); $this->assertFalse(isset($data['entity_test_mul']['description'])); $this->assertFalse(isset($data['entity_test_mul']['description__value'])); $this->assertFalse(isset($data['entity_test_mul']['description__format'])); $this->assertFalse(isset($data['entity_test_mul']['homepage'])); $this->assertFalse(isset($data['entity_test_mulrev']['langcode'])); $this->assertFalse(isset($data['entity_test_mulrev']['user_id'])); // Check the revision fields. $this->assertNumericField($data['entity_test_mulrev_revision']['id']); $this->assertNumericField($data['entity_test_mulrev_revision']['revision_id']); $this->assertLanguageField($data['entity_test_mulrev_revision']['langcode']); $this->assertEquals('Original language', $data['entity_test_mulrev_revision']['langcode']['title']); // Also ensure that field_data only fields don't appear on the revision table. $this->assertFalse(isset($data['entity_test_mulrev_revision']['name'])); $this->assertFalse(isset($data['entity_test_mulrev_revision']['description'])); $this->assertFalse(isset($data['entity_test_mulrev_revision']['description__value'])); $this->assertFalse(isset($data['entity_test_mulrev_revision']['description__format'])); $this->assertFalse(isset($data['entity_test_mulrev_revision']['homepage'])); $this->assertFalse(isset($data['entity_test_mulrev_revision']['user_id'])); // Check the data fields. $this->assertNumericField($data['entity_test_mulrev_property_data']['id']); $this->assertLanguageField($data['entity_test_mulrev_property_data']['langcode']); $this->assertStringField($data['entity_test_mulrev_property_data']['name']); $this->assertLongTextField($data['entity_test_mulrev_property_data'], 'description'); $this->assertUriField($data['entity_test_mulrev_property_data']['homepage']); $this->assertEntityReferenceField($data['entity_test_mulrev_property_data']['user_id']); $relationship = $data['entity_test_mulrev_property_data']['user_id']['relationship']; $this->assertEquals('users', $relationship['base']); $this->assertEquals('uid', $relationship['base field']); // Check the property data fields. $this->assertNumericField($data['entity_test_mulrev_property_revision']['id']); $this->assertLanguageField($data['entity_test_mulrev_property_revision']['langcode']); $this->assertEquals('Translation language', $data['entity_test_mulrev_property_revision']['langcode']['title']); $this->assertStringField($data['entity_test_mulrev_property_revision']['name']); $this->assertLongTextField($data['entity_test_mulrev_property_revision'], 'description'); $this->assertUriField($data['entity_test_mulrev_property_revision']['homepage']); $this->assertEntityReferenceField($data['entity_test_mulrev_property_revision']['user_id']); $relationship = $data['entity_test_mulrev_property_revision']['user_id']['relationship']; $this->assertEquals('users', $relationship['base']); $this->assertEquals('uid', $relationship['base field']); }
/** * Tests that an entity revision is upcasted in the correct language. */ public function testEntityRevisionParamConverter() { // Create a test entity with multiple revisions and translations for them. $entity = EntityTestMulRev::create(['name' => 'default revision - en', 'user_id' => $this->webUser, 'language' => 'en']); $entity->addTranslation('de', ['name' => 'default revision - de']); $entity->save(); $forward_revision = \Drupal::entityTypeManager()->getStorage('entity_test_mulrev')->loadUnchanged($entity->id()); $forward_revision->setNewRevision(); $forward_revision->isDefaultRevision(FALSE); $forward_revision->name = 'forward revision - en'; $forward_revision->save(); $forward_revision_translation = $forward_revision->getTranslation('de'); $forward_revision_translation->name = 'forward revision - de'; $forward_revision_translation->save(); // Check that the entity revision is upcasted in the correct language. $revision_url = 'entity_test_mulrev/' . $entity->id() . '/revision/' . $forward_revision->getRevisionId() . '/view'; $this->drupalGet($revision_url); $this->assertText('forward revision - en'); $this->assertNoText('forward revision - de'); $this->drupalGet('de/' . $revision_url); $this->assertText('forward revision - de'); $this->assertNoText('forward revision - en'); }
/** * Tests multi column non revisionable base field for revisionable entity. */ public function testMultiColumnNonRevisionableBaseField() { \Drupal::state()->set('entity_test.multi_column', TRUE); \Drupal::entityDefinitionUpdateManager()->applyUpdates(); // Refresh the storage. $this->mulRev = $this->entityManager->getStorage('entity_test_mulrev'); $user1 = $this->createUser(); // Create a test entity. $entity = EntityTestMulRev::create(['name' => $this->randomString(), 'user_id' => $user1->id(), 'language' => 'en', 'non_rev_field' => 'Huron', 'description' => ['shape' => 'shape', 'color' => 'color']]); $entity->save(); $entity = $this->mulRev->loadUnchanged($entity->id()); $expected = [['shape' => 'shape', 'color' => 'color']]; $this->assertEquals('Huron', $entity->get('non_rev_field')->value, 'Huron found on entity 1'); $this->assertEquals($expected, $entity->description->getValue()); }
/** * Test case sensitive and in-sensitive query conditions. */ public function testCaseSensitivity() { $bundle = $this->randomMachineName(); $field_storage = FieldStorageConfig::create(array('field_name' => 'field_ci', 'entity_type' => 'entity_test_mulrev', 'type' => 'string', 'cardinality' => 1, 'translatable' => FALSE, 'settings' => array('case_sensitive' => FALSE))); $field_storage->save(); FieldConfig::create(array('field_storage' => $field_storage, 'bundle' => $bundle))->save(); $field_storage = FieldStorageConfig::create(array('field_name' => 'field_cs', 'entity_type' => 'entity_test_mulrev', 'type' => 'string', 'cardinality' => 1, 'translatable' => FALSE, 'settings' => array('case_sensitive' => TRUE))); $field_storage->save(); FieldConfig::create(array('field_storage' => $field_storage, 'bundle' => $bundle))->save(); $fixtures = array(); for ($i = 0; $i < 2; $i++) { // If the last 4 of the string are all numbers, then there is no // difference between upper and lowercase and the case sensitive CONTAINS // test will fail. Ensure that can not happen by appending a non-numeric // character. See https://www.drupal.org/node/2397297. $string = $this->randomMachineName(7) . 'a'; $fixtures[] = array('original' => $string, 'uppercase' => Unicode::strtoupper($string), 'lowercase' => Unicode::strtolower($string)); } EntityTestMulRev::create(array('type' => $bundle, 'name' => $this->randomMachineName(), 'langcode' => 'en', 'field_ci' => $fixtures[0]['uppercase'] . $fixtures[1]['lowercase'], 'field_cs' => $fixtures[0]['uppercase'] . $fixtures[1]['lowercase']))->save(); // Check the case insensitive field, = operator. $result = \Drupal::entityQuery('entity_test_mulrev')->condition('field_ci', $fixtures[0]['lowercase'] . $fixtures[1]['lowercase'])->execute(); $this->assertIdentical(count($result), 1, 'Case insensitive, lowercase'); $result = \Drupal::entityQuery('entity_test_mulrev')->condition('field_ci', $fixtures[0]['uppercase'] . $fixtures[1]['uppercase'])->execute(); $this->assertIdentical(count($result), 1, 'Case insensitive, uppercase'); $result = \Drupal::entityQuery('entity_test_mulrev')->condition('field_ci', $fixtures[0]['uppercase'] . $fixtures[1]['lowercase'])->execute(); $this->assertIdentical(count($result), 1, 'Case insensitive, mixed.'); // Check the case sensitive field, = operator. $result = \Drupal::entityQuery('entity_test_mulrev')->condition('field_cs', $fixtures[0]['lowercase'] . $fixtures[1]['lowercase'])->execute(); $this->assertIdentical(count($result), 0, 'Case sensitive, lowercase.'); $result = \Drupal::entityQuery('entity_test_mulrev')->condition('field_cs', $fixtures[0]['uppercase'] . $fixtures[1]['uppercase'])->execute(); $this->assertIdentical(count($result), 0, 'Case sensitive, uppercase.'); $result = \Drupal::entityQuery('entity_test_mulrev')->condition('field_cs', $fixtures[0]['uppercase'] . $fixtures[1]['lowercase'])->execute(); $this->assertIdentical(count($result), 1, 'Case sensitive, exact match.'); // Check the case insensitive field, STARTS_WITH operator. $result = \Drupal::entityQuery('entity_test_mulrev')->condition('field_ci', $fixtures[0]['lowercase'], 'STARTS_WITH')->execute(); $this->assertIdentical(count($result), 1, 'Case sensitive, lowercase.'); $result = \Drupal::entityQuery('entity_test_mulrev')->condition('field_ci', $fixtures[0]['uppercase'], 'STARTS_WITH')->execute(); $this->assertIdentical(count($result), 1, 'Case sensitive, exact match.'); // Check the case sensitive field, STARTS_WITH operator. $result = \Drupal::entityQuery('entity_test_mulrev')->condition('field_cs', $fixtures[0]['lowercase'], 'STARTS_WITH')->execute(); $this->assertIdentical(count($result), 0, 'Case sensitive, lowercase.'); $result = \Drupal::entityQuery('entity_test_mulrev')->condition('field_cs', $fixtures[0]['uppercase'], 'STARTS_WITH')->execute(); $this->assertIdentical(count($result), 1, 'Case sensitive, exact match.'); // Check the case insensitive field, ENDS_WITH operator. $result = \Drupal::entityQuery('entity_test_mulrev')->condition('field_ci', $fixtures[1]['lowercase'], 'ENDS_WITH')->execute(); $this->assertIdentical(count($result), 1, 'Case sensitive, lowercase.'); $result = \Drupal::entityQuery('entity_test_mulrev')->condition('field_ci', $fixtures[1]['uppercase'], 'ENDS_WITH')->execute(); $this->assertIdentical(count($result), 1, 'Case sensitive, exact match.'); // Check the case sensitive field, ENDS_WITH operator. $result = \Drupal::entityQuery('entity_test_mulrev')->condition('field_cs', $fixtures[1]['lowercase'], 'ENDS_WITH')->execute(); $this->assertIdentical(count($result), 1, 'Case sensitive, lowercase.'); $result = \Drupal::entityQuery('entity_test_mulrev')->condition('field_cs', $fixtures[1]['uppercase'], 'ENDS_WITH')->execute(); $this->assertIdentical(count($result), 0, 'Case sensitive, exact match.'); // Check the case insensitive field, CONTAINS operator, use the inner 8 // characters of the uppercase and lowercase strings. $result = \Drupal::entityQuery('entity_test_mulrev')->condition('field_ci', Unicode::substr($fixtures[0]['uppercase'] . $fixtures[1]['lowercase'], 4, 8), 'CONTAINS')->execute(); $this->assertIdentical(count($result), 1, 'Case sensitive, lowercase.'); $result = \Drupal::entityQuery('entity_test_mulrev')->condition('field_ci', Unicode::strtolower(Unicode::substr($fixtures[0]['uppercase'] . $fixtures[1]['lowercase'], 4, 8)), 'CONTAINS')->execute(); $this->assertIdentical(count($result), 1, 'Case sensitive, exact match.'); // Check the case sensitive field, CONTAINS operator. $result = \Drupal::entityQuery('entity_test_mulrev')->condition('field_cs', Unicode::substr($fixtures[0]['uppercase'] . $fixtures[1]['lowercase'], 4, 8), 'CONTAINS')->execute(); $this->assertIdentical(count($result), 1, 'Case sensitive, lowercase.'); $result = \Drupal::entityQuery('entity_test_mulrev')->condition('field_cs', Unicode::strtolower(Unicode::substr($fixtures[0]['uppercase'] . $fixtures[1]['lowercase'], 4, 8)), 'CONTAINS')->execute(); $this->assertIdentical(count($result), 0, 'Case sensitive, exact match.'); }