View source
<?php
class TitleFieldReplacementTestCase extends DrupalWebTestCase {
public static function getInfo() {
return array(
'name' => 'Field replacement',
'description' => 'Test field replacement.',
'group' => 'Title',
'dependencies' => array(
'entity',
),
);
}
protected $profile = 'testing';
public function setUp(array $modules = array()) {
$modules[] = 'comment';
$modules[] = 'field_test';
$modules[] = 'taxonomy';
$modules[] = 'entity';
$modules[] = 'title';
$modules[] = 'title_test';
parent::setUp($modules);
}
public function testFieldReplacementWorkflow() {
$info = entity_get_info('test_entity');
$label_key = $info['entity keys']['label'];
$field_name = $label_key . '_field';
title_field_replacement_toggle('test_entity', 'test_bundle', $label_key);
$i = 0;
$entity = field_test_create_stub_entity(FALSE, FALSE);
while ($i++ <= 1) {
title_test_entity_save($entity);
$query = db_select('test_entity', 'te');
$query
->addJoin('INNER', 'field_data_' . $field_name, 'f', 'te.ftid = f.entity_id');
$record = $query
->fields('te')
->fields('f')
->condition('ftid', $entity->ftid)
->execute()
->fetch();
$phase = $entity->is_new ? 'insert' : 'update';
$this
->assertIdentical($record->{$label_key}, $record->{$field_name . '_value'}, t('Field synchronization is correctly performed on %phase.', array(
'%phase' => $phase,
)));
unset($entity->is_new);
}
while (($label = $this
->randomName()) == $entity->{$label_key}) {
}
db_update('test_entity')
->fields(array(
$label_key => $label,
))
->execute();
$record = db_select('test_entity', 'te')
->fields('te')
->condition('ftid', $entity->ftid)
->execute()
->fetch();
$this
->assertNotIdentical($record->{$label_key}, $entity->{$label_key}, t('Entity label has been changed.'));
cache_clear_all('*', 'cache_field');
drupal_static_reset();
$entity = title_test_entity_test_load($entity);
title_test_phase_check('after_load', $entity);
entity_view('test_entity', array(
$entity->ftid => $entity,
));
foreach (title_test_phase_store() as $phase => $value) {
$this
->assertTrue($value, t('Field synchronization is correctly performed on %phase.', array(
'%phase' => $phase,
)));
}
if (isset($info['label callback'])) {
$label = $this
->randomName();
$entity->{$field_name}[LANGUAGE_NONE][0]['value'] = $label;
$this
->assertIdentical(entity_label('test_entity', $entity), $label, t('entity_label() returns the expected value.'));
}
}
public function testFieldReplacementUI() {
$permissions = array(
'access administration pages',
'view the administration theme',
'administer content types',
'administer taxonomy',
'administer comments',
'administer fields',
);
$admin_user = $this
->drupalCreateUser($permissions);
$this
->drupalLogin($admin_user);
foreach (entity_get_info() as $entity_type => $entity_info) {
if (!empty($entity_info['field replacement'])) {
foreach ($entity_info['bundles'] as $bundle => $bundle_info) {
if (isset($bundle_info['admin']['path'])) {
$admin_path = _field_ui_bundle_admin_path($entity_type, $bundle) . '/fields';
foreach ($entity_info['field replacement'] as $legacy_field => $info) {
$path = $admin_path . '/replace/' . $legacy_field;
$xpath = '//a[@href=:url and text()=:label]';
$args = array(
':url' => url($path),
':label' => t('replace'),
);
$targs = array(
'%legacy_field' => $legacy_field,
'%entity_type' => $entity_type,
'%bundle' => $bundle,
);
$field_name = $info['field']['field_name'];
$this
->drupalGet($admin_path);
$link = $this
->xpath($xpath, $args);
$this
->assertEqual(count($link), 1, t('Replace link found for the field %legacy_field of the bundle %bundle of the entity %entity_type.', $targs));
$this
->drupalPost($path, array(
'enabled' => TRUE,
), t('Save settings'));
_field_info_collate_fields(TRUE);
$link = $this
->xpath($xpath, $args);
$this
->assertTrue(empty($link) && title_field_replacement_enabled($entity_type, $bundle, $legacy_field), t('%legacy_field successfully replaced for the bundle %bundle of the entity %entity_type.', $targs));
$this
->drupalGet($path);
$this
->assertFieldByXPath('//form//input[@name="enabled" and @checked="checked" and @disabled="disabled"]', NULL, t('Field replacement for %legacy_field cannot be disabled unless the replacing field instance is deleted.', array(
'%legacy_field' => $legacy_field,
)));
$this
->drupalPost($path, array(), t('Save settings'));
_field_info_collate_fields(TRUE);
$this
->assertTrue(title_field_replacement_enabled($entity_type, $bundle, $legacy_field), t('Submitting the form does not alter field replacement settings.'));
$this
->drupalPost($admin_path . '/' . $field_name . '/delete', array(), t('Delete'));
$link = $this
->xpath($xpath, $args);
$this
->assertEqual(count($link), 1, t('Replace link found for the field %legacy_field of the bundle %bundle of the entity %entity_type.', $targs));
$this
->drupalGet($path);
$this
->assertFieldByXPath('//form//input[@name="enabled" and not(@checked) and not(@disabled)]', NULL, t('Field replacement for %legacy_field cannot be disabled unless the replacing field instance is deleted.', array(
'%legacy_field' => $legacy_field,
)));
}
}
}
}
}
}
}