'Blog functionality', 'description' => 'Create, view, edit, delete, and change blog entries and verify its consistency in the database.', 'group' => 'Blog', ); } /** * Enable modules and create users with specific permissions. */ function setUp() { parent::setUp('blog'); // Create users. $this->big_user = $this->drupalCreateUser(array('administer blocks')); $this->own_user = $this->drupalCreateUser(array('create blog content', 'edit own blog content', 'delete own blog content')); $this->any_user = $this->drupalCreateUser(array('create blog content', 'edit any blog content', 'delete any blog content', 'access administration pages')); } /** * Confirm that the "You are not allowed to post a new blog entry." message * shows up if a user submitted blog entries, has been denied that * permission, and goes to the blog page. */ function testUnprivilegedUser() { // Create a blog node for a user with no blog permissions. $this->drupalCreateNode(array('type' => 'blog', 'uid' => $this->big_user->uid)); $this->drupalLogin($this->big_user); $this->drupalGet('blog/' . $this->big_user->uid); $this->assertResponse(200); $this->assertTitle(t("@name's blog", array('@name' => format_username($this->big_user))) . ' | Drupal', 'Blog title was displayed'); $this->assertText(t('You are not allowed to post a new blog entry.'), 'No new entries can be posted without the right permission'); } /** * View the blog of a user with no blog entries as another user. */ function testBlogPageNoEntries() { $this->drupalLogin($this->big_user); $this->drupalGet('blog/' . $this->own_user->uid); $this->assertResponse(200); $this->assertTitle(t("@name's blog", array('@name' => format_username($this->own_user))) . ' | Drupal', 'Blog title was displayed'); $this->assertText(t('@author has not created any blog entries.', array('@author' => format_username($this->own_user))), 'Users blog displayed with no entries'); } /** * Login users, create blog nodes, and test blog functionality through the admin and user interfaces. */ function testBlog() { // Login the admin user. $this->drupalLogin($this->big_user); // Enable the recent blog block. $edit = array(); $edit['blocks[blog_recent][region]'] = 'sidebar_second'; $this->drupalPost('admin/structure/block', $edit, t('Save blocks')); $this->assertResponse(200); // Verify ability to change number of recent blog posts in block. $edit = array(); $edit['blog_block_count'] = 5; $this->drupalPost('admin/structure/block/manage/blog/recent/configure', $edit, t('Save block')); $this->assertEqual(variable_get('blog_block_count', 10), 5, 'Number of recent blog posts changed.'); // Do basic tests for each user. $this->doBasicTests($this->any_user, TRUE); $this->doBasicTests($this->own_user, FALSE); // Create another blog node for the any blog user. $node = $this->drupalCreateNode(array('type' => 'blog', 'uid' => $this->any_user->uid)); // Verify the own blog user only has access to the blog view node. $this->verifyBlogs($this->any_user, $node, FALSE, 403); // Create another blog node for the own blog user. $node = $this->drupalCreateNode(array('type' => 'blog', 'uid' => $this->own_user->uid)); // Login the any blog user. $this->drupalLogin($this->any_user); // Verify the any blog user has access to all the blog nodes. $this->verifyBlogs($this->own_user, $node, TRUE); } /** * Run basic tests on the indicated user. * * @param object $user * The logged in user. * @param boolean $admin * User has 'access administration pages' privilege. */ private function doBasicTests($user, $admin) { // Login the user. $this->drupalLogin($user); // Create blog node. $node = $this->drupalCreateNode(array('type' => 'blog')); // Verify the user has access to all the blog nodes. $this->verifyBlogs($user, $node, $admin); // Create one more node to test the blog page with more than one node $this->drupalCreateNode(array('type' => 'blog', 'uid' => $user->uid)); // Verify the blog links are displayed. $this->verifyBlogLinks($user); } /** * Verify the logged in user has the desired access to the various blog nodes. * * @param object $node_user * The user who creates the node. * @param object $node * A node object. * @param boolean $admin * User has 'access administration pages' privilege. * @param integer $response * HTTP response code. */ private function verifyBlogs($node_user, $node, $admin, $response = 200) { $response2 = ($admin) ? 200 : 403; // View blog help node. $this->drupalGet('admin/help/blog'); $this->assertResponse($response2); if ($response2 == 200) { $this->assertTitle(t('Blog | Drupal'), 'Blog help node was displayed'); $this->assertText(t('Blog'), 'Blog help node was displayed'); } // Verify the blog block was displayed. $this->drupalGet(''); $this->assertResponse(200); $this->assertText(t('Recent blog posts'), 'Blog block was displayed'); // View blog node. $this->drupalGet('node/' . $node->nid); $this->assertResponse(200); $this->assertTitle($node->title . ' | Drupal', 'Blog node was displayed'); $breadcrumb = array( l(t('Home'), NULL), l(t('Blogs'), 'blog'), l(t("!name's blog", array('!name' => format_username($node_user))), 'blog/' . $node_user->uid), ); $this->assertRaw(theme('breadcrumb', array('breadcrumb' => $breadcrumb)), 'Breadcrumbs were displayed'); // View blog edit node. $this->drupalGet('node/' . $node->nid . '/edit'); $this->assertResponse($response); if ($response == 200) { $this->assertTitle('Edit Blog entry ' . $node->title . ' | Drupal', 'Blog edit node was displayed'); } if ($response == 200) { // Edit blog node. $edit = array(); $langcode = LANGUAGE_NONE; $edit["title"] = 'node/' . $node->nid; $edit["body[$langcode][0][value]"] = $this->randomName(256); $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save')); $this->assertRaw(t('Blog entry %title has been updated.', array('%title' => $edit["title"])), 'Blog node was edited'); // Delete blog node. $this->drupalPost('node/' . $node->nid . '/delete', array(), t('Delete')); $this->assertResponse($response); $this->assertRaw(t('Blog entry %title has been deleted.', array('%title' => $edit["title"])), 'Blog node was deleted'); } } /** * Verify the blog links are displayed to the logged in user. * * @param object $user * The logged in user. */ private function verifyBlogLinks($user) { // Confirm blog entries link exists on the user page. $this->drupalGet('user/' . $user->uid); $this->assertResponse(200); $this->assertText(t('View recent blog entries'), 'View recent blog entries link was displayed'); // Confirm the recent blog entries link goes to the user's blog page. $this->clickLink('View recent blog entries'); $this->assertTitle(t("@name's blog | Drupal", array('@name' => format_username($user))), 'View recent blog entries link target was correct'); // Confirm a blog page was displayed. $this->drupalGet('blog'); $this->assertResponse(200); $this->assertTitle('Blogs | Drupal', 'Blog page was displayed'); $this->assertText(t('Home'), 'Breadcrumbs were displayed'); $this->assertLink(t('Create new blog entry')); // Confirm a blog page was displayed per user. $this->drupalGet('blog/' . $user->uid); $this->assertTitle(t("@name's blog | Drupal", array('@name' => format_username($user))), 'User blog node was displayed'); // Confirm a blog feed was displayed. $this->drupalGet('blog/feed'); $this->assertTitle(t('Drupal blogs'), 'Blog feed was displayed'); // Confirm a blog feed was displayed per user. $this->drupalGet('blog/' . $user->uid . '/feed'); $this->assertTitle(t("@name's blog", array('@name' => format_username($user))), 'User blog feed was displayed'); } }