danielebarchiesi@4: 'Bundle Inherit', danielebarchiesi@4: 'description' => 'Ensure that the Bundle Inherit module works properly', danielebarchiesi@4: 'group' => 'Bundle Inherit' danielebarchiesi@4: ); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: public function setUp($modules = array()) { danielebarchiesi@4: $modules += array('bundle_inherit', 'node'); danielebarchiesi@4: parent::setUp($modules); danielebarchiesi@4: danielebarchiesi@4: // Add new content type (for example we'll create node type, but generaly, danielebarchiesi@4: // kind of the entity type does not matter here) danielebarchiesi@4: $this->parentType = $this->drupalCreateContentType(); danielebarchiesi@4: $this->childType = $this->drupalCreateContentType(); danielebarchiesi@4: // Create custom field danielebarchiesi@4: do { danielebarchiesi@4: $field_name = drupal_strtolower($this->randomName()); danielebarchiesi@4: } while (field_info_field($field_name)); danielebarchiesi@4: // Add 5 custom fields danielebarchiesi@4: for ($i = 0; $i < 5; $i++) { danielebarchiesi@4: do { danielebarchiesi@4: $field_name = drupal_strtolower($this->randomName()); danielebarchiesi@4: } while (field_info_field($field_name)); danielebarchiesi@4: $this->customFields[$field_name]['field'] = field_create_field(array( danielebarchiesi@4: 'field_name' => $field_name, danielebarchiesi@4: 'type' => 'text' danielebarchiesi@4: )); danielebarchiesi@4: field_create_instance(array( danielebarchiesi@4: 'field_name' => $field_name, danielebarchiesi@4: 'entity_type' => 'node', danielebarchiesi@4: 'bundle' => $this->parentType->type danielebarchiesi@4: )); danielebarchiesi@4: $this->customFields[$field_name]['instance'] = field_info_instance('node', $field_name, $this->parentType->type); danielebarchiesi@4: } danielebarchiesi@4: do { danielebarchiesi@4: $field_name = drupal_strtolower($this->randomName()); danielebarchiesi@4: } while (field_info_field($field_name)); danielebarchiesi@4: $this->extraField['field'] = field_create_field(array( danielebarchiesi@4: 'field_name' => $field_name, danielebarchiesi@4: 'type' => 'text' danielebarchiesi@4: )); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: public function inheritPerform() { danielebarchiesi@4: // When implementing inheritance on node entity type we should delete body danielebarchiesi@4: // field first. danielebarchiesi@4: if ($body_field_instance = field_info_instance('node', 'body', $this->childType->type)) { danielebarchiesi@4: field_delete_instance($body_field_instance); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: // Perform inherit operations danielebarchiesi@4: bundle_inherit_perform('node', $this->childType->type, $this->parentType->type, TRUE); danielebarchiesi@4: danielebarchiesi@4: $type_inherited = db_query('SELECT 1 FROM {bundle_hierarchy} WHERE entity_type = :entity_type AND bundle = :bundle AND bundle_parent = :bundle_parent', array(':entity_type' => 'node', ':bundle' => $this->childType->type, ':bundle_parent' => $this->parentType->type))->fetchField(); danielebarchiesi@4: $this->assertTrue($type_inherited, t('Type was inherited.')); danielebarchiesi@4: danielebarchiesi@4: // Check if fields instances was succesfuly inherited danielebarchiesi@4: $n = 1; danielebarchiesi@4: foreach ($this->customFields as $field_name => $field) { danielebarchiesi@4: $parent_type_field_instance = $this->customFields[$field_name]['instance']; danielebarchiesi@4: $child_type_field_instance = field_info_instance('node', $field_name, $this->childType->type); danielebarchiesi@4: $this->assertTrue($this->compareInstances($parent_type_field_instance, $child_type_field_instance), t('Child field instance %n is equal to the parent one', array('%n' => $n++))); danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: public function fieldInstanceCreate() { danielebarchiesi@4: field_create_instance(array( danielebarchiesi@4: 'field_name' => $this->extraField['field']['field_name'], danielebarchiesi@4: 'entity_type' => 'node', danielebarchiesi@4: 'bundle' => $this->parentType->type danielebarchiesi@4: )); danielebarchiesi@4: $this->extraField['instance'] = field_info_instance('node', $this->extraField['field']['field_name'], $this->parentType->type); danielebarchiesi@4: $parent_type_field_instance = $this->extraField['instance']; $child_type_field_instance = field_info_instance('node', $this->extraField['field']['field_name'], $this->childType->type); danielebarchiesi@4: $this->assertTrue($this->compareInstances($parent_type_field_instance, $child_type_field_instance), t('The field instance attached to the parent type was succesfuly attached to the child type and equal to the parent one.')); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: public function fieldInstanceUpdate() { danielebarchiesi@4: $this->extraField['instance']['label'] = $this->randomString(); danielebarchiesi@4: $this->extraField['instance']['required'] = TRUE; danielebarchiesi@4: field_update_instance($this->extraField['instance']); danielebarchiesi@4: $child_type_field_instance = field_info_instance('node', $this->extraField['field']['field_name'], $this->childType->type); danielebarchiesi@4: $this->assertTrue($this->compareInstances($this->extraField['instance'], $child_type_field_instance), t('Child type field instance is equal to the parent one after updating.')); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: public function fieldInstanceDelete() { danielebarchiesi@4: field_delete_instance($this->extraField['instance']); danielebarchiesi@4: $child_type_field_instance = field_info_instance('node', $this->extraField['field']['field_name'], $this->childType->type); danielebarchiesi@4: $this->assertTrue($child_type_field_instance['locked'] == FALSE, t('Child type field instance was succesfuly deleted when the parent type one was deleted.')); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Run complex CRUD test based on node entity type. danielebarchiesi@4: */ danielebarchiesi@4: public function testCRUD() { danielebarchiesi@4: $this->inheritPerform(); danielebarchiesi@4: $this->fieldInstanceCreate(); danielebarchiesi@4: $this->fieldInstanceUpdate(); danielebarchiesi@4: $this->fieldInstanceDelete(); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Helper function to compare two instances indeferent of their 'id', danielebarchiesi@4: * 'bundle'and 'locked' fields. danielebarchiesi@4: * @param $a danielebarchiesi@4: * First instance. danielebarchiesi@4: * @param $b danielebarchiesi@4: * Second instance. danielebarchiesi@4: * @return danielebarchiesi@4: * TRUE if $a and $b are equal. danielebarchiesi@4: */ danielebarchiesi@4: private function compareInstances($a, $b) { danielebarchiesi@4: unset($a['id'], $a['bundle'], $a['locked']); danielebarchiesi@4: unset($b['id'], $b['bundle'], $b['locked']); danielebarchiesi@4: return $a == $b; danielebarchiesi@4: } danielebarchiesi@4: }