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
/**
18
 * Step definition to generate database fixtures for learning plan system.
19
 *
20
 * @package    tool_lp
21
 * @category   test
22
 * @copyright  2016 Issam Taboubi <issam.taboubi@umontreal.ca>
23
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24
 */
25
 
26
require_once(__DIR__ . '/../../../../../lib/behat/behat_deprecated_base.php');
27
 
28
use Behat\Gherkin\Node\TableNode as TableNode;
29
use Behat\Behat\Tester\Exception\PendingException as PendingException;
30
use core_competency\competency;
31
use core_competency\competency_framework;
32
use core_competency\plan;
33
use core_competency\user_evidence;
34
 
35
/**
36
 * Step definition to generate database fixtures for learning plan system.
37
 *
38
 * @package    tool_lp
39
 * @category   test
40
 * @copyright  2016 Issam Taboubi <issam.taboubi@umontreal.ca>
41
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
42
 */
43
class behat_tool_lp_deprecated extends behat_deprecated_base {
44
 
45
    /**
46
     * @var tool_lp data generator
47
     */
48
    protected $datageneratorlp;
49
 
50
    /**
51
     * Each element specifies:
52
     * - The data generator sufix used.
53
     * - The required fields.
54
     * - The mapping between other elements references and database field names.
55
     * @var array
56
     */
57
    protected static $elements = array(
58
        'frameworks' => array(
59
            'datagenerator' => 'framework',
60
            'required' => array()
61
        ),
62
        'templates' => array(
63
            'datagenerator' => 'template',
64
            'required' => array()
65
        ),
66
        'plans' => array(
67
            'datagenerator' => 'plan',
68
            'required' => array('user')
69
        ),
70
        'competencies' => array(
71
            'datagenerator' => 'competency',
72
            'required' => array('framework')
73
        ),
74
        'userevidence' => array(
75
            'datagenerator' => 'user_evidence',
76
            'required' => array('user')
77
        ),
78
        'plancompetencies' => array(
79
            'datagenerator' => 'plan_competency',
80
            'required' => array('plan', 'competency')
81
        ),
82
        'userevidencecompetencies' => array(
83
            'datagenerator' => 'user_evidence_competency',
84
            'required' => array('userevidence', 'competency')
85
        ),
86
        'usercompetencies' => array(
87
            'datagenerator' => 'user_competency',
88
            'required' => array('user', 'competency')
89
        ),
90
        'usercompetencyplans' => array(
91
            'datagenerator' => 'user_competency_plan',
92
            'required' => array('user', 'competency', 'plan')
93
        )
94
    );
95
 
96
    /**
97
     * Creates the specified element. More info about available elements in https://moodledev.io/general/development/tools/behat.
98
     *
99
     * @Given /^the following lp "(?P<element_string>(?:[^"]|\\")*)" exist:$/
100
     *
101
     * @todo MDL-78077 This will be deleted in Moodle 6.0.
102
     * @deprecated since 5.0
103
     *
104
     * @throws Exception
105
     * @throws PendingException
106
     * @param string    $elementname The name of the entity to add
107
     * @param TableNode $data
108
     */
109
    #[\core\attribute\deprecated('behat_tool_lp_data_generators::the_following_lp_exist', since: '5.0')]
110
    public function the_following_lp_exist($elementname, TableNode $data) {
111
        $this->deprecated_message([
112
            'behat_tool_lp_data_generators::the_following_lp_exist is deprecated',
113
            'Use: the following "core_competency > [competency|framework|plan...]" exist:',
114
 
115
        ]);
116
 
117
        // Now that we need them require the data generators.
118
        require_once(__DIR__.'/../../../../../lib/phpunit/classes/util.php');
119
 
120
        if (empty(self::$elements[$elementname])) {
121
            throw new PendingException($elementname . ' data generator is not implemented');
122
        }
123
 
124
        $datagenerator = testing_util::get_data_generator();
125
        $this->datageneratorlp = $datagenerator->get_plugin_generator('core_competency');
126
 
127
        $elementdatagenerator = self::$elements[$elementname]['datagenerator'];
128
        $requiredfields = self::$elements[$elementname]['required'];
129
        if (!empty(self::$elements[$elementname]['switchids'])) {
130
            $switchids = self::$elements[$elementname]['switchids'];
131
        }
132
 
133
        foreach ($data->getHash() as $elementdata) {
134
 
135
            // Check if all the required fields are there.
136
            foreach ($requiredfields as $requiredfield) {
137
                if (!isset($elementdata[$requiredfield])) {
138
                    throw new Exception($elementname . ' requires the field ' . $requiredfield . ' to be specified');
139
                }
140
            }
141
 
142
            // Switch from human-friendly references to ids.
143
            if (isset($switchids)) {
144
                foreach ($switchids as $element => $field) {
145
                    $methodname = 'get_' . $element . '_id';
146
 
147
                    // Not all the switch fields are required, default vars will be assigned by data generators.
148
                    if (isset($elementdata[$element])) {
149
                        // Temp $id var to avoid problems when $element == $field.
150
                        $id = $this->{$methodname}($elementdata[$element]);
151
                        unset($elementdata[$element]);
152
                        $elementdata[$field] = $id;
153
                    }
154
                }
155
            }
156
 
157
            // Preprocess the entities that requires a special treatment.
158
            if (method_exists($this, 'preprocess_' . $elementdatagenerator)) {
159
                $elementdata = $this->{'preprocess_' . $elementdatagenerator}($elementdata);
160
            }
161
 
162
            // Creates element.
163
            $methodname = 'create_' . $elementdatagenerator;
164
            if (method_exists($this->datageneratorlp, $methodname)) {
165
                // Using data generators directly.
166
                $this->datageneratorlp->{$methodname}($elementdata);
167
 
168
            } else if (method_exists($this, 'process_' . $elementdatagenerator)) {
169
                // Using an alternative to the direct data generator call.
170
                $this->{'process_' . $elementdatagenerator}($elementdata);
171
            } else {
172
                throw new PendingException($elementname . ' data generator is not implemented');
173
            }
174
        }
175
    }
176
 
177
    /**
178
     * Adapt creating competency from framework idnumber or frameworkid.
179
     *
180
     * @param array $data
181
     * @return array
182
     */
183
    protected function preprocess_competency($data) {
184
        if (isset($data['framework'])) {
185
            $framework = competency_framework::get_record(array('idnumber' => $data['framework']));
186
            if ($framework) {
187
                $data['competencyframeworkid'] = $framework->get('id');
188
            } else {
189
                $framework = competency_framework::get_record(array('id' => $data['framework']));
190
                if ($framework) {
191
                    $data['competencyframeworkid'] = $framework->get('id');
192
                } else {
193
                    throw new Exception('Could not resolve framework with idnumber or id : "' . $data['category'] . '"');
194
                }
195
            }
196
        }
197
        unset($data['framework']);
198
        return $data;
199
    }
200
 
201
    /**
202
     * Adapt creating plan from user username.
203
     *
204
     * @param array $data
205
     * @return array
206
     */
207
    protected function preprocess_plan($data) {
208
        global $DB;
209
 
210
        if (isset($data['user'])) {
211
            $user = $DB->get_record('user', array('username' => $data['user']), '*', MUST_EXIST);
212
            $data['userid'] = $user->id;
213
        }
214
        unset($data['user']);
215
 
216
        if (isset($data['reviewer'])) {
217
            if (is_number($data['reviewer'])) {
218
                $data['reviewerid'] = $data['reviewer'];
219
            } else {
220
                $user = $DB->get_record('user', array('username' => $data['reviewer']), '*', MUST_EXIST);
221
                $data['reviewerid'] = $user->id;
222
            }
223
            unset($data['reviewer']);
224
        }
225
 
226
        if (isset($data['status'])) {
227
            switch ($data['status']) {
228
                case 'draft':
229
                    $status = plan::STATUS_DRAFT;
230
                    break;
231
                case 'in review':
232
                    $status = plan::STATUS_IN_REVIEW;
233
                    break;
234
                case 'waiting for review':
235
                    $status = plan::STATUS_WAITING_FOR_REVIEW;
236
                    break;
237
                case 'active':
238
                    $status = plan::STATUS_ACTIVE;
239
                    break;
240
                case 'complete':
241
                    $status = plan::STATUS_COMPLETE;
242
                    break;
243
                default:
244
                    throw new Exception('Could not resolve plan status with: "' . $data['status'] . '"');
245
                    break;
246
            }
247
 
248
            $data['status'] = $status;
249
        }
250
 
251
        return $data;
252
    }
253
 
254
    /**
255
     * Adapt creating user_evidence from user username.
256
     *
257
     * @param array $data
258
     * @return array
259
     */
260
    protected function preprocess_user_evidence($data) {
261
        global $DB;
262
 
263
        if (isset($data['user'])) {
264
            $user = $DB->get_record('user', array('username' => $data['user']), '*', MUST_EXIST);
265
            $data['userid'] = $user->id;
266
        }
267
        unset($data['user']);
268
        return $data;
269
    }
270
 
271
    /**
272
     * Adapt creating plan_competency from plan name and competency shortname.
273
     *
274
     * @param array $data
275
     * @return array
276
     */
277
    protected function preprocess_plan_competency($data) {
278
        global $DB;
279
 
280
        if (isset($data['plan'])) {
281
            $plan = $DB->get_record(plan::TABLE, array('name' => $data['plan']), '*', MUST_EXIST);
282
            $data['planid'] = $plan->id;
283
        }
284
        unset($data['plan']);
285
 
286
        if (isset($data['competency'])) {
287
            $competency = $DB->get_record(competency::TABLE, array('shortname' => $data['competency']), '*', MUST_EXIST);
288
            $data['competencyid'] = $competency->id;
289
        }
290
        unset($data['competency']);
291
        return $data;
292
    }
293
 
294
    /**
295
     * Adapt creating plan_competency from user evidence name and competency shortname.
296
     *
297
     * @param array $data
298
     * @return array
299
     */
300
    protected function preprocess_user_evidence_competency($data) {
301
        global $DB;
302
 
303
        if (isset($data['userevidence'])) {
304
            $userevidence = $DB->get_record(user_evidence::TABLE, array('name' => $data['userevidence']), '*', MUST_EXIST);
305
            $data['userevidenceid'] = $userevidence->id;
306
        }
307
        unset($data['userevidence']);
308
 
309
        if (isset($data['competency'])) {
310
            $competency = $DB->get_record(competency::TABLE, array('shortname' => $data['competency']), '*', MUST_EXIST);
311
            $data['competencyid'] = $competency->id;
312
        }
313
        unset($data['competency']);
314
        return $data;
315
    }
316
 
317
    /**
318
     * Adapt creating user_competency from user name and competency shortname.
319
     *
320
     * @param array $data
321
     * @return array
322
     */
323
    protected function preprocess_user_competency($data) {
324
        global $DB;
325
 
326
        if (isset($data['user'])) {
327
            $user = $DB->get_record('user', array('username' => $data['user']), '*', MUST_EXIST);
328
            $data['userid'] = $user->id;
329
        }
330
        unset($data['user']);
331
 
332
        if (isset($data['competency'])) {
333
            $competency = $DB->get_record(competency::TABLE, array('shortname' => $data['competency']), '*', MUST_EXIST);
334
            $data['competencyid'] = $competency->id;
335
        }
336
        unset($data['competency']);
337
 
338
        return $data;
339
    }
340
 
341
    /**
342
     * Adapt creating user_competency_plan from user name, competency shortname and plan name.
343
     *
344
     * @param array $data
345
     * @return array
346
     */
347
    protected function preprocess_user_competency_plan($data) {
348
        global $DB;
349
 
350
        if (isset($data['user'])) {
351
            $user = $DB->get_record('user', array('username' => $data['user']), '*', MUST_EXIST);
352
            $data['userid'] = $user->id;
353
        }
354
        unset($data['user']);
355
 
356
        if (isset($data['competency'])) {
357
            $competency = $DB->get_record(competency::TABLE, array('shortname' => $data['competency']), '*', MUST_EXIST);
358
            $data['competencyid'] = $competency->id;
359
        }
360
        unset($data['competency']);
361
 
362
        if (isset($data['plan'])) {
363
            $plan = $DB->get_record(plan::TABLE, array('name' => $data['plan']), '*', MUST_EXIST);
364
            $data['planid'] = $plan->id;
365
        }
366
        unset($data['plan']);
367
 
368
        return $data;
369
    }
370
 
371
}