Example #1
0
 /**
  * Tests field loading works correctly by inserting directly in the tables.
  */
 function testFieldLoad()
 {
     $entity_type = $bundle = 'entity_test_rev';
     $storage = $this->container->get('entity.manager')->getStorage($entity_type);
     $columns = array('bundle', 'deleted', 'entity_id', 'revision_id', 'delta', 'langcode', $this->tableMapping->getFieldColumnName($this->fieldStorage, 'value'));
     // Create an entity with four revisions.
     $revision_ids = array();
     $entity = $this->container->get('entity_type.manager')->getStorage($entity_type)->create();
     $entity->save();
     $revision_ids[] = $entity->getRevisionId();
     for ($i = 0; $i < 4; $i++) {
         $entity->setNewRevision();
         $entity->save();
         $revision_ids[] = $entity->getRevisionId();
     }
     // Generate values and insert them directly in the storage tables.
     $values = array();
     $query = db_insert($this->revisionTable)->fields($columns);
     foreach ($revision_ids as $revision_id) {
         // Put one value too many.
         for ($delta = 0; $delta <= $this->fieldCardinality; $delta++) {
             $value = mt_rand(1, 127);
             $values[$revision_id][] = $value;
             $query->values(array($bundle, 0, $entity->id(), $revision_id, $delta, $entity->language()->getId(), $value));
         }
         $query->execute();
     }
     $query = db_insert($this->table)->fields($columns);
     foreach ($values[$revision_id] as $delta => $value) {
         $query->values(array($bundle, 0, $entity->id(), $revision_id, $delta, $entity->language()->getId(), $value));
     }
     $query->execute();
     // Load every revision and check the values.
     foreach ($revision_ids as $revision_id) {
         $entity = $storage->loadRevision($revision_id);
         foreach ($values[$revision_id] as $delta => $value) {
             if ($delta < $this->fieldCardinality) {
                 $this->assertEqual($entity->{$this->fieldName}[$delta]->value, $value);
             } else {
                 $this->assertFalse(array_key_exists($delta, $entity->{$this->fieldName}));
             }
         }
     }
     // Load the "current revision" and check the values.
     $entity = $storage->load($entity->id());
     foreach ($values[$revision_id] as $delta => $value) {
         if ($delta < $this->fieldCardinality) {
             $this->assertEqual($entity->{$this->fieldName}[$delta]->value, $value);
         } else {
             $this->assertFalse(array_key_exists($delta, $entity->{$this->fieldName}));
         }
     }
     // Add a translation in an unavailable language code and verify it is not
     // loaded.
     $unavailable_langcode = 'xx';
     $values = array($bundle, 0, $entity->id(), $entity->getRevisionId(), 0, $unavailable_langcode, mt_rand(1, 127));
     db_insert($this->table)->fields($columns)->values($values)->execute();
     db_insert($this->revisionTable)->fields($columns)->values($values)->execute();
     $entity = $storage->load($entity->id());
     $this->assertFalse(array_key_exists($unavailable_langcode, $entity->{$this->fieldName}));
 }
 /**
  * Tests DefaultTableMapping::getFieldColumnName() with invalid parameters.
  *
  * @param bool $base_field
  *   Flag indicating whether the field should be treated as a base or bundle
  *   field.
  * @param string[] $columns
  *   An array of available field column names.
  * @param string $column
  *   The name of the column to be processed.
  *
  * @expectedException \Drupal\Core\Entity\Sql\SqlContentEntityStorageException
  * @expectedExceptionMessage Column information not available for the 'test' field.
  *
  * @covers ::getFieldColumnName
  *
  * @dataProvider providerTestGetFieldColumnName
  */
 public function testGetFieldColumnNameInvalid($base_field, $columns, $column)
 {
     $definitions['test'] = $this->setUpDefinition('test', $columns, $base_field);
     // Mark field storage definition as custom storage.
     $definitions['test']->expects($this->any())->method('hasCustomStorage')->willReturn(TRUE);
     $table_mapping = new DefaultTableMapping($this->entityType, $definitions);
     $table_mapping->getFieldColumnName($definitions['test'], $column);
 }