Issue #1757232 by peximo, plach: Improve test coverage for the entity form controller.
parent
12100bab40
commit
3d2aad9e0a
|
@ -0,0 +1,79 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Definition of Drupal\system\Tests\Entity\EntityFormTest.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Drupal\system\Tests\Entity;
|
||||||
|
|
||||||
|
use Drupal\simpletest\WebTestBase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the Entity Form Controller.
|
||||||
|
*/
|
||||||
|
class EntityFormTest extends WebTestBase {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modules to enable.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public static $modules = array('entity_test', 'language');
|
||||||
|
|
||||||
|
public static function getInfo() {
|
||||||
|
return array(
|
||||||
|
'name' => 'Entity form',
|
||||||
|
'description' => 'Tests the entity form controller.',
|
||||||
|
'group' => 'Entity API',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function setUp() {
|
||||||
|
parent::setUp();
|
||||||
|
$web_user = $this->drupalCreateUser(array('administer entity_test content'));
|
||||||
|
$this->drupalLogin($web_user);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests basic form CRUD functionality.
|
||||||
|
*/
|
||||||
|
function testFormCRUD() {
|
||||||
|
$langcode = LANGUAGE_NOT_SPECIFIED;
|
||||||
|
$name1 = $this->randomName(8);
|
||||||
|
$name2 = $this->randomName(8);
|
||||||
|
|
||||||
|
$edit = array(
|
||||||
|
'name' => $name1,
|
||||||
|
'uid' => mt_rand(0, 128),
|
||||||
|
"field_test_text[$langcode][0][value]" => $this->randomName(16),
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->drupalPost('entity-test/add', $edit, t('Save'));
|
||||||
|
$entity = $this->loadEntityByName($name1);
|
||||||
|
$this->assertTrue($entity, t('Entity found in the database.'));
|
||||||
|
|
||||||
|
$edit['name'] = $name2;
|
||||||
|
$this->drupalPost('entity-test/manage/' . $entity->id() . '/edit', $edit, t('Save'));
|
||||||
|
$entity = $this->loadEntityByName($name1);
|
||||||
|
$this->assertFalse($entity, 'The entity has been modified.');
|
||||||
|
$entity = $this->loadEntityByName($name2);
|
||||||
|
$this->assertTrue($entity, 'Modified entity found in the database.');
|
||||||
|
$this->assertNotEqual($entity->get('name'), $name1, 'The entity name has been modified.');
|
||||||
|
|
||||||
|
$this->drupalPost('entity-test/manage/' . $entity->id() . '/edit', array(), t('Delete'));
|
||||||
|
$entity = $this->loadEntityByName($name2);
|
||||||
|
$this->assertFalse($entity, t('Entity not found in the database.'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads a test entity by name always resetting the storage controller cache.
|
||||||
|
*/
|
||||||
|
protected function loadEntityByName($name) {
|
||||||
|
$entity_type = 'entity_test';
|
||||||
|
// Always load the entity from the database to ensure that changes are
|
||||||
|
// correctly picked up.
|
||||||
|
entity_get_controller($entity_type)->resetCache();
|
||||||
|
return current(entity_load_multiple_by_properties($entity_type, array('name' => $name)));
|
||||||
|
}
|
||||||
|
}
|
|
@ -13,6 +13,9 @@ function entity_test_entity_info() {
|
||||||
'label' => t('Test entity'),
|
'label' => t('Test entity'),
|
||||||
'entity class' => 'Drupal\entity_test\EntityTest',
|
'entity class' => 'Drupal\entity_test\EntityTest',
|
||||||
'controller class' => 'Drupal\entity_test\EntityTestStorageController',
|
'controller class' => 'Drupal\entity_test\EntityTestStorageController',
|
||||||
|
'form controller class' => array(
|
||||||
|
'default' => 'Drupal\entity_test\EntityTestFormController',
|
||||||
|
),
|
||||||
'base table' => 'entity_test',
|
'base table' => 'entity_test',
|
||||||
'fieldable' => TRUE,
|
'fieldable' => TRUE,
|
||||||
'entity keys' => array(
|
'entity keys' => array(
|
||||||
|
@ -27,6 +30,65 @@ function entity_test_entity_info() {
|
||||||
return $items;
|
return $items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implements hook_permission().
|
||||||
|
*/
|
||||||
|
function entity_test_permission() {
|
||||||
|
$permissions = array(
|
||||||
|
'administer entity_test content' => array(
|
||||||
|
'title' => t('Administer entity_test content'),
|
||||||
|
'description' => t('Manage entity_test content'),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
return $permissions;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implements hook_menu().
|
||||||
|
*/
|
||||||
|
function entity_test_menu() {
|
||||||
|
$items = array();
|
||||||
|
|
||||||
|
$items['entity-test/add'] = array(
|
||||||
|
'title' => 'Add an entity_test',
|
||||||
|
'page callback' => 'entity_test_add',
|
||||||
|
'access arguments' => array('administer entity_test content'),
|
||||||
|
'type' => MENU_NORMAL_ITEM,
|
||||||
|
);
|
||||||
|
|
||||||
|
$items['entity-test/manage/%entity_test'] = array(
|
||||||
|
'title' => 'Edit test entity',
|
||||||
|
'page callback' => 'entity_test_edit',
|
||||||
|
'page arguments' => array(2),
|
||||||
|
'access arguments' => array('administer entity_test content'),
|
||||||
|
'type' => MENU_NORMAL_ITEM,
|
||||||
|
);
|
||||||
|
|
||||||
|
$items['entity-test/manage/%entity_test/edit'] = array(
|
||||||
|
'title' => 'Edit',
|
||||||
|
'type' => MENU_DEFAULT_LOCAL_TASK,
|
||||||
|
);
|
||||||
|
|
||||||
|
return $items;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Menu callback: displays the 'Add new entity_test' form.
|
||||||
|
*/
|
||||||
|
function entity_test_add() {
|
||||||
|
drupal_set_title(t('Create an entity_test'));
|
||||||
|
$entity = entity_create('entity_test', array());
|
||||||
|
return entity_get_form($entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Menu callback: displays the 'Edit existing entity_test' form.
|
||||||
|
*/
|
||||||
|
function entity_test_edit($entity) {
|
||||||
|
drupal_set_title(t('entity_test @id', array('@id' => $entity->id)), PASS_THROUGH);
|
||||||
|
return entity_get_form($entity);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads a test entity.
|
* Loads a test entity.
|
||||||
*
|
*
|
||||||
|
|
|
@ -0,0 +1,95 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @file
|
||||||
|
* Definition of Drupal\entity_test\EntityTestFormController.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Drupal\entity_test;
|
||||||
|
|
||||||
|
use Drupal\Core\Entity\EntityInterface;
|
||||||
|
use Drupal\Core\Entity\EntityFormController;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Form controller for the test entity edit forms.
|
||||||
|
*/
|
||||||
|
class EntityTestFormController extends EntityFormController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overrides Drupal\Core\Entity\EntityFormController::form().
|
||||||
|
*/
|
||||||
|
public function form(array $form, array &$form_state, EntityInterface $entity) {
|
||||||
|
$form = parent::form($form, $form_state, $entity);
|
||||||
|
|
||||||
|
$langcode = $this->getFormLangcode($form_state);
|
||||||
|
$name = $entity->get('name', $langcode);
|
||||||
|
$uid = $entity->get('uid', $langcode);
|
||||||
|
|
||||||
|
$form['name'] = array(
|
||||||
|
'#type' => 'textfield',
|
||||||
|
'#title' => t('Name'),
|
||||||
|
'#default_value' => !empty($name) ? $name : '',
|
||||||
|
'#size' => 60,
|
||||||
|
'#maxlength' => 128,
|
||||||
|
'#required' => TRUE,
|
||||||
|
'#weight' => -10,
|
||||||
|
);
|
||||||
|
|
||||||
|
$form['uid'] = array(
|
||||||
|
'#type' => 'textfield',
|
||||||
|
'#title' => 'UID',
|
||||||
|
'#default_value' => !empty($uid) ? $uid : '',
|
||||||
|
'#size' => 60,
|
||||||
|
'#maxlength' => 128,
|
||||||
|
'#required' => TRUE,
|
||||||
|
'#weight' => -10,
|
||||||
|
);
|
||||||
|
|
||||||
|
return $form;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overrides Drupal\Core\Entity\EntityFormController::submit().
|
||||||
|
*/
|
||||||
|
public function submit(array $form, array &$form_state) {
|
||||||
|
$entity = parent::submit($form, $form_state);
|
||||||
|
$langcode = $this->getFormLangcode($form_state);
|
||||||
|
|
||||||
|
// Updates multilingual properties.
|
||||||
|
foreach (array('name', 'uid') as $property) {
|
||||||
|
$entity->set($property, $form_state['values'][$property], $langcode);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overrides Drupal\Core\Entity\EntityFormController::save().
|
||||||
|
*/
|
||||||
|
public function save(array $form, array &$form_state) {
|
||||||
|
$entity = $this->getEntity($form_state);
|
||||||
|
$is_new = $entity->isNew();
|
||||||
|
$entity->save();
|
||||||
|
|
||||||
|
$message = $is_new ? t('entity_test @id has been created.', array('@id' => $entity->id())) : t('entity_test @id has been updated.', array('@id' => $entity->id()));
|
||||||
|
drupal_set_message($message);
|
||||||
|
|
||||||
|
if ($entity->id()) {
|
||||||
|
$form_state['redirect'] = 'entity-test/manage/' . $entity->id() . '/edit';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Error on save.
|
||||||
|
drupal_set_message(t('The entity could not be saved.'), 'error');
|
||||||
|
$form_state['rebuild'] = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Overrides Drupal\Core\Entity\EntityFormController::delete().
|
||||||
|
*/
|
||||||
|
public function delete(array $form, array &$form_state) {
|
||||||
|
$entity = $this->getEntity($form_state);
|
||||||
|
$entity->delete();
|
||||||
|
drupal_set_message(t('entity_test @id has been deleted.', array('@id' => $entity->id())));
|
||||||
|
$form_state['redirect'] = '<front>';
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue