[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
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/>. 16 17 /** 18 * Lib tests. 19 * 20 * @package core_competency 21 * @copyright 2015 Frédéric Massart - FMCorz.net 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 defined('MOODLE_INTERNAL') || die(); 26 27 use core_competency\plan; 28 use core_competency\url; 29 use core_competency\user_competency; 30 31 global $CFG; 32 33 /** 34 * Lib testcase. 35 * 36 * @package core_competency 37 * @copyright 2015 Frédéric Massart - FMCorz.net 38 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 39 */ 40 class core_competency_lib_testcase extends advanced_testcase { 41 42 public function test_comment_add_user_competency() { 43 global $DB; 44 $this->resetAfterTest(); 45 $dg = $this->getDataGenerator(); 46 $lpg = $dg->get_plugin_generator('core_competency'); 47 48 $u1 = $dg->create_user(); 49 $u2 = $dg->create_user(); 50 $u3 = $dg->create_user(); 51 $reviewerroleid = $dg->create_role(); 52 assign_capability('moodle/competency:planview', CAP_ALLOW, $reviewerroleid, context_system::instance()->id, true); 53 assign_capability('moodle/competency:usercompetencycomment', CAP_ALLOW, $reviewerroleid, 54 context_system::instance()->id, true); 55 $dg->role_assign($reviewerroleid, $u2->id, context_user::instance($u1->id)); 56 $dg->role_assign($reviewerroleid, $u3->id, context_user::instance($u1->id)); 57 accesslib_clear_all_caches_for_unit_testing(); 58 59 $f1 = $lpg->create_framework(); 60 $c1 = $lpg->create_competency(array('competencyframeworkid' => $f1->get_id())); // In 1 plan. 61 $c2 = $lpg->create_competency(array('competencyframeworkid' => $f1->get_id())); // In 2 plans. 62 $c3 = $lpg->create_competency(array('competencyframeworkid' => $f1->get_id())); // Orphan. 63 64 $p1 = $lpg->create_plan(array('userid' => $u1->id)); 65 $lpg->create_plan_competency(array('planid' => $p1->get_id(), 'competencyid' => $c1->get_id())); 66 $lpg->create_plan_competency(array('planid' => $p1->get_id(), 'competencyid' => $c2->get_id())); 67 $p2 = $lpg->create_plan(array('userid' => $u1->id)); 68 $lpg->create_plan_competency(array('planid' => $p2->get_id(), 'competencyid' => $c2->get_id())); 69 70 $DB->set_field(plan::TABLE, 'timemodified', 1, array('id' => $p1->get_id())); // Make plan 1 appear as old. 71 $p1->read(); 72 73 $uc1 = $lpg->create_user_competency(array('userid' => $u1->id, 'competencyid' => $c1->get_id(), 74 'status' => user_competency::STATUS_IN_REVIEW, 'reviewerid' => $u2->id)); 75 $uc2 = $lpg->create_user_competency(array('userid' => $u1->id, 'competencyid' => $c2->get_id(), 76 'status' => user_competency::STATUS_IN_REVIEW, 'reviewerid' => $u2->id)); 77 $uc3 = $lpg->create_user_competency(array('userid' => $u1->id, 'competencyid' => $c3->get_id(), 78 'status' => user_competency::STATUS_IN_REVIEW, 'reviewerid' => $u2->id)); 79 80 // Post a comment for the user competency being in one plan. The reviewer is messaged. 81 $this->setUser($u1); 82 $comment = $uc1->get_comment_object(); 83 $sink = $this->redirectMessages(); 84 $comment->add('Hello world!'); 85 $messages = $sink->get_messages(); 86 $sink->close(); 87 $this->assertCount(1, $messages); 88 $message = array_pop($messages); 89 90 $expectedurlname = $c1->get_shortname(); 91 $expectedurl = url::user_competency_in_plan($u1->id, $c1->get_id(), $p1->get_id()); 92 $this->assertEquals(core_user::get_noreply_user()->id, $message->useridfrom); 93 $this->assertEquals($u2->id, $message->useridto); 94 $this->assertTrue(strpos($message->fullmessage, 'Hello world!') !== false); 95 $this->assertTrue(strpos($message->fullmessagehtml, 'Hello world!') !== false); 96 $this->assertEquals(FORMAT_MOODLE, $message->fullmessageformat); 97 $this->assertEquals($expectedurl->out(false), $message->contexturl); 98 $this->assertEquals($expectedurlname, $message->contexturlname); 99 100 // Reviewer posts a comment for the user competency being in two plans. Owner is messaged. 101 $this->setUser($u2); 102 $comment = $uc2->get_comment_object(); 103 $sink = $this->redirectMessages(); 104 $comment->add('Hello world!'); 105 $messages = $sink->get_messages(); 106 $sink->close(); 107 $this->assertCount(1, $messages); 108 $message = array_pop($messages); 109 110 $expectedurlname = $c2->get_shortname(); 111 $expectedurl = url::user_competency_in_plan($u1->id, $c2->get_id(), $p2->get_id()); 112 $this->assertEquals(core_user::get_noreply_user()->id, $message->useridfrom); 113 $this->assertEquals($u1->id, $message->useridto); 114 $this->assertTrue(strpos($message->fullmessage, 'Hello world!') !== false); 115 $this->assertTrue(strpos($message->fullmessagehtml, 'Hello world!') !== false); 116 $this->assertEquals(FORMAT_MOODLE, $message->fullmessageformat); 117 $this->assertEquals($expectedurl->out(false), $message->contexturl); 118 $this->assertEquals($expectedurlname, $message->contexturlname); 119 120 // Reviewer posts a comment for the user competency being in no plans. User is messaged. 121 $this->setUser($u2); 122 $comment = $uc3->get_comment_object(); 123 $sink = $this->redirectMessages(); 124 $comment->add('Hello world!'); 125 $messages = $sink->get_messages(); 126 $sink->close(); 127 $this->assertCount(1, $messages); 128 $message = array_pop($messages); 129 130 $expectedurlname = get_string('userplans', 'core_competency'); 131 $expectedurl = url::plans($u1->id); 132 $this->assertEquals(core_user::get_noreply_user()->id, $message->useridfrom); 133 $this->assertEquals($u1->id, $message->useridto); 134 $this->assertTrue(strpos($message->fullmessage, 'Hello world!') !== false); 135 $this->assertTrue(strpos($message->fullmessagehtml, 'Hello world!') !== false); 136 $this->assertEquals(FORMAT_MOODLE, $message->fullmessageformat); 137 $this->assertEquals($expectedurl->out(false), $message->contexturl); 138 $this->assertEquals($expectedurlname, $message->contexturlname); 139 140 // A comment is posted by another user, reviewer and owner are messaged. 141 $this->setUser($u3); 142 $comment = $uc3->get_comment_object(); 143 $sink = $this->redirectMessages(); 144 $comment->add('Hello world!'); 145 $messages = $sink->get_messages(); 146 $sink->close(); 147 $this->assertCount(2, $messages); 148 $message1 = array_shift($messages); 149 $message2 = array_shift($messages); 150 $this->assertEquals(core_user::get_noreply_user()->id, $message->useridfrom); 151 $this->assertEquals($u1->id, $message1->useridto); 152 $this->assertEquals(core_user::get_noreply_user()->id, $message->useridfrom); 153 $this->assertEquals($u2->id, $message2->useridto); 154 155 // A comment is posted in HTML. 156 $this->setUser($u2); 157 $comment = $uc3->get_comment_object(); 158 $sink = $this->redirectMessages(); 159 $comment->add('<em>Hello world!</em>', FORMAT_HTML); 160 $messages = $sink->get_messages(); 161 $sink->close(); 162 $this->assertCount(1, $messages); 163 $message = array_pop($messages); 164 165 $expectedurlname = get_string('userplans', 'core_competency'); 166 $expectedurl = url::plans($u1->id); 167 $this->assertEquals(core_user::get_noreply_user()->id, $message->useridfrom); 168 $this->assertEquals($u1->id, $message->useridto); 169 $this->assertTrue(strpos($message->fullmessage, '<em>Hello world!</em>') !== false); 170 $this->assertTrue(strpos($message->fullmessagehtml, '<em>Hello world!</em>') !== false); 171 $this->assertEquals(FORMAT_HTML, $message->fullmessageformat); 172 $this->assertEquals($expectedurl->out(false), $message->contexturl); 173 $this->assertEquals($expectedurlname, $message->contexturlname); 174 } 175 176 /** 177 * Commenting on a plan. 178 */ 179 public function test_comment_add_plan() { 180 $this->resetAfterTest(); 181 $dg = $this->getDataGenerator(); 182 $lpg = $dg->get_plugin_generator('core_competency'); 183 184 $u1 = $dg->create_user(); 185 $u2 = $dg->create_user(); 186 $u3 = $dg->create_user(); 187 $userroleid = $dg->create_role(); 188 $reviewerroleid = $dg->create_role(); 189 assign_capability('moodle/competency:planviewowndraft', CAP_ALLOW, $userroleid, context_system::instance()->id, true); 190 assign_capability('moodle/competency:planviewown', CAP_ALLOW, $userroleid, context_system::instance()->id, true); 191 assign_capability('moodle/competency:planviewdraft', CAP_ALLOW, $reviewerroleid, context_system::instance()->id, true); 192 assign_capability('moodle/competency:planmanage', CAP_ALLOW, $reviewerroleid, context_system::instance()->id, true); 193 assign_capability('moodle/competency:plancomment', CAP_ALLOW, $reviewerroleid, context_system::instance()->id, true); 194 $dg->role_assign($userroleid, $u1->id, context_user::instance($u1->id)); 195 $dg->role_assign($reviewerroleid, $u2->id, context_user::instance($u1->id)); 196 $dg->role_assign($reviewerroleid, $u3->id, context_system::instance()); 197 accesslib_clear_all_caches_for_unit_testing(); 198 199 $p1 = $lpg->create_plan(array('userid' => $u1->id)); 200 201 // Post a comment in own plan, no reviewer. Nobody is messaged. 202 $this->setUser($u1); 203 $comment = $p1->get_comment_object(); 204 $sink = $this->redirectMessages(); 205 $comment->add('Hello world!'); 206 $messages = $sink->get_messages(); 207 $sink->close(); 208 $this->assertCount(0, $messages); 209 210 // Post a comment in plan as someone else, no reviewer. The owner is messages. 211 $this->setUser($u3); 212 $comment = $p1->get_comment_object(); 213 $sink = $this->redirectMessages(); 214 $comment->add('Hello world!'); 215 $messages = $sink->get_messages(); 216 $sink->close(); 217 $this->assertCount(1, $messages); 218 $message = array_pop($messages); 219 $this->assertEquals(core_user::get_noreply_user()->id, $message->useridfrom); 220 $this->assertEquals($u1->id, $message->useridto); 221 222 // Post a comment in a plan with reviewer. The reviewer is messaged. 223 $p1->set_reviewerid($u2->id); 224 $p1->update(); 225 $this->setUser($u1); 226 $comment = $p1->get_comment_object(); 227 $sink = $this->redirectMessages(); 228 $comment->add('Hello world!'); 229 $messages = $sink->get_messages(); 230 $sink->close(); 231 $this->assertCount(1, $messages); 232 $message = array_pop($messages); 233 $this->assertEquals(core_user::get_noreply_user()->id, $message->useridfrom); 234 $this->assertEquals($u2->id, $message->useridto); 235 236 // Post a comment as reviewer in a plan being reviewed. The owner is messaged. 237 $p1->set_reviewerid($u2->id); 238 $p1->update(); 239 $this->setUser($u2); 240 $comment = $p1->get_comment_object(); 241 $sink = $this->redirectMessages(); 242 $comment->add('Hello world!'); 243 $messages = $sink->get_messages(); 244 $sink->close(); 245 $this->assertCount(1, $messages); 246 $message = array_pop($messages); 247 $this->assertEquals(core_user::get_noreply_user()->id, $message->useridfrom); 248 $this->assertEquals($u1->id, $message->useridto); 249 250 // Post a comment as someone else in a plan being reviewed. The owner and reviewer are messaged. 251 $p1->set_reviewerid($u2->id); 252 $p1->update(); 253 $this->setUser($u3); 254 $comment = $p1->get_comment_object(); 255 $sink = $this->redirectMessages(); 256 $comment->add('Hello world!'); 257 $messages = $sink->get_messages(); 258 $sink->close(); 259 $this->assertCount(2, $messages); 260 $message1 = array_shift($messages); 261 $message2 = array_shift($messages); 262 $this->assertEquals(core_user::get_noreply_user()->id, $message1->useridfrom); 263 $this->assertEquals($u1->id, $message1->useridto); 264 $this->assertEquals(core_user::get_noreply_user()->id, $message2->useridfrom); 265 $this->assertEquals($u2->id, $message2->useridto); 266 267 $p1->set_reviewerid(null); 268 $p1->update(); 269 270 // Test message content. 271 $this->setUser($u3); 272 $comment = $p1->get_comment_object(); 273 $sink = $this->redirectMessages(); 274 $comment->add('Hello world!'); 275 $messages = $sink->get_messages(); 276 $sink->close(); 277 $this->assertCount(1, $messages); 278 $message = array_pop($messages); 279 280 $expectedurlname = $p1->get_name(); 281 $expectedurl = url::plan($p1->get_id()); 282 $this->assertTrue(strpos($message->fullmessage, 'Hello world!') !== false); 283 $this->assertTrue(strpos($message->fullmessagehtml, 'Hello world!') !== false); 284 $this->assertEquals(FORMAT_MOODLE, $message->fullmessageformat); 285 $this->assertEquals($expectedurl->out(false), $message->contexturl); 286 $this->assertEquals($expectedurlname, $message->contexturlname); 287 288 // Test message content as HTML. 289 $this->setUser($u3); 290 $comment = $p1->get_comment_object(); 291 $sink = $this->redirectMessages(); 292 $comment->add('<em>Hello world!</em>', FORMAT_HTML); 293 $messages = $sink->get_messages(); 294 $sink->close(); 295 $this->assertCount(1, $messages); 296 $message = array_pop($messages); 297 298 $expectedurlname = $p1->get_name(); 299 $expectedurl = url::plan($p1->get_id()); 300 $this->assertTrue(strpos($message->fullmessage, '<em>Hello world!</em>') !== false); 301 $this->assertTrue(strpos($message->fullmessagehtml, '<em>Hello world!</em>') !== false); 302 $this->assertEquals(FORMAT_HTML, $message->fullmessageformat); 303 $this->assertEquals($expectedurl->out(false), $message->contexturl); 304 $this->assertEquals($expectedurlname, $message->contexturlname); 305 } 306 307 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Aug 11 10:00:09 2016 | Cross-referenced by PHPXref 0.7.1 |