Merge branch 'MDL-66374-master' of git://github.com/jleyva/moodle
[moodle.git] / blog / tests / lib_test.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * Unit tests for blog
19  *
20  * @package    core_blog
21  * @category   phpunit
22  * @copyright  2009 Nicolas Connault
23  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24  */
26 defined('MOODLE_INTERNAL') || die();
28 global $CFG;
29 require_once($CFG->dirroot . '/blog/locallib.php');
30 require_once($CFG->dirroot . '/blog/lib.php');
32 /**
33  * Test functions that rely on the DB tables
34  */
35 class core_blog_lib_testcase extends advanced_testcase {
37     private $courseid;
38     private $cmid;
39     private $groupid;
40     private $userid;
41     private $tagid;
42     private $postid;
44     protected function setUp() {
45         global $DB;
46         parent::setUp();
48         $this->resetAfterTest();
50         // Create default course.
51         $course = $this->getDataGenerator()->create_course(array('category' => 1, 'shortname' => 'ANON'));
52         $this->assertNotEmpty($course);
53         $page = $this->getDataGenerator()->create_module('page', array('course' => $course->id));
54         $this->assertNotEmpty($page);
56         // Create default group.
57         $group = new stdClass();
58         $group->courseid = $course->id;
59         $group->name = 'ANON';
60         $group->id = $DB->insert_record('groups', $group);
62         // Create default user.
63         $user = $this->getDataGenerator()->create_user(array(
64                 'username' => 'testuser',
65                 'firstname' => 'Jimmy',
66                 'lastname' => 'Kinnon'
67         ));
69         // Create default tag.
70         $tag = $this->getDataGenerator()->create_tag(array('userid' => $user->id,
71             'rawname' => 'Testtagname', 'isstandard' => 1));
73         // Create default post.
74         $post = new stdClass();
75         $post->userid = $user->id;
76         $post->groupid = $group->id;
77         $post->content = 'test post content text';
78         $post->module = 'blog';
79         $post->id = $DB->insert_record('post', $post);
81         // Grab important ids.
82         $this->courseid = $course->id;
83         $this->cmid = $page->cmid;
84         $this->groupid  = $group->id;
85         $this->userid  = $user->id;
86         $this->tagid  = $tag->id;
87         $this->postid = $post->id;
88     }
91     public function test_overrides() {
92         global $SITE;
94         // Try all the filters at once: Only the entry filter is active.
95         $filters = array('site' => $SITE->id, 'course' => $this->courseid, 'module' => $this->cmid,
96             'group' => $this->groupid, 'user' => $this->userid, 'tag' => $this->tagid, 'entry' => $this->postid);
97         $bloglisting = new blog_listing($filters);
98         $this->assertFalse(array_key_exists('site', $bloglisting->filters));
99         $this->assertFalse(array_key_exists('course', $bloglisting->filters));
100         $this->assertFalse(array_key_exists('module', $bloglisting->filters));
101         $this->assertFalse(array_key_exists('group', $bloglisting->filters));
102         $this->assertFalse(array_key_exists('user', $bloglisting->filters));
103         $this->assertFalse(array_key_exists('tag', $bloglisting->filters));
104         $this->assertTrue(array_key_exists('entry', $bloglisting->filters));
106         // Again, but without the entry filter: This time, the tag, user and module filters are active.
107         $filters = array('site' => $SITE->id, 'course' => $this->courseid, 'module' => $this->cmid,
108             'group' => $this->groupid, 'user' => $this->userid, 'tag' => $this->postid);
109         $bloglisting = new blog_listing($filters);
110         $this->assertFalse(array_key_exists('site', $bloglisting->filters));
111         $this->assertFalse(array_key_exists('course', $bloglisting->filters));
112         $this->assertFalse(array_key_exists('group', $bloglisting->filters));
113         $this->assertTrue(array_key_exists('module', $bloglisting->filters));
114         $this->assertTrue(array_key_exists('user', $bloglisting->filters));
115         $this->assertTrue(array_key_exists('tag', $bloglisting->filters));
117         // We should get the same result by removing the 3 inactive filters: site, course and group.
118         $filters = array('module' => $this->cmid, 'user' => $this->userid, 'tag' => $this->tagid);
119         $bloglisting = new blog_listing($filters);
120         $this->assertFalse(array_key_exists('site', $bloglisting->filters));
121         $this->assertFalse(array_key_exists('course', $bloglisting->filters));
122         $this->assertFalse(array_key_exists('group', $bloglisting->filters));
123         $this->assertTrue(array_key_exists('module', $bloglisting->filters));
124         $this->assertTrue(array_key_exists('user', $bloglisting->filters));
125         $this->assertTrue(array_key_exists('tag', $bloglisting->filters));
127     }
129     // The following series of 'test_blog..' functions correspond to the blog_get_headers() function within blog/lib.php.
130     // Some cases are omitted due to the optional_param variables used.
132     public function test_blog_get_headers_case_1() {
133         global $CFG, $PAGE, $OUTPUT;
134         $blogheaders = blog_get_headers();
135         $this->assertEquals($blogheaders['heading'], get_string('siteblogheading', 'blog'));
136     }
138     public function test_blog_get_headers_case_6() {
139         global $CFG, $PAGE, $OUTPUT;
140         $blogheaders = blog_get_headers($this->courseid, null, $this->userid);
141         $this->assertNotEquals($blogheaders['heading'], '');
142     }
144     public function test_blog_get_headers_case_7() {
145         global $CFG, $PAGE, $OUTPUT;
146         $blogheaders = blog_get_headers(null, $this->groupid);
147         $this->assertNotEquals($blogheaders['heading'], '');
148     }
150     public function test_blog_get_headers_case_10() {
151         global $CFG, $PAGE, $OUTPUT;
152         $blogheaders = blog_get_headers($this->courseid);
153         $this->assertNotEquals($blogheaders['heading'], '');
154     }
156     /**
157      * Tests the core_blog_myprofile_navigation() function.
158      */
159     public function test_core_blog_myprofile_navigation() {
160         global $USER;
162         // Set up the test.
163         $tree = new \core_user\output\myprofile\tree();
164         $this->setAdminUser();
165         $iscurrentuser = true;
166         $course = null;
168         // Enable blogs.
169         set_config('enableblogs', true);
171         // Check the node tree is correct.
172         core_blog_myprofile_navigation($tree, $USER, $iscurrentuser, $course);
173         $reflector = new ReflectionObject($tree);
174         $nodes = $reflector->getProperty('nodes');
175         $nodes->setAccessible(true);
176         $this->assertArrayHasKey('blogs', $nodes->getValue($tree));
177     }
179     /**
180      * Tests the core_blog_myprofile_navigation() function as a guest.
181      */
182     public function test_core_blog_myprofile_navigation_as_guest() {
183         global $USER;
185         // Set up the test.
186         $tree = new \core_user\output\myprofile\tree();
187         $iscurrentuser = false;
188         $course = null;
190         // Set user as guest.
191         $this->setGuestUser();
193         // Check the node tree is correct.
194         core_blog_myprofile_navigation($tree, $USER, $iscurrentuser, $course);
195         $reflector = new ReflectionObject($tree);
196         $nodes = $reflector->getProperty('nodes');
197         $nodes->setAccessible(true);
198         $this->assertArrayNotHasKey('blogs', $nodes->getValue($tree));
199     }
201     /**
202      * Tests the core_blog_myprofile_navigation() function when blogs are disabled.
203      */
204     public function test_core_blog_myprofile_navigation_blogs_disabled() {
205         global $USER;
207         // Set up the test.
208         $tree = new \core_user\output\myprofile\tree();
209         $this->setAdminUser();
210         $iscurrentuser = false;
211         $course = null;
213         // Disable blogs.
214         set_config('enableblogs', false);
216         // Check the node tree is correct.
217         core_blog_myprofile_navigation($tree, $USER, $iscurrentuser, $course);
218         $reflector = new ReflectionObject($tree);
219         $nodes = $reflector->getProperty('nodes');
220         $nodes->setAccessible(true);
221         $this->assertArrayNotHasKey('blogs', $nodes->getValue($tree));
222     }
224     public function test_blog_get_listing_course() {
225         $this->setAdminUser();
226         $coursecontext = context_course::instance($this->courseid);
227         $anothercourse = $this->getDataGenerator()->create_course();
229         // Add blog associations with a course.
230         $blog = new blog_entry($this->postid);
231         $blog->add_association($coursecontext->id);
233         // There is one entry associated with a course.
234         $bloglisting = new blog_listing(array('course' => $this->courseid));
235         $this->assertCount(1, $bloglisting->get_entries());
237         // There is no entry associated with a wrong course.
238         $bloglisting = new blog_listing(array('course' => $anothercourse->id));
239         $this->assertCount(0, $bloglisting->get_entries());
241         // There is no entry associated with a module.
242         $bloglisting = new blog_listing(array('module' => $this->cmid));
243         $this->assertCount(0, $bloglisting->get_entries());
245         // There is one entry associated with a site (id is ignored).
246         $bloglisting = new blog_listing(array('site' => 12345));
247         $this->assertCount(1, $bloglisting->get_entries());
249         // There is one entry associated with course context.
250         $bloglisting = new blog_listing(array('context' => $coursecontext->id));
251         $this->assertCount(1, $bloglisting->get_entries());
252     }
254     public function test_blog_get_listing_module() {
255         $this->setAdminUser();
256         $coursecontext = context_course::instance($this->courseid);
257         $contextmodule = context_module::instance($this->cmid);
258         $anothermodule = $this->getDataGenerator()->create_module('page', array('course' => $this->courseid));
260         // Add blog associations with a course.
261         $blog = new blog_entry($this->postid);
262         $blog->add_association($contextmodule->id);
264         // There is no entry associated with a course.
265         $bloglisting = new blog_listing(array('course' => $this->courseid));
266         $this->assertCount(0, $bloglisting->get_entries());
268         // There is one entry associated with a module.
269         $bloglisting = new blog_listing(array('module' => $this->cmid));
270         $this->assertCount(1, $bloglisting->get_entries());
272         // There is no entry associated with a wrong module.
273         $bloglisting = new blog_listing(array('module' => $anothermodule->cmid));
274         $this->assertCount(0, $bloglisting->get_entries());
276         // There is one entry associated with a site (id is ignored).
277         $bloglisting = new blog_listing(array('site' => 12345));
278         $this->assertCount(1, $bloglisting->get_entries());
280         // There is one entry associated with course context (module is a subcontext of a course).
281         $bloglisting = new blog_listing(array('context' => $coursecontext->id));
282         $this->assertCount(1, $bloglisting->get_entries());
283     }