Proyectos de Subversion Moodle

Rev

Rev 11 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 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
namespace enrol_meta\external;
18
 
19
use core_external\external_api;
20
 
21
defined('MOODLE_INTERNAL') || die();
22
global $CFG;
23
require_once($CFG->dirroot . '/webservice/tests/helpers.php');
24
 
25
/**
26
 * Tests for delete_instances external class
27
 *
28
 * @package    enrol_meta
29
 * @group      enrol_meta
30
 * @category   test
31
 * @copyright  2021 WKS KV Bildung
32
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
33
 */
1441 ariadna 34
final class delete_instances_test extends \externallib_advanced_testcase {
1 efrain 35
 
36
    /**
37
     * Test setup
38
     */
39
    public function setUp(): void {
1441 ariadna 40
        parent::setUp();
1 efrain 41
        $this->resetAfterTest();
42
        $this->setAdminUser();
43
    }
44
 
45
    /**
46
     * Test delete_instances no instances.
47
     */
11 efrain 48
    public function test_delete_instances_no_instances(): void {
1 efrain 49
        $this->expectException(\invalid_parameter_exception::class);
50
        delete_instances::execute([]);
51
    }
52
 
53
    /**
54
     * Test delete_instances missing courses.
55
     */
11 efrain 56
    public function test_delete_instances_missing_courses(): void {
1 efrain 57
        $course = self::getDataGenerator()->create_course();
58
 
59
        // Missing meta course.
60
        try {
61
            delete_instances::execute([['metacourseid' => 1000, 'courseid' => $course->id]]);
62
            $this->fail('Exception expected');
63
        } catch (\moodle_exception $e) {
64
            $this->assertStringContainsString(get_string('wsinvalidmetacourse', 'enrol_meta', 1000), $e->getMessage());
65
        }
66
 
67
        // Missing linked course.
68
        try {
69
            delete_instances::execute([['metacourseid' => $course->id, 'courseid' => 1000]]);
70
            $this->fail('Exception expected');
71
        } catch (\moodle_exception $e) {
72
            $this->assertStringContainsString(get_string('wsinvalidcourse', 'enrol_meta', 1000), $e->getMessage());
73
        }
74
    }
75
 
76
    /**
77
     * Test delete_instances missing capabilities.
78
     */
11 efrain 79
    public function test_delete_instances_missing_capabilities(): void {
1 efrain 80
        $metacourse = self::getDataGenerator()->create_course();
81
        $course = self::getDataGenerator()->create_course();
82
        $user = self::getDataGenerator()->create_user();
83
        $this::setUser($user);
84
 
85
        // Missing rights in meta course.
86
        try {
87
            delete_instances::execute([['metacourseid' => $metacourse->id, 'courseid' => $course->id]]);
88
            $this->fail('Exception expected');
89
        } catch (\moodle_exception $e) {
90
            $this->assertStringContainsString(get_string('wsinvalidmetacourse', 'enrol_meta', $metacourse->id), $e->getMessage());
91
        }
92
 
93
        // Add rights for metacourse.
94
        $metacontext = \context_course::instance($metacourse->id);
95
        $roleid = $this->assignUserCapability('enrol/meta:config', $metacontext->id);
96
        $this->assignUserCapability('moodle/course:view', $metacontext->id, $roleid);
97
        $this->assignUserCapability('moodle/course:enrolconfig', $metacontext->id, $roleid);
98
 
99
        $result = delete_instances::execute([['metacourseid' => $metacourse->id, 'courseid' => $course->id]]);
100
        $this->assertNotEmpty($result);
101
    }
102
 
103
    /**
104
     * Test delete_instances.
105
     */
11 efrain 106
    public function test_delete_instances(): void {
1 efrain 107
        global $DB;
108
        $metacourse = self::getDataGenerator()->create_course();
109
        $course = self::getDataGenerator()->create_course();
110
 
111
        // Create instance.
112
        $enrolplugin = enrol_get_plugin('meta');
113
        $fields = [
114
            'customint1' => $course->id,
115
            'customint2' => 0,
116
        ];
117
        $enrolplugin->add_instance($metacourse, $fields);
118
 
119
        // Sanity check.
120
        $enrolrecords = $DB->count_records('enrol',
121
            ['enrol' => 'meta', 'courseid' => $metacourse->id, 'customint1' => $course->id]);
122
        $this->assertEquals(1, $enrolrecords);
123
 
124
        // Delete instance.
125
        $result = delete_instances::execute([['metacourseid' => $metacourse->id, 'courseid' => $course->id]]);
126
        $result = external_api::clean_returnvalue(add_instances::execute_returns(), $result);
127
        $this->assertEquals($result[0]['metacourseid'], $metacourse->id);
128
        $this->assertEquals($result[0]['courseid'], $course->id);
129
        $this->assertEquals($result[0]['status'], 1);
130
 
131
        // Check instance was deleted.
132
        $enrolrecords = $DB->count_records('enrol',
133
            ['enrol' => 'meta', 'courseid' => $result[0]['metacourseid'], 'customint1' => $result[0]['courseid']]);
134
        $this->assertEquals(0, $enrolrecords);
135
 
136
        // Delete same instance.
137
        $result = delete_instances::execute([['metacourseid' => $metacourse->id, 'courseid' => $course->id]]);
138
        $result = external_api::clean_returnvalue(add_instances::execute_returns(), $result);
139
        $this->assertEquals($result[0]['metacourseid'], $metacourse->id);
140
        $this->assertEquals($result[0]['courseid'], $course->id);
141
        $this->assertEquals($result[0]['status'], 0);
142
    }
143
}