nodeapi_example.test in Examples for Developers 7
Same filename and directory in other branches
Test case for Testing the node API example module.
This file contains the test cases to check if module is performing as expected.
File
nodeapi_example/nodeapi_example.testView source
<?php
/**
* @file
* Test case for Testing the node API example module.
*
* This file contains the test cases to check if module is performing as
* expected.
*/
/**
* Functional tests for the NodeAPI Example module.
*
* @ingroup nodeapi_example
*/
class NodeApiExampleTestCase extends DrupalWebTestCase {
/**
* User object to perform site browsing
* @var object
*/
protected $webUser;
/**
* Content type to attach the rating system
* @var string
*/
protected $type;
/**
* {@inheritdoc}
*/
public static function getInfo() {
return array(
'name' => '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: <em>', '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: <em>', '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.');
}
}
Classes
Name | Description |
---|---|
NodeApiExampleTestCase | Functional tests for the NodeAPI Example module. |