Index: drupal_test_case.php =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/simpletest/drupal_test_case.php,v retrieving revision 1.34 diff -u -r1.34 drupal_test_case.php --- drupal_test_case.php 23 Sep 2007 08:35:23 -0000 1.34 +++ drupal_test_case.php 25 Dec 2007 17:23:32 -0000 @@ -13,6 +13,7 @@ var $_cleanupVariables = array(); var $_cleanupUsers = array(); var $_cleanupRoles = array(); + var $_cleanupNodes = array(); function DrupalTestCase($label = NULL) { @@ -24,6 +25,66 @@ } $this->WebTestCase($label); } + + /** + * Creates a node based on default settings. + * + * @param settings An array of settings to change from the defaults, in the form of 'body' => 'Hello, world!' + * @param user A user to use as the author for the node. + * @param node A node object if applicable to work with. + */ + function drupalCreateNode($settings = array(), $user = NULL, $node = NULL) { + $modifying = FALSE; + if (!is_object($node)) { + $modifying = TRUE; + $node = (object)$node; + } + if ($user === NULL) { + global $user; + } + + // Populate defaults array + $defaults = array(); + $defaults['body'] = $this->randomName(32 + $i); + $defaults['title'] = $this->randomName(8 + $i); + $defaults['teaser'] = $node->body; + $defaults['comment'] = '2'; + $defaults['changed'] = time(); + // If we already have a node, we use the original node's created time, and this + if ($modifying) { + $defaults['created'] = $defaults->time; + } + else { + $defaults['created'] = $node->changed; + } + $defaults['date'] = format_date($node->created, 'custom', 'Y-m-d H:i:s O'); + $defaults['format'] = '1'; + $defaults['moderate'] = 0; + $defaults['name'] = $user->name; + $defaults['uid'] = $user->uid; + $defaults['promote'] = 0; + $defaults['revision'] = 1; + $defaults['log'] = ''; + $defaults['status'] = '1'; + $defaults['sticky'] = 0; + $defaults['type'] = 'page'; + $defaults['revisions'] = NULL; + $defaults['taxonomy'] = NULL; + + foreach (array('body', 'title', 'teaser', 'comment', 'created', 'date', 'format', 'moderate', 'name', 'uid', 'promote', 'revision', 'log', 'status', 'sticky', 'type', 'revisions', 'changed', 'taxonomy') as $property) { + // If the settings array has a corresponding value, use it. + if (isset($settings[$property])) { + $node->$property = $settings[$property]; + } + else { + $node->$property = $defaults[$property]; + } + } + node_save($node); + $this->_cleanupNodes[] = $node->nid; + return $node; + } + /** * @abstract Checks to see if we need to send @@ -384,6 +445,10 @@ $this->assertTrue(TRUE, "$type: $msg"); } } + + foreach ($this->_cleanupNodes as $nid) { + node_delete($node); + } parent::tearDown(); }