- Patch #884948 by David_Rothstein: the wrong parameter is sometimes passed in to hook_node_load().
parent
5eaf3e033f
commit
b7459d8eb3
|
@ -3854,7 +3854,10 @@ class NodeController extends DrupalDefaultEntityController {
|
|||
$function($nodes_of_type);
|
||||
}
|
||||
}
|
||||
$this->hookLoadArguments[] = array_keys($typed_nodes);
|
||||
// Besides the list of nodes, pass one additional argument to
|
||||
// hook_node_load(), containing a list of node types that were loaded.
|
||||
$argument = array_keys($typed_nodes);
|
||||
$this->hookLoadArguments = array($argument);
|
||||
parent::attachLoad($nodes, $revision_id);
|
||||
}
|
||||
|
||||
|
|
|
@ -81,6 +81,50 @@ class NodeLoadMultipleUnitTest extends DrupalWebTestCase {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for the hooks invoked during node_load().
|
||||
*/
|
||||
class NodeLoadHooksTestCase extends DrupalWebTestCase {
|
||||
public static function getInfo() {
|
||||
return array(
|
||||
'name' => 'Node load hooks',
|
||||
'description' => 'Test the hooks invoked when a node is being loaded.',
|
||||
'group' => 'Node',
|
||||
);
|
||||
}
|
||||
|
||||
function setUp() {
|
||||
parent::setUp('node_test');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that hook_node_load() is invoked correctly.
|
||||
*/
|
||||
function testHookNodeLoad() {
|
||||
// Create some sample articles and pages.
|
||||
$node1 = $this->drupalCreateNode(array('type' => 'article', 'status' => NODE_PUBLISHED));
|
||||
$node2 = $this->drupalCreateNode(array('type' => 'article', 'status' => NODE_PUBLISHED));
|
||||
$node3 = $this->drupalCreateNode(array('type' => 'article', 'status' => NODE_NOT_PUBLISHED));
|
||||
$node4 = $this->drupalCreateNode(array('type' => 'page', 'status' => NODE_NOT_PUBLISHED));
|
||||
|
||||
// Check that when a set of nodes that only contains articles is loaded,
|
||||
// the properties added to the node by node_test_load_node() correctly
|
||||
// reflect the expected values.
|
||||
$nodes = node_load_multiple(array(), array('status' => NODE_PUBLISHED));
|
||||
$loaded_node = end($nodes);
|
||||
$this->assertEqual($loaded_node->node_test_loaded_nids, array($node1->nid, $node2->nid), t('hook_node_load() received the correct list of node IDs the first time it was called.'));
|
||||
$this->assertEqual($loaded_node->node_test_loaded_types, array('article'), t('hook_node_load() received the correct list of node types the first time it was called.'));
|
||||
|
||||
// Now, as part of the same page request, load a set of nodes that contain
|
||||
// both articles and pages, and make sure the parameters passed to
|
||||
// node_test_node_load() are correctly updated.
|
||||
$nodes = node_load_multiple(array(), array('status' => NODE_NOT_PUBLISHED));
|
||||
$loaded_node = end($nodes);
|
||||
$this->assertEqual($loaded_node->node_test_loaded_nids, array($node3->nid, $node4->nid), t('hook_node_load() received the correct list of node IDs the second time it was called.'));
|
||||
$this->assertEqual($loaded_node->node_test_loaded_types, array('article', 'page'), t('hook_node_load() received the correct list of node types the second time it was called.'));
|
||||
}
|
||||
}
|
||||
|
||||
class NodeRevisionsTestCase extends DrupalWebTestCase {
|
||||
protected $nodes;
|
||||
protected $logs;
|
||||
|
|
|
@ -7,6 +7,22 @@
|
|||
* the Node module.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Implements hook_node_load().
|
||||
*/
|
||||
function node_test_node_load($nodes, $types) {
|
||||
// Add properties to each loaded node which record the parameters that were
|
||||
// passed in to this function, so the tests can check that (a) this hook was
|
||||
// called, and (b) the parameters were what we expected them to be.
|
||||
$nids = array_keys($nodes);
|
||||
ksort($nids);
|
||||
sort($types);
|
||||
foreach ($nodes as $node) {
|
||||
$node->node_test_loaded_nids = $nids;
|
||||
$node->node_test_loaded_types = $types;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements hook_node_view().
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue