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
 * Contains the event tests for the module customcert.
19
 *
20
 * @package   mod_customcert
21
 * @copyright 2023 Mark Nelson <mdjnelson@gmail.com>
22
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23
 */
24
 
25
namespace mod_customcert\event;
26
 
27
/**
28
 * Contains the event tests for the module customcert.
29
 *
30
 * @package   mod_customcert
31
 * @copyright 2023 Mark Nelson <mdjnelson@gmail.com>
32
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
33
 */
34
class events_test extends \advanced_testcase {
35
 
36
    public function setUp(): void {
37
        $this->resetAfterTest();
38
    }
39
 
40
    /**
41
     * Tests the events are fired correctly when creating a template.
42
     *
43
     * @covers \mod_customcert\template::create
44
     */
45
    public function test_creating_a_template(): void {
46
        // Trigger and capture the event.
47
        $sink = $this->redirectEvents();
48
        $template = \mod_customcert\template::create('Test name', \context_system::instance()->id);
49
        $events = $sink->get_events();
50
        $this->assertCount(1, $events);
51
 
52
        $event = reset($events);
53
 
54
        // Check that the event data is valid.
55
        $this->assertInstanceOf('\mod_customcert\event\template_created', $event);
56
        $this->assertEquals($template->get_id(), $event->objectid);
57
        $this->assertEquals(\context_system::instance()->id, $event->contextid);
58
    }
59
 
60
    /**
61
     * Tests the events are fired correctly when creating a page.
62
     *
63
     * @covers \mod_customcert\template::add_page
64
     */
65
    public function test_creating_a_page(): void {
66
        $template = \mod_customcert\template::create('Test name', \context_system::instance()->id);
67
 
68
        $sink = $this->redirectEvents();
69
        $page = $template->add_page();
70
        $events = $sink->get_events();
71
        $this->assertCount(2, $events);
72
 
73
        $pagecreatedevent = array_shift($events);
74
        $templateupdateevent = array_shift($events);
75
 
76
        // Check that the event data is valid.
77
        $this->assertInstanceOf('\mod_customcert\event\page_created', $pagecreatedevent);
78
        $this->assertEquals($page, $pagecreatedevent->objectid);
79
        $this->assertEquals(\context_system::instance()->id, $pagecreatedevent->contextid);
80
        $this->assertDebuggingNotCalled();
81
 
82
        $this->assertInstanceOf('\mod_customcert\event\template_updated', $templateupdateevent);
83
        $this->assertEquals($template->get_id(), $templateupdateevent->objectid);
84
        $this->assertEquals(\context_system::instance()->id, $templateupdateevent->contextid);
85
        $this->assertDebuggingNotCalled();
86
    }
87
 
88
    /**
89
     * Tests the events are fired correctly when moving an item.
90
     *
91
     * @covers \mod_customcert\template::move_item
92
     */
93
    public function test_moving_item(): void {
94
        $template = \mod_customcert\template::create('Test name', \context_system::instance()->id);
95
        $page1id = $template->add_page();
96
        $template->add_page();
97
 
98
        $sink = $this->redirectEvents();
99
        $template->move_item('page', $page1id, 'down');
100
        $events = $sink->get_events();
101
        $this->assertCount(1, $events);
102
 
103
        $event = reset($events);
104
        $this->assertInstanceOf('\mod_customcert\event\template_updated', $event);
105
        $this->assertEquals($template->get_id(), $event->objectid);
106
        $this->assertEquals(\context_system::instance()->id, $event->contextid);
107
        $this->assertDebuggingNotCalled();
108
    }
109
 
110
    /**
111
     * Tests the events are fired correctly when updating a template.
112
     *
113
     * @covers \mod_customcert\template::save
114
     */
115
    public function test_updating_a_template(): void {
116
        $template = \mod_customcert\template::create('Test name', \context_system::instance()->id);
117
 
118
        // Date we are updating to.
119
        $data = new \stdClass();
120
        $data->id = $template->get_id();
121
        $data->name = 'Test name 2';
122
 
123
        // Trigger and capture the event.
124
        $sink = $this->redirectEvents();
125
        $template->save($data);
126
        $events = $sink->get_events();
127
        $this->assertCount(1, $events);
128
 
129
        $event = reset($events);
130
 
131
        // Check that the event data is valid.
132
        $this->assertInstanceOf('\mod_customcert\event\template_updated', $event);
133
        $this->assertEquals($template->get_id(), $event->objectid);
134
        $this->assertEquals(\context_system::instance()->id, $event->contextid);
135
    }
136
 
137
    /**
138
     * Tests the events are fired correctly when updating a template with no
139
     * changes.
140
     *
141
     * @covers \mod_customcert\template::save
142
     */
143
    public function test_updating_a_template_no_change(): void {
144
        $template = \mod_customcert\template::create('Test name', \context_system::instance()->id);
145
 
146
        $data = new \stdClass();
147
        $data->id = $template->get_id();
148
        $data->name = $template->get_name();
149
 
150
        // Trigger and capture the event.
151
        $sink = $this->redirectEvents();
152
        $template->save($data);
153
        $events = $sink->get_events();
154
 
155
        // Check that no events were triggered.
156
        $this->assertCount(0, $events);
157
    }
158
 
159
    /**
160
     * Tests the events are fired correctly when deleting a template.
161
     *
162
     * @covers \mod_customcert\template::delete
163
     */
164
    public function test_deleting_a_template(): void {
165
        global $DB;
166
 
167
        $template = \mod_customcert\template::create('Test name', \context_system::instance()->id);
168
 
169
        $data = new \stdClass();
170
        $data->name = $template->get_name();
171
        $template->save($data);
172
 
173
        $page1id = $template->add_page();
174
 
175
        // Check the created objects exist in the database as we will check the
176
        // triggered events correspond to the deletion of these records.
177
        $templates = $DB->get_records('customcert_templates', ['id' => $template->get_id()]);
178
        $this->assertEquals(1, count($templates));
179
        $pages = $DB->get_records('customcert_pages', ['templateid' => $template->get_id()]);
180
        $this->assertEquals(1, count($pages));
181
 
182
        $sink = $this->redirectEvents();
183
        $template->delete();
184
        $events = $sink->get_events();
185
        $this->assertCount(2, $events);
186
 
187
        $event = array_shift($events);
188
        $this->assertInstanceOf('\mod_customcert\event\page_deleted', $event);
189
        $this->assertEquals($page1id, $event->objectid);
190
        $this->assertEquals(\context_system::instance()->id, $event->contextid);
191
        $this->assertDebuggingNotCalled();
192
 
193
        $event = array_shift($events);
194
        $this->assertInstanceOf('\mod_customcert\event\template_deleted', $event);
195
        $this->assertEquals($template->get_id(), $event->objectid);
196
        $this->assertEquals(\context_system::instance()->id, $event->contextid);
197
        $this->assertDebuggingNotCalled();
198
 
199
        // Check the above page_deleted and template_deleted events correspond
200
        // to actual deletions in the database.
201
        $templates = $DB->get_records('customcert_templates', ['id' => $template->get_id()]);
202
        $this->assertEquals(0, count($templates));
203
        $pages = $DB->get_records('customcert_pages', ['templateid' => $template->get_id()]);
204
        $this->assertEquals(0, count($pages));
205
    }
206
 
207
    /**
208
     * Tests the events are fired correctly when deleting a page.
209
     *
210
     * @covers \mod_customcert\template::delete_page
211
     */
212
    public function test_deleting_a_page(): void {
213
        $template = \mod_customcert\template::create('Test name', \context_system::instance()->id);
214
        $page1id = $template->add_page();
215
 
216
        $sink = $this->redirectEvents();
217
        $template->delete_page($page1id);
218
        $events = $sink->get_events();
219
        $this->assertCount(2, $events);
220
 
221
        $pagedeletedevent = array_shift($events);
222
        $templateupdatedevent = array_shift($events);
223
 
224
        // Check that the event data is valid.
225
        $this->assertInstanceOf('\mod_customcert\event\page_deleted', $pagedeletedevent);
226
        $this->assertEquals($page1id, $pagedeletedevent->objectid);
227
        $this->assertEquals(\context_system::instance()->id, $pagedeletedevent->contextid);
228
        $this->assertDebuggingNotCalled();
229
 
230
        $this->assertInstanceOf('\mod_customcert\event\template_updated', $templateupdatedevent);
231
        $this->assertEquals($template->get_id(), $templateupdatedevent->objectid);
232
        $this->assertEquals(\context_system::instance()->id, $templateupdatedevent->contextid);
233
        $this->assertDebuggingNotCalled();
234
    }
235
 
236
    /**
237
     * Tests the events are fired correctly when saving a page.
238
     *
239
     * @covers \mod_customcert\template::save_page
240
     */
241
    public function test_updating_a_page() {
242
        $template = \mod_customcert\template::create('Test name', \context_system::instance()->id);
243
        $pageid = $template->add_page();
244
 
245
        $width = 'pagewidth_' . $pageid;
246
        $height = 'pageheight_' . $pageid;
247
        $leftmargin = 'pageleftmargin_' . $pageid;
248
        $rightmargin = 'pagerightmargin_' . $pageid;
249
 
250
        $p = new \stdClass();
251
        $p->tid = $template->get_id();
252
        $p->$width = 1;
253
        $p->$height = 1;
254
        $p->$leftmargin = 1;
255
        $p->$rightmargin = 1;
256
 
257
        $sink = $this->redirectEvents();
258
        $template->save_page($p);
259
        $events = $sink->get_events();
260
        $this->assertCount(1, $events);
261
 
262
        $pageupdatedevent = array_shift($events);
263
 
264
        // Check that the event data is valid.
265
        $this->assertInstanceOf('\mod_customcert\event\page_updated', $pageupdatedevent);
266
        $this->assertEquals($pageid, $pageupdatedevent->objectid);
267
        $this->assertEquals(\context_system::instance()->id, $pageupdatedevent->contextid);
268
        $this->assertDebuggingNotCalled();
269
    }
270
 
271
    /**
272
     * Tests the events are fired correctly when saving form elements.
273
     *
274
     * @covers \mod_customcert\element::save_form_elements
275
     */
276
    public function test_save_form_elements_insert() {
277
        $template = \mod_customcert\template::create('Test name', \context_system::instance()->id);
278
        $page1id = $template->add_page();
279
 
280
        $data = new \stdClass();
281
        $data->pageid = $page1id;
282
        $data->name = 'A name';
283
        $data->element = 'text';
284
        $data->text = 'Some text';
285
 
286
        $sink = $this->redirectEvents();
287
        $e = \mod_customcert\element_factory::get_element_instance($data);
288
        $e->save_form_elements($data);
289
        $events = $sink->get_events();
290
        $this->assertCount(1, $events);
291
 
292
        $event = reset($events);
293
 
294
        // Check that the event data is valid.
295
        $this->assertInstanceOf('\mod_customcert\event\element_created', $event);
296
        $this->assertEquals($e->get_id(), $event->objectid);
297
        $this->assertEquals(\context_system::instance()->id, $event->contextid);
298
        $this->assertDebuggingNotCalled();
299
    }
300
 
301
    /**
302
     * Tests the events are fired correctly when saving form elements.
303
     *
304
     * @covers \mod_customcert\element::save_form_elements
305
     */
306
    public function test_save_form_elements_update() {
307
        global $DB;
308
 
309
        $template = \mod_customcert\template::create('Test name', \context_system::instance()->id);
310
        $page1id = $template->add_page();
311
 
312
        // Add an element to the page.
313
        $element = new \stdClass();
314
        $element->pageid = $page1id;
315
        $element->name = 'Image';
316
        $elementid = $DB->insert_record('customcert_elements', $element);
317
 
318
        $element = $DB->get_record('customcert_elements', ['id' => $elementid]);
319
 
320
        // Add an element to the page.
321
        $element = new \customcertelement_text\element($element);
322
 
323
        $data = new \stdClass();
324
        $data->name = 'A new name';
325
        $data->text = 'New text';
326
 
327
        $sink = $this->redirectEvents();
328
        $element->save_form_elements($data);
329
        $events = $sink->get_events();
330
        $this->assertCount(1, $events);
331
 
332
        $event = reset($events);
333
 
334
        // Check that the event data is valid.
335
        $this->assertInstanceOf('\mod_customcert\event\element_updated', $event);
336
        $this->assertEquals($element->get_id(), $event->objectid);
337
        $this->assertEquals(\context_system::instance()->id, $event->contextid);
338
        $this->assertDebuggingNotCalled();
339
    }
340
 
341
    /**
342
     * Tests the events are fired correctly when copying to a template.
343
     *
344
     * @covers \mod_customcert\element::copy_to_template
345
     */
346
    public function test_copy_to_template() {
347
        global $DB;
348
 
349
        $template = \mod_customcert\template::create('Test name', \context_system::instance()->id);
350
        $page1id = $template->add_page();
351
 
352
        // Add an element to the page.
353
        $element = new \stdClass();
354
        $element->pageid = $page1id;
355
        $element->name = 'image';
356
        $element->element = 'image';
357
        $element->data = '';
358
        $element->id = $DB->insert_record('customcert_elements', $element);
359
 
360
        // Add another template.
361
        $template2 = \mod_customcert\template::create('Test name 2', \context_system::instance()->id);
362
 
363
        $sink = $this->redirectEvents();
364
        $template->copy_to_template($template2);
365
        $events = $sink->get_events();
366
        $this->assertCount(2, $events);
367
 
368
        $pagecreatedevent = array_shift($events);
369
        $elementcreatedevent = array_shift($events);
370
 
371
        // Check that the event data is valid.
372
        $this->assertInstanceOf('\mod_customcert\event\page_created', $pagecreatedevent);
373
        $this->assertEquals(\context_system::instance()->id, $pagecreatedevent->contextid);
374
        $this->assertDebuggingNotCalled();
375
 
376
        $this->assertInstanceOf('\mod_customcert\event\element_created', $elementcreatedevent);
377
        $this->assertEquals(\context_system::instance()->id, $elementcreatedevent->contextid);
378
        $this->assertDebuggingNotCalled();
379
    }
380
 
381
    /**
382
     * Tests the events are fired correctly when loading a template into a
383
     * course-level certificate.
384
     *
385
     * @covers \mod_customcert\element::copy_to_template
386
     */
387
    public function test_load_template(): void {
388
        global $DB;
389
 
390
        $template = \mod_customcert\template::create('Test name', \context_system::instance()->id);
391
        $page1id = $template->add_page();
392
 
393
        // Add an element to the page.
394
        $element = new \stdClass();
395
        $element->pageid = $page1id;
396
        $element->name = 'image';
397
        $element->element = 'image';
398
        $element->data = '';
399
        $element->id = $DB->insert_record('customcert_elements', $element);
400
 
401
        $course = $this->getDataGenerator()->create_course();
402
        $activity = $this->getDataGenerator()->create_module('customcert', ['course' => $course->id]);
403
        $contextid = \context_module::instance($activity->cmid)->id;
404
        $template2 = \mod_customcert\template::create($activity->name, $contextid);
405
 
406
        $sink = $this->redirectEvents();
407
        $template->copy_to_template($template2);
408
        $events = $sink->get_events();
409
        $this->assertCount(3, $events);
410
 
411
        $pagecreatedevent = array_shift($events);
412
        $elementcreatedevent = array_shift($events);
413
        $templateupdatedevent = array_shift($events);
414
 
415
        // Check that the event data is valid.
416
        $this->assertInstanceOf('\mod_customcert\event\page_created', $pagecreatedevent);
417
        $this->assertEquals($contextid, $pagecreatedevent->contextid);
418
        $this->assertDebuggingNotCalled();
419
 
420
        $this->assertInstanceOf('\mod_customcert\event\element_created', $elementcreatedevent);
421
        $this->assertEquals($contextid, $elementcreatedevent->contextid);
422
        $this->assertDebuggingNotCalled();
423
 
424
        $this->assertInstanceOf('\mod_customcert\event\template_updated', $templateupdatedevent);
425
        $this->assertEquals($contextid, $templateupdatedevent->contextid);
426
        $this->assertDebuggingNotCalled();
427
    }
428
 
429
    /**
430
     * Tests the events are fired correctly when deleting an element
431
     *
432
     * @covers \mod_customcert\template::delete_element
433
     */
434
    public function test_deleting_an_element(): void {
435
        global $DB;
436
 
437
        $template = \mod_customcert\template::create('Test name', \context_system::instance()->id);
438
        $page1id = $template->add_page();
439
 
440
        // Add an element to the page.
441
        $element = new \stdClass();
442
        $element->pageid = $page1id;
443
        $element->name = 'image';
444
        $element->element = 'image';
445
        $element->data = '';
446
        $element->id = $DB->insert_record('customcert_elements', $element);
447
 
448
        $sink = $this->redirectEvents();
449
        $template->delete_element($element->id);
450
        $events = $sink->get_events();
451
        $this->assertCount(2, $events);
452
 
453
        $elementdeletedevent = array_shift($events);
454
        $templateupdatedevent = array_shift($events);
455
 
456
        // Check that the event data is valid.
457
        $this->assertInstanceOf('\mod_customcert\event\element_deleted', $elementdeletedevent);
458
        $this->assertEquals($elementdeletedevent->objectid, $element->id);
459
        $this->assertEquals($elementdeletedevent->contextid, \context_system::instance()->id);
460
        $this->assertDebuggingNotCalled();
461
 
462
        $this->assertInstanceOf('\mod_customcert\event\template_updated', $templateupdatedevent);
463
        $this->assertEquals($templateupdatedevent->objectid, $template->get_id());
464
        $this->assertEquals($templateupdatedevent->contextid, \context_system::instance()->id);
465
        $this->assertDebuggingNotCalled();
466
    }
467
}