123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- <?php
- class CerCrudTest extends DrupalWebTestCase {
- public static function getInfo() {
- return array(
- 'name' => 'CRUD',
- 'group' => 'Corresponding Entity Reference',
- 'description' => 'Tests basic CER functionality.',
- );
- }
- public function setUp() {
- parent::setUp('field', 'field_sql_storage', 'ctools', 'entityreference', 'cer');
- field_create_field(array(
- 'field_name' => 'field_user',
- 'type' => 'entityreference',
- 'cardinality' => -1,
- 'settings' => array(
- 'target_type' => 'user',
- ),
- ));
- field_create_field(array(
- 'field_name' => 'field_node',
- 'type' => 'entityreference',
- 'cardinality' => -1,
- 'settings' => array(
- 'target_type' => 'node',
- ),
- ));
- field_create_instance(array(
- 'field_name' => 'field_user',
- 'entity_type' => 'node',
- 'bundle' => 'page',
- ));
- field_create_instance(array(
- 'field_name' => 'field_node',
- 'entity_type' => 'user',
- 'bundle' => 'user',
- ));
- db_insert('cer')->fields(array(
- 'entity_types_content_fields' => 'node*page*field_user*user*user*field_node',
- 'enabled' => TRUE,
- ))->execute();
- }
- public function testImplicitReferenceCreation() {
- $uid = $this->drupalCreateUser()->uid;
-
- $referrers = array();
- for ($i = 0; $i < 5; $i++) {
- $referrers[] = $this->drupalCreateNode(array(
- 'type' => 'page',
- 'field_user' => array(
- 'und' => array(
- array('target_id' => $uid),
- ),
- ),
- ))->nid;
- }
- $references = array();
- foreach (user_load($uid, TRUE)->field_node['und'] as $reference) {
- $references[] = $reference['target_id'];
- }
- $this->assertFalse(array_diff($referrers, $references), 'Creating 5 referrers to a single entity creates 5 corresponding references on that entity.', 'CER');
- }
- public function testDuplicateReferencePrevention() {
- $uid = $this->drupalCreateUser()->uid;
- $this->drupalCreateNode(array(
- 'type' => 'page',
- 'field_user' => array(
- 'und' => array(
- array('target_id' => $uid),
- array('target_id' => $uid),
- ),
- ),
- ));
- $account = user_load($uid, TRUE);
- $this->assertEqual(sizeof($account->field_node['und']), 1, 'Creating two references to an entity from a single referrer creates one corresponding reference.', 'CER');
- }
- public function testExplicitReferenceCreation() {
- $uid = $this->drupalCreateNode()->uid;
- $node = $this->drupalCreateNode(array('type' => 'page'));
- $node->field_user['und'][0]['target_id'] = $uid;
- node_save($node);
- $account = user_load($uid, TRUE);
- $this->assertEqual($account->field_node['und'][0]['target_id'], $node->nid, 'Creating an explicit reference between to unrelated entities creates a corresponding reference.', 'CER');
- }
- public function testExplicitDereference() {
- $uid = $this->drupalCreateUser()->uid;
- $nid = $this->drupalCreateNode(array(
- 'type' => 'page',
- 'field_user' => array(
- 'und' => array(
- array('target_id' => $uid),
- ),
- ),
- ))->nid;
- $account = user_load($uid, TRUE);
- $account->field_node = array();
- user_save($account);
- $node = node_load($nid, NULL, TRUE);
- $this->assertFalse($node->field_user, 'Explicitly clearing a reference from the referenced entity clears the corresponding reference on the referrer.', 'CER');
- }
- public function testReferrerDeletion() {
- $uid = $this->drupalCreateUser()->uid;
-
- $referrers = array();
- for ($i = 0; $i < 5; $i++) {
- $referrers[] = $this->drupalCreateNode(array(
- 'type' => 'page',
- 'field_user' => array(
- 'und' => array(
- array('target_id' => $uid),
- ),
- ),
- ))->nid;
- }
- node_delete($referrers[0]);
- $references = array();
- foreach (user_load($uid, TRUE)->field_node['und'] as $reference) {
- $references[] = $reference['target_id'];
- }
- $this->assertFalse(in_array($referrers[0], $references), 'Deleting a referrer clears corresponding reference on the referenced entity.', 'CER');
- }
- public function testReferencedEntityDeletion() {
- $uid = $this->drupalCreateUser()->uid;
- $referrers = array();
- for ($i = 0; $i < 5; $i++) {
- $referrers[] = $this->drupalCreateNode(array(
- 'type' => 'page',
- 'field_user' => array(
- 'und' => array(
- array('target_id' => $uid),
- ),
- ),
- ))->nid;
- }
- user_delete($uid);
- $cleared = 0;
- foreach ($referrers as $nid) {
- $node = node_load($nid, NULL, TRUE);
- $cleared += (int) empty($node->field_user);
- }
- $this->assertEqual($cleared, sizeof($referrers), 'Deleting a referenced entity clears all references to it.', 'CER');
- }
- }
|