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
namespace enrol_lti;
18
 
19
use enrol_lti\data_connector;
20
use IMSGlobal\LTI\ToolProvider\ConsumerNonce;
21
use IMSGlobal\LTI\ToolProvider\Context;
22
use IMSGlobal\LTI\ToolProvider\ResourceLink;
23
use IMSGlobal\LTI\ToolProvider\ResourceLinkShare;
24
use IMSGlobal\LTI\ToolProvider\ResourceLinkShareKey;
25
use IMSGlobal\LTI\ToolProvider\ToolConsumer;
26
use IMSGlobal\LTI\ToolProvider\ToolProvider;
27
use IMSGlobal\LTI\ToolProvider\ToolProxy;
28
use IMSGlobal\LTI\ToolProvider\User;
29
 
30
/**
31
 * Test the data_connector class.
32
 *
33
 * @package enrol_lti
34
 * @copyright 2016 Jun Pataleta <jun@moodle.com>
35
 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
36
 */
1441 ariadna 37
final class data_connector_test extends \advanced_testcase {
1 efrain 38
 
39
    /**
40
     * Test set up.
41
     *
42
     * This is executed before running any test in this file.
43
     */
44
    public function setUp(): void {
1441 ariadna 45
        parent::setUp();
1 efrain 46
        $this->resetAfterTest();
47
 
48
        // Set this user as the admin.
49
        $this->setAdminUser();
50
    }
51
 
52
    /**
53
     * Test for data_connector::loadToolConsumer().
54
     */
11 efrain 55
    public function test_load_consumer(): void {
1 efrain 56
        $consumer = new ToolConsumer();
57
        $dc = new data_connector();
58
 
59
        // Consumer has not been saved to the database, so this should return false.
60
        $this->assertFalse($dc->loadToolConsumer($consumer));
61
 
62
        // Save a consumer into the DB.
63
        $time = time();
64
        $data = [
65
            'name' => 'TestName',
66
            'secret' => 'TestSecret',
67
            'ltiversion' => ToolProvider::LTI_VERSION1,
68
            'consumername' => 'TestConsumerName',
69
            'consumerversion' => 'TestConsumerVersion',
70
            'consumerguid' => 'TestConsumerGuid',
71
            'profile' => json_decode('{TestProfile}'),
72
            'toolproxy' => 'TestProxy',
73
            'settings' => ['setting1' => 'TestSetting 1', 'setting2' => 'TestSetting 2'],
74
            'protected' => 1,
75
            'enabled' => 0,
76
            'enablefrom' => $time,
77
            'enableuntil' => $time + 1,
78
            'lastaccess' => strtotime(date('Y-m-d')),
79
        ];
80
        $consumer->name = $data['name'];
81
        $consumer->setKey('TestKey');
82
        $consumer->secret = $data['secret'];
83
        $consumer->ltiVersion = $data['ltiversion'];
84
        $consumer->consumerName = $data['consumername'];
85
        $consumer->consumerVersion = $data['consumerversion'];
86
        $consumer->consumerGuid = $data['consumerguid'];
87
        $consumer->profile = $data['profile'];
88
        $consumer->toolProxy = $data['toolproxy'];
89
        $consumer->setSettings($data['settings']);
90
        $consumer->protected = true;
91
        $consumer->enabled = false;
92
        $consumer->enableFrom = $data['enablefrom'];
93
        $consumer->enableUntil = $data['enableuntil'];
94
        $consumer->lastAccess = $data['lastaccess'];
95
 
96
        $dc->saveToolConsumer($consumer);
97
        $this->assertTrue($dc->loadToolConsumer($consumer));
98
        $this->assertEquals($consumer->name, 'TestName');
99
        $this->assertEquals($consumer->getKey(), 'TestKey');
100
        $this->assertEquals($consumer->secret, 'TestSecret');
101
        $this->assertEquals($consumer->ltiVersion, $data['ltiversion']);
102
        $this->assertEquals($consumer->consumerName, $data['consumername']);
103
        $this->assertEquals($consumer->consumerVersion, $data['consumerversion']);
104
        $this->assertEquals($consumer->consumerGuid, $data['consumerguid']);
105
        $this->assertEquals($consumer->profile, $data['profile']);
106
        $this->assertEquals($consumer->toolProxy, $data['toolproxy']);
107
        $this->assertEquals($consumer->getSettings(), $data['settings']);
108
        $this->assertTrue($consumer->protected);
109
        $this->assertFalse($consumer->enabled);
110
        $this->assertEquals($consumer->enableFrom, $data['enablefrom']);
111
        $this->assertEquals($consumer->enableUntil, $data['enableuntil']);
112
        $this->assertEquals($consumer->lastAccess, $data['lastaccess']);
113
    }
114
 
115
    /**
116
     * Test for data_connector::saveToolConsumer().
117
     */
11 efrain 118
    public function test_save_consumer(): void {
1 efrain 119
        $dc = new data_connector();
120
 
121
        $time = time();
122
        $data = [
123
            'name' => 'TestName',
124
            'secret' => 'TestSecret',
125
            'ltiversion' => ToolProvider::LTI_VERSION1,
126
            'consumername' => 'TestConsumerName',
127
            'consumerversion' => 'TestConsumerVersion',
128
            'consumerguid' => 'TestConsumerGuid',
129
            'profile' => json_decode('{TestProfile}'),
130
            'toolproxy' => 'TestProxy',
131
            'settings' => ['setting1' => 'TestSetting 1', 'setting2' => 'TestSetting 2'],
132
            'protected' => 1,
133
            'enabled' => 0,
134
            'enablefrom' => $time,
135
            'enableuntil' => $time + 1,
136
            'lastaccess' => strtotime(date('Y-m-d')),
137
        ];
138
        $consumer = new ToolConsumer();
139
        $consumer->name = $data['name'];
140
        $consumer->setKey('TestKey');
141
        $consumer->secret = $data['secret'];
142
        $consumer->ltiVersion = $data['ltiversion'];
143
        $consumer->consumerName = $data['consumername'];
144
        $consumer->consumerVersion = $data['consumerversion'];
145
        $consumer->consumerGuid = $data['consumerguid'];
146
        $consumer->profile = $data['profile'];
147
        $consumer->toolProxy = $data['toolproxy'];
148
        $consumer->setSettings($data['settings']);
149
        $consumer->protected = true;
150
        $consumer->enabled = false;
151
        $consumer->enableFrom = $data['enablefrom'];
152
        $consumer->enableUntil = $data['enableuntil'];
153
        $consumer->lastAccess = $data['lastaccess'];
154
 
155
        // Save new consumer into the DB.
156
        $this->assertTrue($dc->saveToolConsumer($consumer));
157
        // Check saved values.
158
        $this->assertEquals($consumer->name, $data['name']);
159
        $this->assertEquals($consumer->getKey(), 'TestKey');
160
        $this->assertEquals($consumer->secret, $data['secret']);
161
        $this->assertEquals($consumer->ltiVersion, $data['ltiversion']);
162
        $this->assertEquals($consumer->consumerName, $data['consumername']);
163
        $this->assertEquals($consumer->consumerVersion, $data['consumerversion']);
164
        $this->assertEquals($consumer->consumerGuid, $data['consumerguid']);
165
        $this->assertEquals($consumer->profile, $data['profile']);
166
        $this->assertEquals($consumer->toolProxy, $data['toolproxy']);
167
        $this->assertEquals($consumer->getSettings(), $data['settings']);
168
        $this->assertTrue($consumer->protected);
169
        $this->assertFalse($consumer->enabled);
170
        $this->assertEquals($consumer->enableFrom, $data['enablefrom']);
171
        $this->assertEquals($consumer->enableUntil, $data['enableuntil']);
172
        $this->assertEquals($consumer->lastAccess, $data['lastaccess']);
173
 
174
        // Edit values.
175
        $edit = 'EDIT';
176
        $consumer->name = $data['name'] . $edit;
177
        $consumer->setKey('TestKey' . $edit);
178
        $consumer->secret = $data['secret'] . $edit;
179
        $consumer->ltiVersion = ToolProvider::LTI_VERSION2;
180
        $consumer->consumerName = $data['consumername'] . $edit;
181
        $consumer->consumerVersion = $data['consumerversion'] . $edit;
182
        $consumer->consumerGuid = $data['consumerguid'] . $edit;
183
        $editprofile = json_decode('{TestProfile}');
184
        $consumer->profile = $editprofile;
185
        $consumer->toolProxy = $data['toolproxy'] . $edit;
186
        $editsettings = ['setting1' => 'TestSetting 1'  . $edit, 'setting2' => 'TestSetting 2' . $edit];
187
        $consumer->setSettings($editsettings);
188
        $consumer->protected = null;
189
        $consumer->enabled = null;
190
        $consumer->enableFrom = $data['enablefrom'] + 100;
191
        $consumer->enableUntil = $data['enableuntil'] + 100;
192
 
193
        // Save edited values.
194
        $this->assertTrue($dc->saveToolConsumer($consumer));
195
        // Check edited values.
196
        $this->assertEquals($consumer->name, $data['name'] . $edit);
197
        $this->assertEquals($consumer->getKey(), 'TestKey' . $edit);
198
        $this->assertEquals($consumer->secret, $data['secret'] . $edit);
199
        $this->assertEquals($consumer->ltiVersion, ToolProvider::LTI_VERSION2);
200
        $this->assertEquals($consumer->consumerName, $data['consumername'] . $edit);
201
        $this->assertEquals($consumer->consumerVersion, $data['consumerversion'] . $edit);
202
        $this->assertEquals($consumer->consumerGuid, $data['consumerguid'] . $edit);
203
        $this->assertEquals($consumer->profile, $editprofile);
204
        $this->assertEquals($consumer->toolProxy, $data['toolproxy'] . $edit);
205
        $this->assertEquals($consumer->getSettings(), $editsettings);
206
        $this->assertNull($consumer->protected);
207
        $this->assertNull($consumer->enabled);
208
        $this->assertEquals($consumer->enableFrom, $data['enablefrom'] + 100);
209
        $this->assertEquals($consumer->enableUntil, $data['enableuntil'] + 100);
210
    }
211
 
212
    /**
213
     * Test for data_connector::deleteToolConsumer().
214
     */
11 efrain 215
    public function test_delete_tool_consumer(): void {
1 efrain 216
        $dc = new data_connector();
217
        $data = [
218
            'name' => 'TestName',
219
            'secret' => 'TestSecret',
220
            'ltiversion' => ToolProvider::LTI_VERSION1,
221
        ];
222
        $consumer = new ToolConsumer(null, $dc);
223
        $consumer->name = $data['name'];
224
        $consumer->setKey('TestKey');
225
        $consumer->secret = $data['secret'];
226
        $consumer->save();
227
 
228
        $nonce = new ConsumerNonce($consumer, 'testnonce');
229
        $nonce->save();
230
 
231
        $context = Context::fromConsumer($consumer, 'testlticontext');
232
        $context->save();
233
 
234
        $resourcelink = ResourceLink::fromConsumer($consumer, 'testresourcelinkid');
235
        $resourcelink->setContextId($context->getRecordId());
236
        $resourcelink->save();
237
        $this->assertEquals($consumer->getRecordId(), $resourcelink->getConsumer()->getRecordId());
238
 
239
        $resourcelinkchild = ResourceLink::fromConsumer($consumer, 'testresourcelinkchildid');
240
        $resourcelinkchild->primaryResourceLinkId = $resourcelink->getRecordId();
241
        $resourcelinkchild->shareApproved = true;
242
        $resourcelinkchild->setContextId($context->getRecordId());
243
        $resourcelinkchild->save();
244
        $this->assertEquals($consumer->getRecordId(), $resourcelinkchild->getConsumer()->getRecordId());
245
        $this->assertEquals($resourcelink->getRecordId(), $resourcelinkchild->primaryResourceLinkId);
246
        $this->assertTrue($resourcelinkchild->shareApproved);
247
 
248
        $resourcelinkchild2 = clone $resourcelink;
249
        $resourcelinkchild2->setRecordId(null);
250
        $resourcelinkchild2->setConsumerId(null);
251
        $resourcelinkchild2->setContextId(0);
252
        $resourcelinkchild2->primaryResourceLinkId = $resourcelink->getRecordId();
253
        $resourcelinkchild2->shareApproved = true;
254
        $resourcelinkchild2->save();
255
        $this->assertNull($resourcelinkchild2->getConsumer()->getRecordId());
256
        $this->assertEquals(0, $resourcelinkchild2->getContextId());
257
        $this->assertNotEquals($resourcelink->getRecordId(), $resourcelinkchild2->getRecordId());
258
 
259
        $resourcelinksharekey = new ResourceLinkShareKey($resourcelink);
260
        $resourcelinksharekey->save();
261
 
262
        $user = User::fromResourceLink($resourcelink, '');
263
        $user->ltiResultSourcedId = 'testLtiResultSourcedId';
264
        $dc->saveUser($user);
265
 
266
        // Confirm that tool consumer deletion processing ends successfully.
267
        $this->assertTrue($dc->deleteToolConsumer($consumer));
268
 
269
        // Consumer object should have been initialised.
270
        foreach ($consumer as $key => $value) {
271
            $this->assertTrue(empty($value));
272
        }
273
 
274
        // Nonce record should have been deleted.
275
        $this->assertFalse($dc->loadConsumerNonce($nonce));
276
        // Share key record record should have been deleted.
277
        $this->assertFalse($dc->loadResourceLinkShareKey($resourcelinksharekey));
278
        // Resource record link should have been deleted.
279
        $this->assertFalse($dc->loadResourceLink($resourcelink));
280
        // Consumer record should have been deleted.
281
        $this->assertFalse($dc->loadToolConsumer($consumer));
282
        // Resource links for contexts in this consumer should have been deleted. Even child ones.
283
        $this->assertFalse($dc->loadResourceLink($resourcelinkchild));
284
 
285
        // Child resource link primaryResourceLinkId and shareApproved attributes should have been set to null.
286
        $this->assertTrue($dc->loadResourceLink($resourcelinkchild2));
287
        $this->assertNull($resourcelinkchild2->primaryResourceLinkId);
288
        $this->assertNull($resourcelinkchild2->shareApproved);
289
    }
290
 
291
    /**
292
     * Test for data_connector::getToolConsumers().
293
     */
11 efrain 294
    public function test_get_tool_consumers(): void {
1 efrain 295
        $dc = new data_connector();
296
 
297
        $consumers = $dc->getToolConsumers();
298
        // Does not return null.
299
        $this->assertNotNull($consumers);
300
        // But returns empty array when no consumers found.
301
        $this->assertEmpty($consumers);
302
 
303
        $data = [
304
            'name' => 'TestName',
305
            'secret' => 'TestSecret',
306
            'ltiversion' => ToolProvider::LTI_VERSION1,
307
        ];
308
        $count = 3;
309
        for ($i = 0; $i < $count; $i++) {
310
            $consumer = new ToolConsumer(null, $dc);
311
            $consumer->name = $data['name'] . $i;
312
            $consumer->setKey('TestKey' . $i);
313
            $consumer->secret = $data['secret'] . $i;
314
            $consumer->ltiVersion = $data['ltiversion'];
315
            $consumer->save();
316
        }
317
 
318
        $consumers = $dc->getToolConsumers();
319
 
320
        $this->assertNotEmpty($consumers);
321
        $this->assertCount($count, $consumers);
322
 
323
        // Check values.
324
        foreach ($consumers as $index => $record) {
325
            $this->assertEquals($data['name'] . $index, $record->name);
326
            $this->assertEquals('TestKey' . $index, $record->getKey());
327
            $this->assertEquals($data['secret'] . $index, $record->secret);
328
            $record->ltiVersion = $data['ltiversion'];
329
        }
330
    }
331
 
332
    /**
333
     * Test for data_connector::loadToolProxy().
334
     */
11 efrain 335
    public function test_get_tool_proxy(): void {
1 efrain 336
        $dc = new data_connector();
337
        $toolproxy = new ToolProxy($dc);
338
        $this->assertFalse($dc->loadToolProxy($toolproxy));
339
    }
340
 
341
    /**
342
     * Test for data_connector::saveToolProxy().
343
     */
11 efrain 344
    public function test_save_tool_proxy(): void {
1 efrain 345
        $dc = new data_connector();
346
        $toolproxy = new ToolProxy($dc);
347
        $this->assertFalse($dc->saveToolProxy($toolproxy));
348
    }
349
 
350
    /**
351
     * Test for data_connector::deleteToolProxy().
352
     */
11 efrain 353
    public function test_delete_tool_proxy(): void {
1 efrain 354
        $dc = new data_connector();
355
        $toolproxy = new ToolProxy($dc);
356
        $this->assertFalse($dc->deleteToolProxy($toolproxy));
357
    }
358
 
359
    /**
360
     * Test for data_connector::loadContext().
361
     */
11 efrain 362
    public function test_load_context(): void {
1 efrain 363
        $dc = new data_connector();
364
        $consumer = new ToolConsumer(null, $dc);
365
        $consumer->name = 'testconsumername';
366
        $consumer->setKey('TestKey');
367
        $consumer->secret = 'testsecret';
368
        $consumer->save();
369
 
370
        $title = 'testcontexttitle';
371
        $settings = ['a', 'b', 'c'];
372
        $lticontextid = 'testlticontextid';
373
        $context = Context::fromConsumer($consumer, $lticontextid);
374
        $context->title = $title;
375
        $context->settings = $settings;
376
 
377
        // Load an unsaved context.
378
        $this->assertFalse($dc->loadContext($context));
379
 
380
        // Save the context.
381
        $dc->saveContext($context);
382
        $created = $context->created;
383
        $updated = $context->updated;
384
 
385
        // Load saved context.
386
        $this->assertTrue($dc->loadContext($context));
387
        $this->assertEquals($consumer, $context->getConsumer());
388
        $this->assertEquals($title, $context->title);
389
        $this->assertEquals($settings, $context->getSettings());
390
        $this->assertEquals($lticontextid, $context->ltiContextId);
391
        $this->assertEquals($created, $context->created);
392
        $this->assertEquals($updated, $context->updated);
393
    }
394
 
395
    /**
396
     * Test for data_connector::saveContext().
397
     */
11 efrain 398
    public function test_save_context(): void {
1 efrain 399
        $dc = new data_connector();
400
        $consumer = new ToolConsumer(null, $dc);
401
        $consumer->name = 'testconsumername';
402
        $consumer->setKey('TestKey');
403
        $consumer->secret = 'testsecret';
404
        $consumer->save();
405
 
406
        $title = 'testcontexttitle';
407
        $settings = ['a', 'b', 'c'];
408
        $lticontextid = 'testlticontextid';
409
        $context = Context::fromConsumer($consumer, $lticontextid);
410
        $context->title = $title;
411
        $context->settings = $settings;
412
 
413
        // Save the context.
414
        $this->assertTrue($dc->saveContext($context));
415
        $id = $context->getRecordId();
416
        $created = $context->created;
417
        $updated = $context->updated;
418
 
419
        // Check saved values.
420
        $this->assertNotNull($id);
421
        $this->assertNotEmpty($created);
422
        $this->assertNotEmpty($updated);
423
        $this->assertEquals($consumer, $context->getConsumer());
424
        $this->assertEquals($title, $context->title);
425
        $this->assertEquals($settings, $context->getSettings());
426
        $this->assertEquals($lticontextid, $context->ltiContextId);
427
 
428
        // Edit the context details.
429
        $newsettings = array_merge($settings, ['d', 'e']);
430
        $context->title = $title . 'edited';
431
        $context->settings = $newsettings;
432
        $context->ltiContextId = $lticontextid . 'edited';
433
 
434
        // Confirm that edited context is saved successfully.
435
        $this->assertTrue($dc->saveContext($context));
436
 
437
        // Check edited values.
438
        $this->assertEquals($title . 'edited', $context->title);
439
        $this->assertEquals($newsettings, $context->getSettings());
440
        $this->assertEquals($lticontextid . 'edited', $context->ltiContextId);
441
        // Created time stamp should not change.
442
        $this->assertEquals($created, $context->created);
443
        // Updated time stamp should have been changed.
444
        $this->assertGreaterThanOrEqual($updated, $context->updated);
445
    }
446
 
447
    /**
448
     * Test for data_connector::deleteContext().
449
     */
11 efrain 450
    public function test_delete_context(): void {
1 efrain 451
        $dc = new data_connector();
452
        $consumer = new ToolConsumer(null, $dc);
453
        $consumer->name = 'testconsumername';
454
        $consumer->setKey('TestKey');
455
        $consumer->secret = 'testsecret';
456
        $consumer->save();
457
 
458
        $title = 'testcontexttitle';
459
        $settings = ['a', 'b', 'c'];
460
        $lticontextid = 'testlticontextid';
461
        $context = Context::fromConsumer($consumer, $lticontextid);
462
        $context->title = $title;
463
        $context->settings = $settings;
464
 
465
        // Save the context.
466
        $this->assertTrue($dc->saveContext($context));
467
 
468
        $resourcelink = ResourceLink::fromConsumer($consumer, 'testresourcelinkid');
469
        $resourcelink->setContextId($context->getRecordId());
470
        $resourcelink->save();
471
        $this->assertEquals($consumer->getRecordId(), $resourcelink->getConsumer()->getRecordId());
472
 
473
        $resourcelinkchild = ResourceLink::fromConsumer($consumer, 'testresourcelinkchildid');
474
        $resourcelinkchild->primaryResourceLinkId = $resourcelink->getRecordId();
475
        $resourcelinkchild->shareApproved = true;
476
        $resourcelinkchild->setContextId($context->getRecordId());
477
        $resourcelinkchild->save();
478
        $this->assertEquals($consumer->getRecordId(), $resourcelinkchild->getConsumer()->getRecordId());
479
        $this->assertEquals($resourcelink->getRecordId(), $resourcelinkchild->primaryResourceLinkId);
480
        $this->assertTrue($resourcelinkchild->shareApproved);
481
 
482
        $resourcelinkchild2 = clone $resourcelink;
483
        $resourcelinkchild2->setRecordId(null);
484
        $resourcelinkchild2->setConsumerId(null);
485
        $resourcelinkchild2->setContextId(0);
486
        $resourcelinkchild2->primaryResourceLinkId = $resourcelink->getRecordId();
487
        $resourcelinkchild2->shareApproved = true;
488
        $resourcelinkchild2->save();
489
        $this->assertNull($resourcelinkchild2->getConsumer()->getRecordId());
490
        $this->assertEquals(0, $resourcelinkchild2->getContextId());
491
        $this->assertNotEquals($resourcelink->getRecordId(), $resourcelinkchild2->getRecordId());
492
 
493
        $resourcelinksharekey = new ResourceLinkShareKey($resourcelink);
494
        $resourcelinksharekey->save();
495
 
496
        $user = User::fromResourceLink($resourcelink, '');
497
        $user->ltiResultSourcedId = 'testLtiResultSourcedId';
498
        $dc->saveUser($user);
499
 
500
        $this->assertTrue($dc->deleteContext($context));
501
 
502
        // Context properties should have been reset.
503
        $this->assertEmpty($context->title);
504
        $this->assertEmpty($context->settings);
505
        $this->assertNull($context->created);
506
        $this->assertNull($context->updated);
507
 
508
        // Context record should have already been deleted from the DB.
509
        $this->assertFalse($dc->loadContext($context));
510
 
511
        // Share key record record should have been deleted.
512
        $this->assertFalse($dc->loadResourceLinkShareKey($resourcelinksharekey));
513
        // Resource record link should have been deleted.
514
        $this->assertFalse($dc->loadResourceLink($resourcelink));
515
        // Resource links for contexts in this consumer should have been deleted. Even child ones.
516
        $this->assertFalse($dc->loadResourceLink($resourcelinkchild));
517
 
518
        // Child resource link primaryResourceLinkId and shareApproved attributes should have been set to null.
519
        $this->assertTrue($dc->loadResourceLink($resourcelinkchild2));
520
        $this->assertNull($resourcelinkchild2->primaryResourceLinkId);
521
        $this->assertNull($resourcelinkchild2->shareApproved);
522
    }
523
 
524
    /**
525
     * Test for data_connector::loadResourceLink().
526
     */
11 efrain 527
    public function test_load_resource_link(): void {
1 efrain 528
        $dc = new data_connector();
529
 
530
        // Consumer for the resource link.
531
        $consumer = new ToolConsumer(null, $dc);
532
        $consumer->name = 'testconsumername';
533
        $consumer->setKey('TestKey');
534
        $consumer->secret = 'testsecret';
535
        $consumer->save();
536
 
537
        // Context for the resource link.
538
        $title = 'testcontexttitle';
539
        $settings = ['a', 'b', 'c'];
540
        $lticontextid = 'testlticontextid';
541
        $context = Context::fromConsumer($consumer, $lticontextid);
542
        $context->title = $title;
543
        $context->settings = $settings;
544
        // Save the context.
545
        $context->save();
546
 
547
        $ltiresourcelinkid = 'testltiresourcelinkid';
548
        $resourcelink = ResourceLink::fromConsumer($consumer, $ltiresourcelinkid);
549
        $resourcelink->setContextId($context->getRecordId());
550
        $resourcelink->setSettings($settings);
551
        $resourcelink->shareApproved = true;
552
        $resourcelink->primaryResourceLinkId = 999;
553
 
554
        // Try to load an unsaved resource link.
555
        $this->assertFalse($dc->loadResourceLink($resourcelink));
556
 
557
        // Save the resource link.
558
        $resourcelink->save();
559
 
560
        // Load saved resource link.
561
        $this->assertTrue($dc->loadResourceLink($resourcelink));
562
        $this->assertNotEmpty($resourcelink->getRecordId());
563
        $this->assertEquals($settings, $resourcelink->getSettings());
564
        $this->assertTrue($resourcelink->shareApproved);
565
        $this->assertEquals(999, $resourcelink->primaryResourceLinkId);
566
        $this->assertNotEmpty($resourcelink->created);
567
        $this->assertNotEmpty($resourcelink->updated);
568
 
569
        // Create another resource link instance similar to the first one.
570
        $resourcelink2 = ResourceLink::fromConsumer($consumer, $ltiresourcelinkid);
571
        $resourcelink2->setContextId($context->getRecordId());
572
 
573
        // This should load the previous resource link.
574
        $this->assertTrue($dc->loadResourceLink($resourcelink2));
575
        $this->assertEquals($resourcelink, $resourcelink2);
576
 
577
        $resourcelink2->ltiResourceLinkId = $ltiresourcelinkid . '2';
578
        $resourcelink2->save();
579
        $dc->loadResourceLink($resourcelink2);
580
        $this->assertNotEquals($resourcelink, $resourcelink2);
581
    }
582
 
583
    /**
584
     * Test for data_connector::saveResourceLink().
585
     */
11 efrain 586
    public function test_save_resource_link(): void {
1 efrain 587
        $dc = new data_connector();
588
 
589
        // Consumer for the resource link.
590
        $consumer = new ToolConsumer(null, $dc);
591
        $consumer->name = 'testconsumername';
592
        $consumer->setKey('TestKey');
593
        $consumer->secret = 'testsecret';
594
        $consumer->save();
595
 
596
        // Context for the resource link.
597
        $title = 'testcontexttitle';
598
        $settings = ['a', 'b', 'c'];
599
        $lticontextid = 'testlticontextid';
600
        $context = Context::fromConsumer($consumer, $lticontextid);
601
        $context->title = $title;
602
        $context->settings = $settings;
603
        // Save the context.
604
        $context->save();
605
 
606
        $ltiresourcelinkid = 'testltiresourcelinkid';
607
        $resourcelink = ResourceLink::fromConsumer($consumer, $ltiresourcelinkid);
608
        $resourcelink->setContextId($context->getRecordId());
609
        $resourcelink->setSettings($settings);
610
        $resourcelink->shareApproved = true;
611
        $resourcelink->primaryResourceLinkId = 999;
612
 
613
        // Try to load an unsaved resource link.
614
        $this->assertFalse($dc->loadResourceLink($resourcelink));
615
 
616
        // Save the resource link.
617
        $this->assertTrue($resourcelink->save());
618
 
619
        // Check values.
620
        $resoucelinkid = $resourcelink->getRecordId();
621
        $created = $resourcelink->created;
622
        $updated = $resourcelink->updated;
623
        $this->assertNotEmpty($resoucelinkid);
624
        $this->assertEquals($settings, $resourcelink->getSettings());
625
        $this->assertTrue($resourcelink->shareApproved);
626
        $this->assertEquals(999, $resourcelink->primaryResourceLinkId);
627
        $this->assertNotEmpty($created);
628
        $this->assertNotEmpty($updated);
629
 
630
        // Update values.
631
        $newsettings = array_merge($settings, ['d', 'e']);
632
        $resourcelink->setSettings($newsettings);
633
        $resourcelink->shareApproved = false;
634
        $resourcelink->primaryResourceLinkId = 1000;
635
        $resourcelink->ltiResourceLinkId = $ltiresourcelinkid . 'edited';
636
 
637
        // Save modified resource link.
638
        $this->assertTrue($resourcelink->save());
639
 
640
        // Check edited values.
641
        $this->assertEquals($resoucelinkid, $resourcelink->getRecordId());
642
        $this->assertEquals($newsettings, $resourcelink->getSettings());
643
        $this->assertFalse($resourcelink->shareApproved);
644
        $this->assertEquals(1000, $resourcelink->primaryResourceLinkId);
645
        $this->assertEquals($created, $resourcelink->created);
646
        $this->assertGreaterThanOrEqual($updated, $resourcelink->updated);
647
    }
648
 
649
    /**
650
     * Test for data_connector::deleteResourceLink().
651
     */
11 efrain 652
    public function test_delete_resource_link(): void {
1 efrain 653
        $dc = new data_connector();
654
        $consumer = new ToolConsumer(null, $dc);
655
        $consumer->name = 'testconsumername';
656
        $consumer->setKey('TestKey');
657
        $consumer->secret = 'testsecret';
658
        $consumer->save();
659
 
660
        $title = 'testcontexttitle';
661
        $settings = ['a', 'b', 'c'];
662
        $lticontextid = 'testlticontextid';
663
        $context = Context::fromConsumer($consumer, $lticontextid);
664
        $context->title = $title;
665
        $context->settings = $settings;
666
 
667
        // Save the context.
668
        $this->assertTrue($dc->saveContext($context));
669
 
670
        $resourcelink = ResourceLink::fromConsumer($consumer, 'testresourcelinkid');
671
        $resourcelink->setContextId($context->getRecordId());
672
        $resourcelink->save();
673
 
674
        $resourcelinkchild = ResourceLink::fromConsumer($consumer, 'testresourcelinkchildid');
675
        $resourcelinkchild->primaryResourceLinkId = $resourcelink->getRecordId();
676
        $resourcelinkchild->shareApproved = true;
677
        $resourcelinkchild->setContextId($context->getRecordId());
678
        $resourcelinkchild->save();
679
 
680
        $resourcelinksharekey = new ResourceLinkShareKey($resourcelink);
681
        $resourcelinksharekey->save();
682
 
683
        $user = User::fromResourceLink($resourcelink, '');
684
        $user->ltiResultSourcedId = 'testLtiResultSourcedId';
685
        $dc->saveUser($user);
686
 
687
        $this->assertTrue($dc->deleteResourceLink($resourcelink));
688
 
689
        // Resource link properties should have been reset.
690
        $this->assertEmpty($resourcelink->title);
691
        $this->assertEmpty($resourcelink->getSettings());
692
        $this->assertNull($resourcelink->groupSets);
693
        $this->assertNull($resourcelink->groups);
694
        $this->assertNull($resourcelink->primaryResourceLinkId);
695
        $this->assertNull($resourcelink->shareApproved);
696
        $this->assertNull($resourcelink->created);
697
        $this->assertNull($resourcelink->updated);
698
 
699
        // Share key record record should have been deleted.
700
        $this->assertFalse($dc->loadResourceLinkShareKey($resourcelinksharekey));
701
        // Resource link record should have been deleted.
702
        $this->assertFalse($dc->loadResourceLink($resourcelink));
703
        // Child resource link should still exist and its primaryResourceLinkId attribute should have been set to null.
704
        $this->assertTrue($dc->loadResourceLink($resourcelinkchild));
705
        $this->assertNull($resourcelinkchild->primaryResourceLinkId);
706
    }
707
 
708
    /**
709
     * Test for data_connector::getUserResultSourcedIDsResourceLink().
710
     */
11 efrain 711
    public function test_get_user_result_sourced_ids_resource_link(): void {
1 efrain 712
        $dc = new data_connector();
713
        $consumer = new ToolConsumer(null, $dc);
714
        $consumer->name = 'testconsumername';
715
        $consumer->setKey('TestKey');
716
        $consumer->secret = 'testsecret';
717
        $consumer->idScope = ToolProvider::ID_SCOPE_GLOBAL;
718
        $consumer->save();
719
 
720
        $title = 'testcontexttitle';
721
        $settings = ['a', 'b', 'c'];
722
        $lticontextid = 'testlticontextid';
723
        $context = Context::fromConsumer($consumer, $lticontextid);
724
        $context->title = $title;
725
        $context->settings = $settings;
726
        $context->save();
727
 
728
        $resourcelink = ResourceLink::fromConsumer($consumer, 'testresourcelinkid');
729
        $resourcelink->setContextId($context->getRecordId());
730
        $resourcelink->save();
731
 
732
        $resourcelinkchild = ResourceLink::fromConsumer($consumer, 'testresourcelinkchildid');
733
        $resourcelinkchild->primaryResourceLinkId = $resourcelink->getRecordId();
734
        $resourcelinkchild->shareApproved = true;
735
        $resourcelinkchild->setContextId($context->getRecordId());
736
        $resourcelinkchild->save();
737
 
738
        $user = User::fromResourceLink($resourcelink, '');
739
        $user->ltiResultSourcedId = 'testLtiResultSourcedId';
740
        $user->ltiUserId = 'user1';
741
        $dc->saveUser($user);
742
 
743
        $user2 = User::fromResourceLink($resourcelinkchild, '');
744
        $user2->ltiResultSourcedId = 'testLtiResultSourcedId2';
745
        $user->ltiUserId = 'user2';
746
        $dc->saveUser($user2);
747
 
748
        $users = $dc->getUserResultSourcedIDsResourceLink($resourcelink, false, null);
749
        $this->assertNotEmpty($users);
750
        $this->assertCount(2, $users);
751
 
752
        $users = $dc->getUserResultSourcedIDsResourceLink($resourcelink, true, null);
753
        $this->assertNotEmpty($users);
754
        $this->assertCount(1, $users);
755
 
756
        $users = $dc->getUserResultSourcedIDsResourceLink($resourcelink, false, ToolProvider::ID_SCOPE_GLOBAL);
757
        $this->assertNotEmpty($users);
758
        $this->assertCount(2, $users);
759
 
760
        $users = $dc->getUserResultSourcedIDsResourceLink($resourcelink, true, ToolProvider::ID_SCOPE_GLOBAL);
761
        $this->assertNotEmpty($users);
762
        $this->assertCount(1, $users);
763
    }
764
 
765
    /**
766
     * Test for data_connector::getSharesResourceLink().
767
     */
11 efrain 768
    public function test_get_shares_resource_link(): void {
1 efrain 769
        $dc = new data_connector();
770
        $consumer = new ToolConsumer(null, $dc);
771
        $consumer->name = 'testconsumername';
772
        $consumer->setKey('TestKey');
773
        $consumer->secret = 'testsecret';
774
        $consumer->idScope = ToolProvider::ID_SCOPE_GLOBAL;
775
        $consumer->save();
776
 
777
        $title = 'testcontexttitle';
778
        $settings = ['a', 'b', 'c'];
779
        $lticontextid = 'testlticontextid';
780
        $context = Context::fromConsumer($consumer, $lticontextid);
781
        $context->title = $title;
782
        $context->settings = $settings;
783
        $context->save();
784
 
785
        $resourcelink = ResourceLink::fromConsumer($consumer, 'testresourcelinkid');
786
        $resourcelink->setContextId($context->getRecordId());
787
        $resourcelink->save();
788
        $shares = $dc->getSharesResourceLink($resourcelink);
789
        $this->assertEmpty($shares);
790
 
791
        $resourcelinkchild = ResourceLink::fromConsumer($consumer, 'testresourcelinkchildid');
792
        $resourcelinkchild->primaryResourceLinkId = $resourcelink->getRecordId();
793
        $resourcelinkchild->shareApproved = true;
794
        $resourcelinkchild->save();
795
 
796
        $resourcelinkchild2 = ResourceLink::fromConsumer($consumer, 'testresourcelinkchildid2');
797
        $resourcelinkchild2->primaryResourceLinkId = $resourcelink->getRecordId();
798
        $resourcelinkchild2->shareApproved = false;
799
        $resourcelinkchild2->save();
800
 
801
        $shares = $dc->getSharesResourceLink($resourcelink);
802
        $this->assertCount(2, $shares);
803
        $shareids = [$resourcelinkchild->getRecordId(), $resourcelinkchild2->getRecordId()];
804
        foreach ($shares as $share) {
805
            $this->assertTrue($share instanceof ResourceLinkShare);
806
            $this->assertTrue(in_array($share->resourceLinkId, $shareids));
807
            if ($share->resourceLinkId == $shareids[0]) {
808
                $this->assertTrue($share->approved);
809
            } else {
810
                $this->assertFalse($share->approved);
811
            }
812
        }
813
    }
814
 
815
    /**
816
     * Test for data_connector::loadConsumerNonce().
817
     */
11 efrain 818
    public function test_load_consumer_nonce(): void {
1 efrain 819
        $dc = new data_connector();
820
 
821
        $consumer = new ToolConsumer(null, $dc);
822
        $consumer->name = 'TestName';
823
        $consumer->setKey('TestKey');
824
        $consumer->secret = 'TestSecret';
825
        $consumer->save();
826
 
827
        $nonce = new ConsumerNonce($consumer, 'testnonce');
828
        // Should still not be available since it has not been saved yet.
829
        $this->assertFalse($dc->loadConsumerNonce($nonce));
830
        // Save the nonce.
831
        $nonce->save();
832
        // Should now be available.
833
        $this->assertTrue($dc->loadConsumerNonce($nonce));
834
    }
835
 
836
    /**
837
     * Test for data_connector::loadConsumerNonce() for a nonce that has expired.
838
     */
11 efrain 839
    public function test_load_consumer_nonce_expired(): void {
1 efrain 840
        $dc = new data_connector();
841
 
842
        $consumer = new ToolConsumer(null, $dc);
843
        $consumer->name = 'TestName';
844
        $consumer->setKey('TestKey');
845
        $consumer->secret = 'TestSecret';
846
        $consumer->save();
847
 
848
        $nonce = new ConsumerNonce($consumer, 'testnonce');
849
        $nonce->expires = time() - 100;
850
        // Save the nonce.
851
        $nonce->save();
852
        // Expired nonce should have been deleted.
853
        $this->assertFalse($dc->loadConsumerNonce($nonce));
854
    }
855
 
856
    /**
857
     * Test for data_connector::saveConsumerNonce().
858
     */
11 efrain 859
    public function test_save_consumer_nonce(): void {
1 efrain 860
        $dc = new data_connector();
861
 
862
        $consumer = new ToolConsumer(null, $dc);
863
        $consumer->name = 'TestName';
864
        $consumer->setKey('TestKey');
865
        $consumer->secret = 'TestSecret';
866
        $consumer->save();
867
 
868
        $nonce = new ConsumerNonce($consumer, 'testnonce');
869
 
870
        // Save the nonce.
871
        $this->assertTrue($dc->saveConsumerNonce($nonce));
872
    }
873
 
874
    /**
875
     * Test for data_connector::loadResourceLinkShareKey().
876
     */
11 efrain 877
    public function test_load_resource_link_share_key(): void {
1 efrain 878
        $dc = new data_connector();
879
 
880
        $consumer = new ToolConsumer(null, $dc);
881
        $consumer->name = 'TestName';
882
        $consumer->setKey('TestKey');
883
        $consumer->secret = 'TestSecret';
884
        $consumer->save();
885
 
886
        $resourcelink = ResourceLink::fromConsumer($consumer, 'testresourcelinkid');
887
        $resourcelink->save();
888
 
889
        $sharekey = new ResourceLinkShareKey($resourcelink);
890
        // Should still not be available since it has not been saved yet.
891
        $this->assertFalse($dc->loadResourceLinkShareKey($sharekey));
892
        // Save the share key.
893
        $sharekey->save();
894
        // Should now be available.
895
        $this->assertTrue($dc->loadResourceLinkShareKey($sharekey));
896
 
897
        // Check values.
898
        $this->assertEquals(strlen($sharekey->getId()), $sharekey->length);
899
        $this->assertEquals(ResourceLinkShareKey::DEFAULT_SHARE_KEY_LIFE, $sharekey->life);
900
        $this->assertNotNull($sharekey->expires);
901
        $this->assertFalse($sharekey->autoApprove);
902
    }
903
 
904
    /**
905
     * Test for data_connector::loadResourceLinkShareKey() with an expired share key.
906
     */
11 efrain 907
    public function test_load_resource_link_share_key_expired(): void {
1 efrain 908
        $dc = new data_connector();
909
 
910
        $consumer = new ToolConsumer(null, $dc);
911
        $consumer->name = 'TestName';
912
        $consumer->setKey('TestKey');
913
        $consumer->secret = 'TestSecret';
914
        $consumer->save();
915
 
916
        $resourcelink = ResourceLink::fromConsumer($consumer, 'testresourcelinkid');
917
        $resourcelink->save();
918
 
919
        $sharekey = new ResourceLinkShareKey($resourcelink, 'testsharelinkid');
920
        $sharekey->expires = time() - 100;
921
        // ResourceLinkShareKey::save() adds a default expires time and cannot be modified.
922
        $dc->saveResourceLinkShareKey($sharekey);
923
 
924
        // Expired shared key should have been deleted.
925
        $this->assertFalse($dc->loadResourceLinkShareKey($sharekey));
926
    }
927
 
928
    /**
929
     * Test for data_connector::saveResourceLinkShareKey().
930
     */
11 efrain 931
    public function test_save_resource_link_share_key(): void {
1 efrain 932
        $dc = new data_connector();
933
 
934
        $consumer = new ToolConsumer(null, $dc);
935
        $consumer->name = 'TestName';
936
        $consumer->setKey('TestKey');
937
        $consumer->secret = 'TestSecret';
938
        $consumer->save();
939
 
940
        $resourcelink = ResourceLink::fromConsumer($consumer, 'testresourcelinkid');
941
        $resourcelink->save();
942
 
943
        $expires = time() - 100;
944
        $sharekey = new ResourceLinkShareKey($resourcelink, 'testsharelinkid');
945
        $sharekey->expires = $expires;
946
        $sharekey->life = ResourceLinkShareKey::DEFAULT_SHARE_KEY_LIFE;
947
 
948
        $this->assertTrue($dc->saveResourceLinkShareKey($sharekey));
949
 
950
        // Check values.
951
        $this->assertEquals(strlen($sharekey->getId()), $sharekey->length);
952
        $this->assertEquals(ResourceLinkShareKey::DEFAULT_SHARE_KEY_LIFE, $sharekey->life);
953
        $this->assertEquals($expires, $sharekey->expires);
954
        $this->assertFalse($sharekey->autoApprove);
955
    }
956
 
957
    /**
958
     * Test for data_connector::deleteResourceLinkShareKey().
959
     */
11 efrain 960
    public function test_delete_resource_link_share_key(): void {
1 efrain 961
        $dc = new data_connector();
962
 
963
        $consumer = new ToolConsumer(null, $dc);
964
        $consumer->name = 'TestName';
965
        $consumer->setKey('TestKey');
966
        $consumer->secret = 'TestSecret';
967
        $consumer->save();
968
 
969
        $resourcelink = ResourceLink::fromConsumer($consumer, 'testresourcelinkid');
970
        $resourcelink->save();
971
 
972
        $sharekey = new ResourceLinkShareKey($resourcelink, 'testsharelinkid');
973
        $sharekey->save();
974
 
975
        $this->assertTrue($dc->deleteResourceLinkShareKey($sharekey));
976
 
977
        $controlsharekey = new ResourceLinkShareKey($resourcelink, 'testsharelinkid');
978
        $controlsharekey->initialise();
979
        $this->assertEquals($controlsharekey, $sharekey);
980
 
981
        // This should no longer be in the DB.
982
        $this->assertFalse($dc->loadResourceLinkShareKey($sharekey));
983
    }
984
 
985
    /**
986
     * Test for data_connector::loadUser().
987
     */
11 efrain 988
    public function test_load_user(): void {
1 efrain 989
        $dc = new data_connector();
990
        $consumer = new ToolConsumer(null, $dc);
991
        $consumer->name = 'TestName';
992
        $consumer->setKey('TestKey');
993
        $consumer->secret = 'TestSecret';
994
        $consumer->save();
995
 
996
        $resourcelink = ResourceLink::fromConsumer($consumer, 'testresourcelinkid');
997
        $resourcelink->save();
998
 
999
        $user = User::fromResourceLink($resourcelink, '');
1000
        $user->ltiResultSourcedId = 'testLtiResultSourcedId';
1001
 
1002
        // Should still not be available since it has not been saved yet.
1003
        $this->assertFalse($dc->loadUser($user));
1004
 
1005
        // Save the user.
1006
        $user->save();
1007
 
1008
        // Should now be available.
1009
        $this->assertTrue($dc->loadUser($user));
1010
 
1011
        // Check loaded values.
1012
        $created = $user->created;
1013
        $updated = $user->updated;
1014
        $this->assertNotNull($created);
1015
        $this->assertNotNull($updated);
1016
        $this->assertEquals('testLtiResultSourcedId', $user->ltiResultSourcedId);
1017
        $this->assertEquals($resourcelink, $user->getResourceLink());
1018
    }
1019
 
1020
    /**
1021
     * Test for data_connector::saveUser().
1022
     */
11 efrain 1023
    public function test_save_user(): void {
1 efrain 1024
        $dc = new data_connector();
1025
        $consumer = new ToolConsumer(null, $dc);
1026
        $consumer->name = 'TestName';
1027
        $consumer->setKey('TestKey');
1028
        $consumer->secret = 'TestSecret';
1029
        $consumer->save();
1030
 
1031
        $resourcelink = ResourceLink::fromConsumer($consumer, 'testresourcelinkid');
1032
        $resourcelink->save();
1033
 
1034
        $user = User::fromResourceLink($resourcelink, '');
1035
        $user->ltiResultSourcedId = 'testLtiResultSourcedId';
1036
        // Save user.
1037
        $this->assertTrue($dc->saveUser($user));
1038
 
1039
        // Check loaded values.
1040
        $created = $user->created;
1041
        $updated = $user->updated;
1042
        $this->assertNotNull($created);
1043
        $this->assertNotNull($updated);
1044
        $this->assertEquals('testLtiResultSourcedId', $user->ltiResultSourcedId);
1045
        $this->assertEquals($resourcelink, $user->getResourceLink());
1046
 
1047
        // Update user.
1048
        $user->ltiResultSourcedId = 'testLtiResultSourcedId2';
1049
 
1050
        // Save updated values.
1051
        $this->assertTrue($dc->saveUser($user));
1052
 
1053
        // Check updated values.
1054
        $this->assertEquals($created, $user->created);
1055
        $this->assertGreaterThanOrEqual($updated, $user->updated);
1056
        $this->assertEquals('testLtiResultSourcedId2', $user->ltiResultSourcedId);
1057
    }
1058
 
1059
    /**
1060
     * Test for data_connector::deleteUser().
1061
     */
11 efrain 1062
    public function test_delete_user(): void {
1 efrain 1063
        $dc = new data_connector();
1064
        $consumer = new ToolConsumer(null, $dc);
1065
        $consumer->name = 'TestName';
1066
        $consumer->setKey('TestKey');
1067
        $consumer->secret = 'TestSecret';
1068
        $consumer->save();
1069
 
1070
        $resourcelink = ResourceLink::fromConsumer($consumer, 'testresourcelinkid');
1071
        $resourcelink->save();
1072
 
1073
        $user = User::fromResourceLink($resourcelink, '');
1074
        $user->ltiResultSourcedId = 'testLtiResultSourcedId';
1075
        $user->firstname = 'First';
1076
        $user->lastname = 'Last';
1077
        $user->fullname = 'Full name';
1078
        $user->email = 'test@email.com';
1079
        $user->roles = ['a', 'b'];
1080
        $user->groups = ['1', '2'];
1081
        $user->save();
1082
 
1083
        // Delete user.
1084
        $this->assertTrue($dc->deleteUser($user));
1085
 
1086
        // User record should have been deleted from the DB.
1087
        $this->assertFalse($dc->loadUser($user));
1088
 
1089
        // User object should have been initialised().
1090
        $this->assertEmpty($user->firstname);
1091
        $this->assertEmpty($user->lastname);
1092
        $this->assertEmpty($user->fullname);
1093
        $this->assertEmpty($user->email);
1094
        $this->assertEmpty($user->roles);
1095
        $this->assertEmpty($user->groups);
1096
        $this->assertNull($user->ltiResultSourcedId);
1097
        $this->assertNull($user->created);
1098
        $this->assertNull($user->updated);
1099
    }
1100
 
1101
    /**
1102
     * Test for data_connector::get_contexts_from_consumer().
1103
     */
11 efrain 1104
    public function test_get_contexts_from_consumer(): void {
1 efrain 1105
        $dc = new data_connector();
1106
        $consumer = new ToolConsumer(null, $dc);
1107
        $consumer->name = 'testconsumername';
1108
        $consumer->setKey('TestKey');
1109
        $consumer->secret = 'testsecret';
1110
        $consumer->save();
1111
 
1112
        $settings = ['a', 'b', 'c'];
1113
        $lticontextid = 'testlticontextid';
1114
        $context = Context::fromConsumer($consumer, $lticontextid);
1115
        $context->settings = $settings;
1116
        $context->save();
1117
        $dc->loadContext($context);
1118
 
1119
        $consumer2 = new ToolConsumer(null, $dc);
1120
        $consumer2->name = 'testconsumername2';
1121
        $consumer2->setKey('TestKey2');
1122
        $consumer2->secret = 'testsecret2';
1123
        $consumer2->save();
1124
 
1125
        $context2 = Context::fromConsumer($consumer2, $lticontextid . '2');
1126
        $context2->settings = $settings;
1127
        $consumer2->save();
1128
 
1129
        $contexts = $dc->get_contexts_from_consumer($consumer);
1130
        $this->assertCount(1, $contexts);
1131
        $this->assertEquals($context, $contexts[0]);
1132
    }
1133
 
1134
    /**
1135
     * Test for data_connector::get_consumers_mapped_to_tool().
1136
     */
11 efrain 1137
    public function test_get_consumers_mapped_to_tool(): void {
1 efrain 1138
        $generator = $this->getDataGenerator();
1139
        // Create two tools belonging to the same course.
1140
        $course1 = $generator->create_course();
1141
        $data = new \stdClass();
1142
        $data->courseid = $course1->id;
1143
        $tool = $generator->create_lti_tool($data);
1144
        $tool2 = $generator->create_lti_tool($data);
1145
 
1146
        $dc = new data_connector();
1147
        $consumer = new ToolConsumer('key1', $dc);
1148
        $consumer->name = 'testconsumername';
1149
        $consumer->secret = 'testsecret';
1150
        $consumer->save();
1151
 
1152
        $tp = new \enrol_lti\tool_provider($tool->id);
1153
        $tp->consumer = $consumer;
1154
        $tp->map_tool_to_consumer();
1155
 
1156
        $consumer2 = new ToolConsumer('key2', $dc);
1157
        $consumer2->name = 'testconsumername2';
1158
        $consumer2->secret = 'testsecret2';
1159
        $consumer2->save();
1160
 
1161
        $tp2 = new \enrol_lti\tool_provider($tool2->id);
1162
        $tp2->consumer = $consumer2;
1163
        $tp2->map_tool_to_consumer();
1164
 
1165
        $consumers = $dc->get_consumers_mapped_to_tool($tool->id);
1166
        $this->assertCount(1, $consumers);
1167
        $this->assertEquals($consumer, $consumers[0]);
1168
 
1169
        $consumers2 = $dc->get_consumers_mapped_to_tool($tool2->id);
1170
        $this->assertCount(1, $consumers2);
1171
        $this->assertEquals($consumer2, $consumers2[0]);
1172
    }
1173
 
1174
    /**
1175
     * Test for data_connector::get_resourcelink_from_consumer()
1176
     */
11 efrain 1177
    public function test_get_resourcelink_from_consumer(): void {
1 efrain 1178
        $dc = new data_connector();
1179
 
1180
        $consumer = new ToolConsumer(null, $dc);
1181
        $consumer->name = 'TestName';
1182
        $consumer->setKey('TestKey');
1183
        $consumer->secret = 'TestSecret';
1184
        $consumer->save();
1185
 
1186
        // No ResourceLink associated with the ToolConsumer yet.
1187
        $this->assertNull($dc->get_resourcelink_from_consumer($consumer));
1188
 
1189
        // Create and save ResourceLink from ToolConsumer.
1190
        $resourcelink = ResourceLink::fromConsumer($consumer, 'testresourcelinkid');
1191
        $resourcelink->save();
1192
        $dc->loadResourceLink($resourcelink);
1193
 
1194
        // Assert that the resource link and the one fetched by get_resourcelink_from_consumer() are the same.
1195
        $this->assertEquals($resourcelink, $dc->get_resourcelink_from_consumer($consumer));
1196
    }
1197
 
1198
    /**
1199
     * Test for data_connector::get_resourcelink_from_context()
1200
     */
11 efrain 1201
    public function test_get_resourcelink_from_context(): void {
1 efrain 1202
        $dc = new data_connector();
1203
 
1204
        $consumer = new ToolConsumer(null, $dc);
1205
        $consumer->name = 'TestName';
1206
        $consumer->setKey('TestKey');
1207
        $consumer->secret = 'TestSecret';
1208
        $consumer->save();
1209
 
1210
        $settings = ['a', 'b', 'c'];
1211
        $lticontextid = 'testlticontextid';
1212
        $context = Context::fromConsumer($consumer, $lticontextid);
1213
        $context->settings = $settings;
1214
        $context->save();
1215
 
1216
        // No ResourceLink associated with the Context yet.
1217
        $this->assertNull($dc->get_resourcelink_from_context($context));
1218
 
1219
        // Create and save ResourceLink from the Context.
1220
        $resourcelink = ResourceLink::fromContext($context, 'testresourcelinkid');
1221
        $resourcelink->save();
1222
        $dc->loadResourceLink($resourcelink);
1223
 
1224
        // Assert that the resource link and the one fetched by get_resourcelink_from_context() are the same.
1225
        $this->assertEquals($resourcelink, $dc->get_resourcelink_from_context($context));
1226
    }
1227
}