. /** * File contains the unit tests for the webservices. * * @package mod_customcert * @category test * @copyright 2018 Mark Nelson * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ defined('MOODLE_INTERNAL') || die(); global $CFG; /** * Unit tests for the webservices. * * @package mod_customcert * @category test * @copyright 2018 Mark Nelson * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class mod_customcert_external_test_testcase extends advanced_testcase { /** * Test set up. */ public function setUp() { $this->resetAfterTest(); } /** * Test the delete_issue web service. */ public function test_delete_issue() { global $DB; $this->setAdminUser(); // Create a course. $course = $this->getDataGenerator()->create_course(); // Create a custom certificate in the course. $customcert = $this->getDataGenerator()->create_module('customcert', ['course' => $course->id]); // Create two users. $student1 = $this->getDataGenerator()->create_user(); $student2 = $this->getDataGenerator()->create_user(); // Enrol them into the course. $this->getDataGenerator()->enrol_user($student1->id, $course->id); $this->getDataGenerator()->enrol_user($student2->id, $course->id); // Issue them both certificates. $i1 = \mod_customcert\certificate::issue_certificate($customcert->id, $student1->id); $i2 = \mod_customcert\certificate::issue_certificate($customcert->id, $student2->id); $this->assertEquals(2, $DB->count_records('customcert_issues')); $result = \mod_customcert\external::delete_issue($customcert->id, $i2); // We need to execute the return values cleaning process to simulate the web service server. external_api::clean_returnvalue(\mod_customcert\external::delete_issue_returns(), $result); $issues = $DB->get_records('customcert_issues'); $this->assertCount(1, $issues); $issue = reset($issues); $this->assertEquals($student1->id, $issue->userid); } /** * Test the delete_issue web service. */ public function test_delete_issue_no_login() { global $DB; // Create a course. $course = $this->getDataGenerator()->create_course(); // Create a custom certificate in the course. $customcert = $this->getDataGenerator()->create_module('customcert', ['course' => $course->id]); // Create two users. $student1 = $this->getDataGenerator()->create_user(); $student2 = $this->getDataGenerator()->create_user(); // Enrol them into the course. $this->getDataGenerator()->enrol_user($student1->id, $course->id); $this->getDataGenerator()->enrol_user($student2->id, $course->id); // Issue them both certificates. $i1 = \mod_customcert\certificate::issue_certificate($customcert->id, $student1->id); $i2 = \mod_customcert\certificate::issue_certificate($customcert->id, $student2->id); $this->assertEquals(2, $DB->count_records('customcert_issues')); // Try and delete without logging in. $this->expectException('require_login_exception'); \mod_customcert\external::delete_issue($customcert->id, $i2); } /** * Test the delete_issue web service. */ public function test_delete_issue_no_capability() { global $DB; // Create a course. $course = $this->getDataGenerator()->create_course(); // Create a custom certificate in the course. $customcert = $this->getDataGenerator()->create_module('customcert', ['course' => $course->id]); // Create two users. $student1 = $this->getDataGenerator()->create_user(); $student2 = $this->getDataGenerator()->create_user(); $this->setUser($student1); // Enrol them into the course. $this->getDataGenerator()->enrol_user($student1->id, $course->id); $this->getDataGenerator()->enrol_user($student2->id, $course->id); // Issue them both certificates. $i1 = \mod_customcert\certificate::issue_certificate($customcert->id, $student1->id); $i2 = \mod_customcert\certificate::issue_certificate($customcert->id, $student2->id); $this->assertEquals(2, $DB->count_records('customcert_issues')); // Try and delete without the required capability. $this->expectException('required_capability_exception'); \mod_customcert\external::delete_issue($customcert->id, $i2); } }