[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/competency/tests/ -> lib_test.php (source)

   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  }


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1