|
1 <?php |
|
2 |
|
3 /** |
|
4 * @file |
|
5 * Tests for blog.module. |
|
6 */ |
|
7 |
|
8 class BlogTestCase extends DrupalWebTestCase { |
|
9 protected $big_user; |
|
10 protected $own_user; |
|
11 protected $any_user; |
|
12 |
|
13 public static function getInfo() { |
|
14 return array( |
|
15 'name' => 'Blog functionality', |
|
16 'description' => 'Create, view, edit, delete, and change blog entries and verify its consistency in the database.', |
|
17 'group' => 'Blog', |
|
18 ); |
|
19 } |
|
20 |
|
21 /** |
|
22 * Enable modules and create users with specific permissions. |
|
23 */ |
|
24 function setUp() { |
|
25 parent::setUp('blog'); |
|
26 // Create users. |
|
27 $this->big_user = $this->drupalCreateUser(array('administer blocks')); |
|
28 $this->own_user = $this->drupalCreateUser(array('create blog content', 'edit own blog content', 'delete own blog content')); |
|
29 $this->any_user = $this->drupalCreateUser(array('create blog content', 'edit any blog content', 'delete any blog content', 'access administration pages')); |
|
30 } |
|
31 |
|
32 /** |
|
33 * Confirm that the "You are not allowed to post a new blog entry." message |
|
34 * shows up if a user submitted blog entries, has been denied that |
|
35 * permission, and goes to the blog page. |
|
36 */ |
|
37 function testUnprivilegedUser() { |
|
38 // Create a blog node for a user with no blog permissions. |
|
39 $this->drupalCreateNode(array('type' => 'blog', 'uid' => $this->big_user->uid)); |
|
40 |
|
41 $this->drupalLogin($this->big_user); |
|
42 |
|
43 $this->drupalGet('blog/' . $this->big_user->uid); |
|
44 $this->assertResponse(200); |
|
45 $this->assertTitle(t("@name's blog", array('@name' => format_username($this->big_user))) . ' | Drupal', 'Blog title was displayed'); |
|
46 $this->assertText(t('You are not allowed to post a new blog entry.'), 'No new entries can be posted without the right permission'); |
|
47 } |
|
48 |
|
49 /** |
|
50 * View the blog of a user with no blog entries as another user. |
|
51 */ |
|
52 function testBlogPageNoEntries() { |
|
53 $this->drupalLogin($this->big_user); |
|
54 |
|
55 $this->drupalGet('blog/' . $this->own_user->uid); |
|
56 $this->assertResponse(200); |
|
57 $this->assertTitle(t("@name's blog", array('@name' => format_username($this->own_user))) . ' | Drupal', 'Blog title was displayed'); |
|
58 $this->assertText(t('@author has not created any blog entries.', array('@author' => format_username($this->own_user))), 'Users blog displayed with no entries'); |
|
59 } |
|
60 |
|
61 /** |
|
62 * Login users, create blog nodes, and test blog functionality through the admin and user interfaces. |
|
63 */ |
|
64 function testBlog() { |
|
65 // Login the admin user. |
|
66 $this->drupalLogin($this->big_user); |
|
67 // Enable the recent blog block. |
|
68 $edit = array(); |
|
69 $edit['blocks[blog_recent][region]'] = 'sidebar_second'; |
|
70 $this->drupalPost('admin/structure/block', $edit, t('Save blocks')); |
|
71 $this->assertResponse(200); |
|
72 // Verify ability to change number of recent blog posts in block. |
|
73 $edit = array(); |
|
74 $edit['blog_block_count'] = 5; |
|
75 $this->drupalPost('admin/structure/block/manage/blog/recent/configure', $edit, t('Save block')); |
|
76 $this->assertEqual(variable_get('blog_block_count', 10), 5, 'Number of recent blog posts changed.'); |
|
77 |
|
78 // Do basic tests for each user. |
|
79 $this->doBasicTests($this->any_user, TRUE); |
|
80 $this->doBasicTests($this->own_user, FALSE); |
|
81 |
|
82 // Create another blog node for the any blog user. |
|
83 $node = $this->drupalCreateNode(array('type' => 'blog', 'uid' => $this->any_user->uid)); |
|
84 // Verify the own blog user only has access to the blog view node. |
|
85 $this->verifyBlogs($this->any_user, $node, FALSE, 403); |
|
86 |
|
87 // Create another blog node for the own blog user. |
|
88 $node = $this->drupalCreateNode(array('type' => 'blog', 'uid' => $this->own_user->uid)); |
|
89 // Login the any blog user. |
|
90 $this->drupalLogin($this->any_user); |
|
91 // Verify the any blog user has access to all the blog nodes. |
|
92 $this->verifyBlogs($this->own_user, $node, TRUE); |
|
93 } |
|
94 |
|
95 /** |
|
96 * Run basic tests on the indicated user. |
|
97 * |
|
98 * @param object $user |
|
99 * The logged in user. |
|
100 * @param boolean $admin |
|
101 * User has 'access administration pages' privilege. |
|
102 */ |
|
103 private function doBasicTests($user, $admin) { |
|
104 // Login the user. |
|
105 $this->drupalLogin($user); |
|
106 // Create blog node. |
|
107 $node = $this->drupalCreateNode(array('type' => 'blog')); |
|
108 // Verify the user has access to all the blog nodes. |
|
109 $this->verifyBlogs($user, $node, $admin); |
|
110 // Create one more node to test the blog page with more than one node |
|
111 $this->drupalCreateNode(array('type' => 'blog', 'uid' => $user->uid)); |
|
112 // Verify the blog links are displayed. |
|
113 $this->verifyBlogLinks($user); |
|
114 } |
|
115 |
|
116 /** |
|
117 * Verify the logged in user has the desired access to the various blog nodes. |
|
118 * |
|
119 * @param object $node_user |
|
120 * The user who creates the node. |
|
121 * @param object $node |
|
122 * A node object. |
|
123 * @param boolean $admin |
|
124 * User has 'access administration pages' privilege. |
|
125 * @param integer $response |
|
126 * HTTP response code. |
|
127 */ |
|
128 private function verifyBlogs($node_user, $node, $admin, $response = 200) { |
|
129 $response2 = ($admin) ? 200 : 403; |
|
130 |
|
131 // View blog help node. |
|
132 $this->drupalGet('admin/help/blog'); |
|
133 $this->assertResponse($response2); |
|
134 if ($response2 == 200) { |
|
135 $this->assertTitle(t('Blog | Drupal'), 'Blog help node was displayed'); |
|
136 $this->assertText(t('Blog'), 'Blog help node was displayed'); |
|
137 } |
|
138 |
|
139 // Verify the blog block was displayed. |
|
140 $this->drupalGet(''); |
|
141 $this->assertResponse(200); |
|
142 $this->assertText(t('Recent blog posts'), 'Blog block was displayed'); |
|
143 |
|
144 // View blog node. |
|
145 $this->drupalGet('node/' . $node->nid); |
|
146 $this->assertResponse(200); |
|
147 $this->assertTitle($node->title . ' | Drupal', 'Blog node was displayed'); |
|
148 $breadcrumb = array( |
|
149 l(t('Home'), NULL), |
|
150 l(t('Blogs'), 'blog'), |
|
151 l(t("!name's blog", array('!name' => format_username($node_user))), 'blog/' . $node_user->uid), |
|
152 ); |
|
153 $this->assertRaw(theme('breadcrumb', array('breadcrumb' => $breadcrumb)), 'Breadcrumbs were displayed'); |
|
154 |
|
155 // View blog edit node. |
|
156 $this->drupalGet('node/' . $node->nid . '/edit'); |
|
157 $this->assertResponse($response); |
|
158 if ($response == 200) { |
|
159 $this->assertTitle('Edit Blog entry ' . $node->title . ' | Drupal', 'Blog edit node was displayed'); |
|
160 } |
|
161 |
|
162 if ($response == 200) { |
|
163 // Edit blog node. |
|
164 $edit = array(); |
|
165 $langcode = LANGUAGE_NONE; |
|
166 $edit["title"] = 'node/' . $node->nid; |
|
167 $edit["body[$langcode][0][value]"] = $this->randomName(256); |
|
168 $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save')); |
|
169 $this->assertRaw(t('Blog entry %title has been updated.', array('%title' => $edit["title"])), 'Blog node was edited'); |
|
170 |
|
171 // Delete blog node. |
|
172 $this->drupalPost('node/' . $node->nid . '/delete', array(), t('Delete')); |
|
173 $this->assertResponse($response); |
|
174 $this->assertRaw(t('Blog entry %title has been deleted.', array('%title' => $edit["title"])), 'Blog node was deleted'); |
|
175 } |
|
176 } |
|
177 |
|
178 /** |
|
179 * Verify the blog links are displayed to the logged in user. |
|
180 * |
|
181 * @param object $user |
|
182 * The logged in user. |
|
183 */ |
|
184 private function verifyBlogLinks($user) { |
|
185 // Confirm blog entries link exists on the user page. |
|
186 $this->drupalGet('user/' . $user->uid); |
|
187 $this->assertResponse(200); |
|
188 $this->assertText(t('View recent blog entries'), 'View recent blog entries link was displayed'); |
|
189 |
|
190 // Confirm the recent blog entries link goes to the user's blog page. |
|
191 $this->clickLink('View recent blog entries'); |
|
192 $this->assertTitle(t("@name's blog | Drupal", array('@name' => format_username($user))), 'View recent blog entries link target was correct'); |
|
193 |
|
194 // Confirm a blog page was displayed. |
|
195 $this->drupalGet('blog'); |
|
196 $this->assertResponse(200); |
|
197 $this->assertTitle('Blogs | Drupal', 'Blog page was displayed'); |
|
198 $this->assertText(t('Home'), 'Breadcrumbs were displayed'); |
|
199 $this->assertLink(t('Create new blog entry')); |
|
200 |
|
201 // Confirm a blog page was displayed per user. |
|
202 $this->drupalGet('blog/' . $user->uid); |
|
203 $this->assertTitle(t("@name's blog | Drupal", array('@name' => format_username($user))), 'User blog node was displayed'); |
|
204 |
|
205 // Confirm a blog feed was displayed. |
|
206 $this->drupalGet('blog/feed'); |
|
207 $this->assertTitle(t('Drupal blogs'), 'Blog feed was displayed'); |
|
208 |
|
209 // Confirm a blog feed was displayed per user. |
|
210 $this->drupalGet('blog/' . $user->uid . '/feed'); |
|
211 $this->assertTitle(t("@name's blog", array('@name' => format_username($user))), 'User blog feed was displayed'); |
|
212 } |
|
213 } |