Proyectos de Subversion Moodle

Rev

| 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
 * This file contains unit test related to xAPI library.
19
 *
20
 * @package    core_xapi
21
 * @copyright  2020 Ferran Recio
22
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23
 */
24
 
25
namespace core_xapi\local\statement;
26
 
27
use advanced_testcase;
28
use core_xapi\xapi_exception;
29
 
30
/**
31
 * Contains test cases for testing statement result class.
32
 *
33
 * @package    core_xapi
34
 * @since      Moodle 3.9
35
 * @copyright  2020 Ferran Recio
36
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
37
 */
38
class item_result_test extends advanced_testcase {
39
 
40
    /**
41
     * Test item creation.
42
     */
43
    public function test_creation(): void {
44
 
45
        $data = $this->get_generic_data();
46
        $item = item_result::create_from_data($data);
47
 
48
        $this->assertEquals(json_encode($item), json_encode($data));
49
        $this->assertNull($item->get_duration());
50
 
51
        $score = $item->get_score();
52
        $this->assertEquals(json_encode($score), json_encode($data->score));
53
 
54
    }
55
 
56
    /**
57
     * Return a generic data to create a valid item.
58
     *
59
     * @return \stdClass the creation data
60
     */
61
    private function get_generic_data(): \stdClass {
62
        return (object) [
63
            'score' => (object)[
64
                'min' => 0,
65
                'max' => 100,
66
                'raw' => 50,
67
                'scaled' => 0.5,
68
            ],
69
            'completion' => true,
70
            'success' => true,
71
        ];
72
    }
73
 
74
    /**
75
     * Test for duration values.
76
     *
77
     * @dataProvider duration_values_data
78
     * @param string|null $duration specified duration
79
     * @param int|null $seconds calculated seconds
80
     * @param bool $exception if exception is expected
81
     */
82
    public function test_duration_values(?string $duration, ?int $seconds, bool $exception): void {
83
 
84
        if ($exception) {
85
            $this->expectException(xapi_exception::class);
86
        }
87
 
88
        $data = $this->get_generic_data();
89
        if ($duration !== null) {
90
            $data->duration = $duration;
91
        }
92
        $item = item_result::create_from_data($data);
93
        $this->assertEquals($seconds, $item->get_duration());
94
    }
95
 
96
    /**
97
     * Data provider for the test_duration_values tests.
98
     *
99
     * @return array
100
     */
101
    public function duration_values_data(): array {
102
        return [
103
            'No duration' => [
104
                null, null, false
105
            ],
106
            'Empty duration' => [
107
                '', null, false
108
            ],
109
            '1 minute duration' => [
110
                'PT1M', 60, false
111
            ],
112
            '1 hour duration' => [
113
                'PT1H', 3600, false
114
            ],
115
            '1 second duration' => [
116
                'PT1S', 1, false
117
            ],
118
            '1.11 second duration (dot variant)' => [
119
                'PT1.11S', 1, false
120
            ],
121
            '1,11 second duration (comma variant)' => [
122
                'PT1.11S', 1, false
123
            ],
124
            '90 minutes 5 seconds duration' => [
125
                'PT1H30M5S', 5405, false
126
            ],
127
            '90 minutes 05 seconds duration' => [
128
                'PT1H30M05S', 5405, false
129
            ],
130
            'Half year duration' => [
131
                'P0.5Y', null, true
132
            ],
133
            'Incorrect format' => [
134
                'INVALID', null, true
135
            ],
136
        ];
137
    }
138
}