| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 | <?php/** * @file * Tests for blog.module. */class BlogTestCase extends DrupalWebTestCase {  protected $big_user;  protected $own_user;  protected $any_user;  public static function getInfo() {    return array(      'name' => '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');  }}
 |