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 add_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 add_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 add_instances no instances.
47
     */
11 efrain 48
    public function test_add_instances_no_instances(): void {
1 efrain 49
        $this->expectException(\invalid_parameter_exception::class);
50
        add_instances::execute([]);
51
    }
52
 
53
    /**
54
     * Test add_instances missing courses.
55
     */
11 efrain 56
    public function test_add_instances_missing_courses(): void {
1 efrain 57
        $course = self::getDataGenerator()->create_course();
58
 
59
        // Missing meta course.
60
        try {
61
            add_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
            add_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 add_instances missing capabilities.
78
     */
11 efrain 79
    public function test_add_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
            add_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
        // Missing rights for linked course.
100
        try {
101
            add_instances::execute([['metacourseid' => $metacourse->id, 'courseid' => $course->id]]);
102
            $this->fail('Exception expected');
103
        } catch (\moodle_exception $e) {
104
            $this->assertStringContainsString(get_string('wsinvalidcourse', 'enrol_meta', $course->id), $e->getMessage());
105
        }
106
 
107
        // Add rights for linked course.
108
        $context = \context_course::instance($course->id);
109
        $this->assignUserCapability('moodle/course:view', $context->id, $roleid);
110
        $this->assignUserCapability('enrol/meta:selectaslinked', $context->id, $roleid);
111
 
112
        $result = add_instances::execute([['metacourseid' => $metacourse->id, 'courseid' => $course->id]]);
113
        $this->assertNotEmpty($result);
114
    }
115
 
116
    /**
117
     * Test add_instances.
118
     */
11 efrain 119
    public function test_add_instances(): void {
1 efrain 120
        global $DB;
121
        $metacourse = self::getDataGenerator()->create_course();
122
        $course = self::getDataGenerator()->create_course();
123
 
124
        // Sanity check.
125
        $enrolrecords = $DB->count_records('enrol',
126
            ['enrol' => 'meta', 'courseid' => $metacourse->id, 'customint1' => $course->id]);
127
        $this->assertEquals(0, $enrolrecords);
128
 
129
        // Add instance.
130
        $result = add_instances::execute([['metacourseid' => $metacourse->id, 'courseid' => $course->id]]);
131
        $result = external_api::clean_returnvalue(add_instances::execute_returns(), $result);
132
        $this->assertEquals($result[0]['metacourseid'], $metacourse->id);
133
        $this->assertEquals($result[0]['courseid'], $course->id);
134
        $this->assertEquals($result[0]['status'], 1);
135
 
136
        // Check instance was created.
137
        $enrolrecords = $DB->count_records('enrol',
138
            ['enrol' => 'meta', 'courseid' => $result[0]['metacourseid'], 'customint1' => $result[0]['courseid']]);
139
        $this->assertEquals(1, $enrolrecords);
140
 
141
        // Add same instance.
142
        $result = add_instances::execute([['metacourseid' => $metacourse->id, 'courseid' => $course->id]]);
143
        $result = external_api::clean_returnvalue(add_instances::execute_returns(), $result);
144
        $this->assertEquals($result[0]['metacourseid'], $metacourse->id);
145
        $this->assertEquals($result[0]['courseid'], $course->id);
146
        $this->assertEquals($result[0]['status'], 0);
147
 
148
        // Check no new instance was created.
149
        $enrolrecords = $DB->count_records('enrol',
150
            ['enrol' => 'meta', 'courseid' => $result[0]['metacourseid'], 'customint1' => $result[0]['courseid']]);
151
        $this->assertEquals(1, $enrolrecords);
152
    }
153
}