'Node API example functionality', 'description' => 'Demonstrate Node API hooks that allow altering a node. These are the former hook_nodeapi.', 'group' => 'Examples', ); } /** * Enables modules and create user with specific permissions. */ public function setUp() { parent::setUp('nodeapi_example'); // Create admin user. This module has no access control, so we can use a // trusted user. Revision access and revert permissions are required too. $this->webUser = $this->drupalCreateUser(array( // Required to set revision checkbox. 'administer nodes', 'administer content types', 'bypass node access', 'view revisions', 'revert revisions', )); // Login the admin user. $this->drupalLogin($this->webUser); } /** * Log user in, creates an example node, and uses the rating system. */ public function testNodeExampleBasic() { // Login the user. $this->drupalLogin($this->webUser); // Create custom content type. $content_type = $this->drupalCreateContentType(); $type = $content_type->type; // Go to edit the settings of this content type. $this->drupalGet('admin/structure/types/manage/' . $type); $this->assertResponse(200); // Check if the new Rating options appear in the settings page. $this->assertText(t('NodeAPI Example Rating'), 'Rating options found in content type.'); $this->assertFieldByName('nodeapi_example_node_type', 1, 'Rating is Disabled by default.'); // Disable the rating for this content type: 0 for Disabled, 1 for Enabled. $content_settings = array( 'nodeapi_example_node_type' => 0, ); $this->drupalPost('admin/structure/types/manage/' . $type, $content_settings, t('Save content type')); $this->assertResponse(200); $this->assertRaw(' has been updated.', 'Settings modified successfully for content type.'); // Create an example node. $langcode = LANGUAGE_NONE; $edit = array( "title" => $this->randomName(), ); $this->drupalPost('node/add/' . $type, $edit, t('Save')); $this->assertResponse(200); // Check that the rating is not shown, as we have not yet enabled it. $this->assertNoRaw('Rating: ', 'Extended rating information is not shown.'); // Save current current url (we are viewing the new node). $node_url = $this->getUrl(); // Enable the rating for this content type: 0 for Disabled, 1 for Enabled. $content_settings = array( 'nodeapi_example_node_type' => TRUE, ); $this->drupalPost('admin/structure/types/manage/' . $type, $content_settings, t('Save content type')); $this->assertResponse(200); $this->assertRaw(' has been updated.', 'Settings modified successfully for content type.'); // Check previously create node. It should be not rated. $this->drupalGet($node_url); $this->assertResponse(200); $this->assertRaw(t('Rating: %rating', array('%rating' => t('Unrated'))), 'Content is not rated.'); // Rate the content, 4 is for "Good" $rate = array( 'nodeapi_example_rating' => 4, ); $this->drupalPost($node_url . '/edit', $rate, t('Save')); $this->assertResponse(200); // Check that content has been rated. $this->assertRaw(t('Rating: %rating', array('%rating' => t('Good'))), 'Content is successfully rated.'); } /** * Test revisions of ratings. * * Logs user in, creates an example node, and tests rating functionality with * a node using revisions. */ public function testNodeExampleRevision() { // Login the user. $this->drupalLogin($this->webUser); // Create custom content type. $content_type = $this->drupalCreateContentType(); $type = $content_type->type; // Go to edit the settings of this content type. $this->drupalGet('admin/structure/types/manage/' . $type); $this->assertResponse(200); // Check if the new Rating options appear in the settings page. $this->assertText(t('NodeAPI Example Rating'), 'Rating options found in content type.'); $this->assertFieldByName('nodeapi_example_node_type', 1, 'Rating is Disabled by default.'); // Disable the rating for this content type: 0 for Disabled, 1 for Enabled. $content_settings = array( 'nodeapi_example_node_type' => 0, ); $this->drupalPost('admin/structure/types/manage/' . $type, $content_settings, t('Save content type')); $this->assertResponse(200); $this->assertRaw(' has been updated.', 'Settings modified successfully for content type.'); // Create an example node. $langcode = LANGUAGE_NONE; $edit = array( "title" => $this->randomName(), ); $this->drupalPost('node/add/' . $type, $edit, t('Save')); $this->assertResponse(200); // Check that the rating is not shown, as we have not yet enabled it. $this->assertNoRaw('Rating: ', 'Extended rating information is not shown.'); // Save current current url (we are viewing the new node). $node_url = $this->getUrl(); // Enable the rating for this content type: 0 for Disabled, 1 for Enabled. $content_settings = array( 'nodeapi_example_node_type' => TRUE, ); $this->drupalPost('admin/structure/types/manage/' . $type, $content_settings, t('Save content type')); $this->assertResponse(200); $this->assertRaw(' has been updated.', 'Settings modified successfully for content type.'); // Check previously create node. It should be not rated. $this->drupalGet($node_url); $this->assertResponse(200); $this->assertRaw(t('Rating: %rating', array('%rating' => t('Unrated'))), 'Content is not rated.'); // Rate the content, 4 is for "Good" $rate = array( 'nodeapi_example_rating' => 4, ); $this->drupalPost($node_url . '/edit', $rate, t('Save')); $this->assertResponse(200); // Check that content has been rated. $this->assertRaw(t('Rating: %rating', array('%rating' => t('Good'))), 'Content is successfully rated.'); // Rate the content to poor using a new revision, 1 is for "Poor" $rate = array( 'nodeapi_example_rating' => 1, 'revision' => 1, ); $this->drupalPost($node_url . '/edit', $rate, t('Save')); $this->assertResponse(200); // Check that content has been rated. $this->assertRaw(t('Rating: %rating', array('%rating' => t('Poor'))), 'Content is successfully rated.'); // Now switch back to previous revision of the node. $this->drupalGet($node_url . '/revisions'); // There is only a revision, so it must work just clicking the first link.. $this->clickLink('revert'); $revert_form = $this->getUrl(); $this->drupalPost($revert_form, array(), t('Revert')); // Go back to the node page. $this->drupalGet($node_url); $this->assertResponse(200); // Check that content has been rated. $this->assertRaw(t('Rating: %rating', array('%rating' => t('Good'))), 'Content rating matches reverted revision.'); } }