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
/**
18
 * Badges external functions tests.
19
 *
20
 * @package    core_badges
21
 * @category   external
22
 * @copyright  2016 Juan Leyva <juan@moodle.com>
23
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24
 * @since      Moodle 3.1
25
 */
26
 
27
namespace core_badges\external;
28
 
29
use core_badges_external;
1441 ariadna 30
use core_badges\tests\external_helper;
1 efrain 31
use core_external\external_api;
32
use core_external\external_settings;
33
use externallib_advanced_testcase;
34
 
35
defined('MOODLE_INTERNAL') || die();
36
 
37
global $CFG;
38
 
39
require_once($CFG->dirroot . '/webservice/tests/helpers.php');
40
require_once($CFG->libdir . '/badgeslib.php');
41
 
42
/**
43
 * Badges external functions tests
44
 *
45
 * @package    core_badges
46
 * @category   external
47
 * @copyright  2016 Juan Leyva <juan@moodle.com>
48
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
49
 * @since      Moodle 3.1
50
 */
1441 ariadna 51
final class external_test extends externallib_advanced_testcase {
52
    use external_helper;
1 efrain 53
 
54
    /**
55
     * Test get user badges.
56
     * These is a basic test since the badges_get_my_user_badges used by the external function already has unit tests.
1441 ariadna 57
     *
58
     * @covers \core_badges_external::get_user_badges
1 efrain 59
     */
11 efrain 60
    public function test_get_my_user_badges(): void {
1441 ariadna 61
        $data = $this->prepare_test_data();
1 efrain 62
 
1441 ariadna 63
        $this->setUser($data['student']);
1 efrain 64
        $result = core_badges_external::get_user_badges();
65
        $result = external_api::clean_returnvalue(core_badges_external::get_user_badges_returns(), $result);
1441 ariadna 66
        $this->assertCount(2, $result['badges']);
67
        $this->assert_issued_badge($data['coursebadge'], $result['badges'][0], true, false);
68
        $this->assert_issued_badge($data['sitebadge'], $result['badges'][1], true, false);
1 efrain 69
 
70
        // Pagination and filtering.
1441 ariadna 71
        $result = core_badges_external::get_user_badges(0, 0, 0, 1, '', true);
1 efrain 72
        $result = external_api::clean_returnvalue(core_badges_external::get_user_badges_returns(), $result);
73
        $this->assertCount(1, $result['badges']);
1441 ariadna 74
        $this->assert_issued_badge($data['coursebadge'], $result['badges'][0], true, false);
1 efrain 75
    }
76
 
77
    /**
78
     * Test get user badges.
1441 ariadna 79
     *
80
     * @covers \core_badges_external::get_user_badges
1 efrain 81
     */
11 efrain 82
    public function test_get_other_user_badges(): void {
1441 ariadna 83
        $data = $this->prepare_test_data();
1 efrain 84
 
1441 ariadna 85
        // User with "moodle/badges:configuredetails" capability.
86
        $this->setAdminUser();
87
        $result = core_badges_external::get_user_badges($data['student']->id);
88
        $result = external_api::clean_returnvalue(core_badges_external::get_user_badges_returns(), $result);
89
        $this->assertCount(2, $result['badges']);
90
        $this->assert_issued_badge($data['coursebadge'], $result['badges'][0], false, true);
91
        $this->assert_issued_badge($data['sitebadge'], $result['badges'][1], false, true);
1 efrain 92
 
1441 ariadna 93
        // User without "moodle/badges:configuredetails" capability.
94
        $this->setUser($this->getDataGenerator()->create_user());
95
        $result = core_badges_external::get_user_badges($data['student']->id);
1 efrain 96
        $result = external_api::clean_returnvalue(core_badges_external::get_user_badges_returns(), $result);
97
        $this->assertCount(2, $result['badges']);
1441 ariadna 98
        $this->assert_issued_badge($data['coursebadge'], $result['badges'][0], false, false);
99
        $this->assert_issued_badge($data['sitebadge'], $result['badges'][1], false, false);
1 efrain 100
    }
101
 
102
    /**
103
     * Test get_user_badges where issuername contains text to be filtered
1441 ariadna 104
     *
105
     * @covers \core_badges_external::get_user_badges
1 efrain 106
     */
107
    public function test_get_user_badges_filter_issuername(): void {
108
        global $DB;
109
 
1441 ariadna 110
        $data = $this->prepare_test_data();
111
 
1 efrain 112
        filter_set_global_state('multilang', TEXTFILTER_ON);
113
        filter_set_applies_to_strings('multilang', true);
114
 
115
        external_settings::get_instance()->set_filter(true);
116
 
117
        // Update issuer name of test badge.
118
        $issuername = '<span class="multilang" lang="en">Issuer (en)</span><span class="multilang" lang="es">Issuer (es)</span>';
119
        $DB->set_field('badge', 'issuername', $issuername, ['name' => 'Test badge site']);
120
 
121
        // Retrieve student badges.
1441 ariadna 122
        $result = core_badges_external::get_user_badges($data['student']->id);
1 efrain 123
        $result = external_api::clean_returnvalue(core_badges_external::get_user_badges_returns(), $result);
124
 
125
        // Site badge will be last, because it has the earlier issued date.
126
        $badge = end($result['badges']);
127
        $this->assertEquals('Issuer (en)', $badge['issuername']);
128
    }
129
}