Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1441 ariadna 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 core\router\schema;
18
 
19
use core\param;
20
use core\router\route;
21
use core\router\schema\objects\array_of_strings;
22
use core\router\schema\objects\schema_object;
23
use core\router\schema\specification;
24
use core\tests\router\route_testcase;
25
 
26
/**
27
 * Tests for parameters.
28
 *
29
 * @package    core
30
 * @copyright  Andrew Lyons <andrew@nicols.co.uk>
31
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
32
 * @covers     \core\router\schema\parameter
33
 * @covers     \core\router\schema\openapi_base
34
 */
35
final class parameter_test extends route_testcase {
36
    public function test_basics(): void {
37
        $param = new parameter(
38
            name: 'examplename',
39
            in: 'examplein',
40
        );
41
        $this->assertEquals('examplename', $param->get_name());
42
        $this->assertEquals('examplein', $param->get_in());
43
 
44
        // The default behaviour is for a parameter to not be required if it was not explicitly specified.
45
        $this->assertFalse($param->is_required(new route()));
46
    }
47
 
48
    /**
49
     * Test for required default.
50
     *
51
     * @dataProvider required_default_provider
52
     * @param array $params
53
     */
54
    public function test_required_default(array $params): void {
55
        $this->expectException(\coding_exception::class);
56
        new parameter(...$params);
57
    }
58
 
59
    /**
60
     * Data provider for required default tests.
61
     *
62
     * @return array
63
     */
64
    public static function required_default_provider(): array {
65
        return [
66
            [
67
                [
68
                    'name' => 'example',
69
                    'in'  => parameter::IN_PATH,
70
                    'required' => true,
71
                    'default' => 0,
72
                ],
73
                [
74
                    'name' => 'example',
75
                    'in'  => parameter::IN_PATH,
76
                    'required' => true,
77
                    'default' => false,
78
                ],
79
                [
80
                    'name' => 'example',
81
                    'in'  => parameter::IN_PATH,
82
                    'required' => true,
83
                    'default' => "",
84
                ],
85
            ],
86
        ];
87
    }
88
 
89
    public function test_get_type(): void {
90
        $param = new parameter(
91
            name: 'examplename',
92
            in: 'examplein',
93
            type: param::ALPHANUMEXT,
94
        );
95
        $this->assertEquals(param::ALPHANUMEXT, $param->get_type());
96
    }
97
 
98
    /**
99
     * Test for is_required.
100
     *
101
     * @dataProvider is_required_provider
102
     * @param null|bool $required
103
     * @param bool $expected
104
     */
105
    public function test_is_required(?bool $required, bool $expected): void {
106
        $param = new parameter(
107
            name: 'example',
108
            in: parameter::IN_HEADER,
109
            required: $required,
110
        );
111
 
112
        $this->assertSame($expected, $param->is_required(new route()));
113
    }
114
 
115
    /**
116
     * Data provider for is_required tests.
117
     *
118
     * @return array
119
     */
120
    public static function is_required_provider(): array {
121
        return [
122
            [true, true],
123
            [false, false],
124
            [null, false],
125
        ];
126
    }
127
 
128
    public function test_example(): void {
129
        $example = new example('examplevalue');
130
        $param = new parameter(
131
            name: 'example',
132
            in: 'header',
133
            type: param::INT,
134
            example: $example,
135
        );
136
        $description = $param->get_openapi_description(new specification());
137
        $this->assertArrayHasKey('examplevalue', $description->examples);
138
    }
139
 
140
    public function test_examples(): void {
141
        $example = new example('examplevalue');
142
        $param = new parameter(
143
            name: 'example',
144
            in: 'header',
145
            type: param::INT,
146
            examples: [$example],
147
        );
148
        $description = $param->get_openapi_description(new specification());
149
        $this->assertArrayHasKey('examplevalue', $description->examples);
150
    }
151
 
152
    public function test_example_and_examples(): void {
153
        $example = new example('examplevalue');
154
        $this->expectException(\coding_exception::class);
155
        new parameter(
156
            name: 'example',
157
            in: 'header',
158
            type: param::INT,
159
            example: $example,
160
            examples: [$example],
161
        );
162
    }
163
 
164
    public function test_schema(): void {
165
        $schema = new schema_object(
166
            content: [
167
                new array_of_strings(),
168
            ],
169
        );
170
        $param = new parameter(
171
            name: 'example',
172
            in: 'header',
173
            type: param::INT,
174
            schema: $schema,
175
        );
176
        $description = $param->get_openapi_description(new specification());
177
        $this->assertNotNull($description->schema);
178
        $this->assertEquals('object', $description->schema->type);
179
    }
180
 
181
    public function test_schema_includes_clientside_pattern(): void {
182
        $param = new parameter(
183
            name: 'example',
184
            in: 'header',
185
            type: param::ALPHANUM,
186
        );
187
        $description = $param->get_openapi_description(new specification());
188
        $this->assertNotNull($description->schema);
189
        $this->assertEquals('string', $description->schema->type);
190
        $this->assertIsString($description->schema->pattern);
191
    }
192
}