Пример #1
0
 /**
  * External function plan_start_review.
  *
  * @param int $id The plan ID.
  * @return boolean
  */
 public static function plan_start_review($id)
 {
     $params = self::validate_parameters(self::plan_start_review_parameters(), array('id' => $id));
     $plan = api::read_plan($id);
     self::validate_context($plan->get_context());
     return api::plan_start_review($plan);
 }
Пример #2
0
 /**
  * Testing starting the review.
  */
 public function test_plan_start_review()
 {
     $data = $this->setup_workflow_data();
     $dg = $data['dg'];
     $lpg = $data['lpg'];
     $user = $data['user'];
     $reviewer = $data['reviewer'];
     $otheruser = $data['otheruser'];
     $plan = $data['plan'];
     $tplplan = $data['tplplan'];
     // Set waiting for review.
     $tplplan->set_status(plan::STATUS_WAITING_FOR_REVIEW);
     $tplplan->update();
     $plan->set_status(plan::STATUS_WAITING_FOR_REVIEW);
     $plan->update();
     // Foreign user cannot do anything.
     $this->setUser($otheruser);
     try {
         api::plan_start_review($plan);
         $this->fail('The user can not read the plan.');
     } catch (required_capability_exception $e) {
         $this->assertEquals('nopermissions', $e->errorcode);
     }
     // Can not change a plan based on a template.
     $this->setUser($reviewer);
     try {
         api::plan_start_review($tplplan);
         $this->fail('The plan is based on a template.');
     } catch (coding_exception $e) {
         $this->assertRegExp('/Template plans cannot be reviewed./', $e->getMessage());
     }
     // Can not start a review when not waiting for review.
     $this->setUser($reviewer);
     $plan->set_status(plan::STATUS_DRAFT);
     try {
         api::plan_start_review($plan);
         $this->fail('The plan review cannot be started at this stage.');
     } catch (coding_exception $e) {
         $this->assertRegExp('/The plan review cannot be started at this stage./', $e->getMessage());
     }
     // Can not start a review when not waiting for review.
     $this->setUser($reviewer);
     $plan->set_status(plan::STATUS_IN_REVIEW);
     try {
         api::plan_start_review($plan);
         $this->fail('The plan review cannot be started at this stage.');
     } catch (coding_exception $e) {
         $this->assertRegExp('/The plan review cannot be started at this stage./', $e->getMessage());
     }
     // Can not start a review when not waiting for review.
     $this->setUser($reviewer);
     $plan->set_status(plan::STATUS_ACTIVE);
     try {
         api::plan_start_review($plan);
         $this->fail('The plan review cannot be started at this stage.');
     } catch (coding_exception $e) {
         $this->assertRegExp('/The plan review cannot be started at this stage./', $e->getMessage());
     }
     // Can not start a review when not waiting for review.
     $this->setUser($reviewer);
     $plan->set_status(plan::STATUS_COMPLETE);
     try {
         api::plan_start_review($plan);
         $this->fail('The plan review cannot be started at this stage.');
     } catch (coding_exception $e) {
         $this->assertRegExp('/The plan review cannot be started at this stage./', $e->getMessage());
     }
     // Starting as the owner.
     $this->setUser($user);
     $plan->set_status(plan::STATUS_WAITING_FOR_REVIEW);
     try {
         api::plan_start_review($plan);
         $this->fail('The user can not start a review.');
     } catch (required_capability_exception $e) {
         $this->assertEquals('nopermissions', $e->errorcode);
     }
     // Starting review.
     $this->setUser($reviewer);
     api::plan_start_review($plan);
     $plan->read();
     $this->assertEquals(plan::STATUS_IN_REVIEW, $plan->get_status());
     $this->assertEquals($reviewer->id, $plan->get_reviewerid());
     // Starting review by ID.
     $plan->set_status(plan::STATUS_WAITING_FOR_REVIEW);
     $plan->set_reviewerid(null);
     $plan->update();
     api::plan_start_review($plan->get_id());
     $plan->read();
     $this->assertEquals(plan::STATUS_IN_REVIEW, $plan->get_status());
     $this->assertEquals($reviewer->id, $plan->get_reviewerid());
 }
Пример #3
0
 /**
  * Test the plan review started event.
  *
  */
 public function test_plan_review_started()
 {
     $this->resetAfterTest(true);
     $this->setAdminUser();
     $dg = $this->getDataGenerator();
     $lpg = $this->getDataGenerator()->get_plugin_generator('core_competency');
     $user1 = $dg->create_user();
     $plan = $lpg->create_plan(array('userid' => $user1->id, 'status' => \core_competency\plan::STATUS_WAITING_FOR_REVIEW));
     $planid = $plan->get_id();
     $contextid = $plan->get_context()->id;
     // Trigger and capture the event.
     $sink = $this->redirectEvents();
     $result = api::plan_start_review($plan->get_id());
     $this->assertTrue($result);
     // Get our event event.
     $events = $sink->get_events();
     $event = reset($events);
     $this->assertInstanceOf('\\core\\event\\competency_plan_review_started', $event);
     $this->assertEquals($planid, $event->objectid);
     $this->assertEquals($contextid, $event->contextid);
     $this->assertEquals($plan->get_userid(), $event->relateduserid);
     $this->assertEventContextNotUsed($event);
     $this->assertDebuggingNotCalled();
 }