Proyectos de Subversion Moodle

Rev

Rev 11 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 11 Rev 1441
Línea 40... Línea 40...
40
 * @package    mod_glossary
40
 * @package    mod_glossary
41
 * @category   external
41
 * @category   external
42
 * @copyright  2015 Costantino Cito <ccito@cvaconsulting.com>
42
 * @copyright  2015 Costantino Cito <ccito@cvaconsulting.com>
43
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
43
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
44
 */
44
 */
45
class external_test extends externallib_advanced_testcase {
45
final class external_test extends externallib_advanced_testcase {
Línea 46... Línea 46...
46
 
46
 
47
    /**
47
    /**
48
     * Test get_glossaries_by_courses
48
     * Test get_glossaries_by_courses
49
     */
49
     */
Línea 365... Línea 365...
365
        $this->assertEquals($e1c->id, $return['entries'][1]['id']);
365
        $this->assertEquals($e1c->id, $return['entries'][1]['id']);
366
        $this->assertEquals($e1a->id, $return['entries'][2]['id']);
366
        $this->assertEquals($e1a->id, $return['entries'][2]['id']);
Línea 367... Línea 367...
367
 
367
 
368
        // Ordering including to approve.
368
        // Ordering including to approve.
369
        $return = mod_glossary_external::get_entries_by_date($g1->id, 'CREATION', 'ASC', 0, 20,
369
        $return = mod_glossary_external::get_entries_by_date($g1->id, 'CREATION', 'ASC', 0, 20,
370
            array('includenotapproved' => true));
370
            ['includenotapproved' => true]);
371
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_date_returns(), $return);
371
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_date_returns(), $return);
372
        $this->assertCount(4, $return['entries']);
372
        $this->assertCount(4, $return['entries']);
373
        $this->assertEquals(4, $return['count']);
373
        $this->assertEquals(4, $return['count']);
374
        $this->assertEquals($e1a->id, $return['entries'][0]['id']);
374
        $this->assertEquals($e1a->id, $return['entries'][0]['id']);
375
        $this->assertEquals($e1c->id, $return['entries'][1]['id']);
375
        $this->assertEquals($e1c->id, $return['entries'][1]['id']);
376
        $this->assertEquals($e1d->id, $return['entries'][2]['id']);
376
        $this->assertEquals($e1d->id, $return['entries'][2]['id']);
Línea 377... Línea 377...
377
        $this->assertEquals($e1b->id, $return['entries'][3]['id']);
377
        $this->assertEquals($e1b->id, $return['entries'][3]['id']);
378
 
378
 
379
        // Ordering including to approve and pagination.
379
        // Ordering including to approve and pagination.
380
        $return = mod_glossary_external::get_entries_by_date($g1->id, 'CREATION', 'ASC', 0, 2,
380
        $return = mod_glossary_external::get_entries_by_date($g1->id, 'CREATION', 'ASC', 0, 2,
381
            array('includenotapproved' => true));
381
            ['includenotapproved' => true]);
382
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_date_returns(), $return);
382
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_date_returns(), $return);
383
        $this->assertCount(2, $return['entries']);
383
        $this->assertCount(2, $return['entries']);
384
        $this->assertEquals(4, $return['count']);
384
        $this->assertEquals(4, $return['count']);
385
        $this->assertEquals($e1a->id, $return['entries'][0]['id']);
385
        $this->assertEquals($e1a->id, $return['entries'][0]['id']);
386
        $this->assertEquals($e1c->id, $return['entries'][1]['id']);
386
        $this->assertEquals($e1c->id, $return['entries'][1]['id']);
387
        $return = mod_glossary_external::get_entries_by_date($g1->id, 'CREATION', 'ASC', 2, 2,
387
        $return = mod_glossary_external::get_entries_by_date($g1->id, 'CREATION', 'ASC', 2, 2,
388
            array('includenotapproved' => true));
388
            ['includenotapproved' => true]);
389
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_date_returns(), $return);
389
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_date_returns(), $return);
390
        $this->assertCount(2, $return['entries']);
390
        $this->assertCount(2, $return['entries']);
391
        $this->assertEquals(4, $return['count']);
391
        $this->assertEquals(4, $return['count']);
Línea 478... Línea 478...
478
        $this->assertEquals(1, $return['count']);
478
        $this->assertEquals(1, $return['count']);
479
        $this->assertEquals($e1x1->id, $return['entries'][0]['id']);
479
        $this->assertEquals($e1x1->id, $return['entries'][0]['id']);
Línea 480... Línea 480...
480
 
480
 
481
        // Including to approve.
481
        // Including to approve.
482
        $return = mod_glossary_external::get_entries_by_category($g1->id, $cat1b->id, 0, 20,
482
        $return = mod_glossary_external::get_entries_by_category($g1->id, $cat1b->id, 0, 20,
483
            array('includenotapproved' => true));
483
            ['includenotapproved' => true]);
484
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_category_returns(), $return);
484
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_category_returns(), $return);
485
        $this->assertCount(2, $return['entries']);
485
        $this->assertCount(2, $return['entries']);
486
        $this->assertEquals(2, $return['count']);
486
        $this->assertEquals(2, $return['count']);
487
        $this->assertEquals($e1b1->id, $return['entries'][0]['id']);
487
        $this->assertEquals($e1b1->id, $return['entries'][0]['id']);
Línea 488... Línea 488...
488
        $this->assertEquals($e1b2->id, $return['entries'][1]['id']);
488
        $this->assertEquals($e1b2->id, $return['entries'][1]['id']);
489
 
489
 
490
        // Using limit.
490
        // Using limit.
491
        $return = mod_glossary_external::get_entries_by_category($g1->id, GLOSSARY_SHOW_ALL_CATEGORIES, 0, 3,
491
        $return = mod_glossary_external::get_entries_by_category($g1->id, GLOSSARY_SHOW_ALL_CATEGORIES, 0, 3,
492
            array('includenotapproved' => true));
492
            ['includenotapproved' => true]);
493
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_category_returns(), $return);
493
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_category_returns(), $return);
494
        $this->assertCount(3, $return['entries']);
494
        $this->assertCount(3, $return['entries']);
495
        $this->assertEquals(6, $return['count']);
495
        $this->assertEquals(6, $return['count']);
496
        $this->assertEquals($e1b1->id, $return['entries'][0]['id']);
496
        $this->assertEquals($e1b1->id, $return['entries'][0]['id']);
497
        $this->assertEquals($e1b2->id, $return['entries'][1]['id']);
497
        $this->assertEquals($e1b2->id, $return['entries'][1]['id']);
498
        $this->assertEquals($e1a1->id, $return['entries'][2]['id']);
498
        $this->assertEquals($e1a1->id, $return['entries'][2]['id']);
499
        $return = mod_glossary_external::get_entries_by_category($g1->id, GLOSSARY_SHOW_ALL_CATEGORIES, 3, 2,
499
        $return = mod_glossary_external::get_entries_by_category($g1->id, GLOSSARY_SHOW_ALL_CATEGORIES, 3, 2,
500
            array('includenotapproved' => true));
500
            ['includenotapproved' => true]);
501
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_category_returns(), $return);
501
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_category_returns(), $return);
502
        $this->assertCount(2, $return['entries']);
502
        $this->assertCount(2, $return['entries']);
503
        $this->assertEquals(6, $return['count']);
503
        $this->assertEquals(6, $return['count']);
Línea 534... Línea 534...
534
        $this->assertEquals(2, $return['count']);
534
        $this->assertEquals(2, $return['count']);
535
        $this->assertEquals($u2->id, $return['authors'][0]['id']);
535
        $this->assertEquals($u2->id, $return['authors'][0]['id']);
536
        $this->assertEquals($u1->id, $return['authors'][1]['id']);
536
        $this->assertEquals($u1->id, $return['authors'][1]['id']);
Línea 537... Línea 537...
537
 
537
 
538
        // Include users with entries pending approval.
538
        // Include users with entries pending approval.
539
        $return = mod_glossary_external::get_authors($g1->id, 0, 20, array('includenotapproved' => true));
539
        $return = mod_glossary_external::get_authors($g1->id, 0, 20, ['includenotapproved' => true]);
540
        $return = external_api::clean_returnvalue(mod_glossary_external::get_authors_returns(), $return);
540
        $return = external_api::clean_returnvalue(mod_glossary_external::get_authors_returns(), $return);
541
        $this->assertCount(3, $return['authors']);
541
        $this->assertCount(3, $return['authors']);
542
        $this->assertEquals(3, $return['count']);
542
        $this->assertEquals(3, $return['count']);
543
        $this->assertEquals($u2->id, $return['authors'][0]['id']);
543
        $this->assertEquals($u2->id, $return['authors'][0]['id']);
544
        $this->assertEquals($u3->id, $return['authors'][1]['id']);
544
        $this->assertEquals($u3->id, $return['authors'][1]['id']);
Línea 545... Línea 545...
545
        $this->assertEquals($u1->id, $return['authors'][2]['id']);
545
        $this->assertEquals($u1->id, $return['authors'][2]['id']);
546
 
546
 
547
        // Pagination.
547
        // Pagination.
548
        $return = mod_glossary_external::get_authors($g1->id, 1, 1, array('includenotapproved' => true));
548
        $return = mod_glossary_external::get_authors($g1->id, 1, 1, ['includenotapproved' => true]);
549
        $return = external_api::clean_returnvalue(mod_glossary_external::get_authors_returns(), $return);
549
        $return = external_api::clean_returnvalue(mod_glossary_external::get_authors_returns(), $return);
550
        $this->assertCount(1, $return['authors']);
550
        $this->assertCount(1, $return['authors']);
551
        $this->assertEquals(3, $return['count']);
551
        $this->assertEquals(3, $return['count']);
Línea 611... Línea 611...
611
        $this->assertEquals($e1b2->id, $return['entries'][1]['id']);
611
        $this->assertEquals($e1b2->id, $return['entries'][1]['id']);
Línea 612... Línea 612...
612
 
612
 
613
        // Including non-approved.
613
        // Including non-approved.
614
        $this->setAdminUser();
614
        $this->setAdminUser();
615
        $return = mod_glossary_external::get_entries_by_author($g1->id, 'ALL', 'LASTNAME', 'ASC', 0, 20,
615
        $return = mod_glossary_external::get_entries_by_author($g1->id, 'ALL', 'LASTNAME', 'ASC', 0, 20,
616
            array('includenotapproved' => true));
616
            ['includenotapproved' => true]);
617
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_author_returns(), $return);
617
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_author_returns(), $return);
618
        $this->assertCount(7, $return['entries']);
618
        $this->assertCount(7, $return['entries']);
619
        $this->assertEquals(7, $return['count']);
619
        $this->assertEquals(7, $return['count']);
620
        $this->assertEquals($e1d1->id, $return['entries'][0]['id']);
620
        $this->assertEquals($e1d1->id, $return['entries'][0]['id']);
Línea 748... Línea 748...
748
        $this->assertEquals($e1a3->id, $return['entries'][1]['id']);
748
        $this->assertEquals($e1a3->id, $return['entries'][1]['id']);
749
        $this->assertEquals($e1a1->id, $return['entries'][2]['id']);
749
        $this->assertEquals($e1a1->id, $return['entries'][2]['id']);
Línea 750... Línea 750...
750
 
750
 
751
        // Including non approved.
751
        // Including non approved.
752
        $return = mod_glossary_external::get_entries_by_author_id($g1->id, $u1->id, 'CONCEPT', 'ASC', 0, 20,
752
        $return = mod_glossary_external::get_entries_by_author_id($g1->id, $u1->id, 'CONCEPT', 'ASC', 0, 20,
753
            array('includenotapproved' => true));
753
            ['includenotapproved' => true]);
754
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_author_id_returns(), $return);
754
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_author_id_returns(), $return);
755
        $this->assertCount(4, $return['entries']);
755
        $this->assertCount(4, $return['entries']);
756
        $this->assertEquals(4, $return['count']);
756
        $this->assertEquals(4, $return['count']);
757
        $this->assertEquals($e1a2->id, $return['entries'][0]['id']);
757
        $this->assertEquals($e1a2->id, $return['entries'][0]['id']);
758
        $this->assertEquals($e1a4->id, $return['entries'][1]['id']);
758
        $this->assertEquals($e1a4->id, $return['entries'][1]['id']);
759
        $this->assertEquals($e1a3->id, $return['entries'][2]['id']);
759
        $this->assertEquals($e1a3->id, $return['entries'][2]['id']);
Línea 760... Línea 760...
760
        $this->assertEquals($e1a1->id, $return['entries'][3]['id']);
760
        $this->assertEquals($e1a1->id, $return['entries'][3]['id']);
761
 
761
 
762
        // Pagination.
762
        // Pagination.
763
        $return = mod_glossary_external::get_entries_by_author_id($g1->id, $u1->id, 'CONCEPT', 'ASC', 0, 2,
763
        $return = mod_glossary_external::get_entries_by_author_id($g1->id, $u1->id, 'CONCEPT', 'ASC', 0, 2,
764
            array('includenotapproved' => true));
764
            ['includenotapproved' => true]);
765
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_author_id_returns(), $return);
765
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_author_id_returns(), $return);
766
        $this->assertCount(2, $return['entries']);
766
        $this->assertCount(2, $return['entries']);
767
        $this->assertEquals(4, $return['count']);
767
        $this->assertEquals(4, $return['count']);
768
        $this->assertEquals($e1a2->id, $return['entries'][0]['id']);
768
        $this->assertEquals($e1a2->id, $return['entries'][0]['id']);
769
        $this->assertEquals($e1a4->id, $return['entries'][1]['id']);
769
        $this->assertEquals($e1a4->id, $return['entries'][1]['id']);
770
        $return = mod_glossary_external::get_entries_by_author_id($g1->id, $u1->id, 'CONCEPT', 'ASC', 1, 2,
770
        $return = mod_glossary_external::get_entries_by_author_id($g1->id, $u1->id, 'CONCEPT', 'ASC', 1, 2,
771
            array('includenotapproved' => true));
771
            ['includenotapproved' => true]);
772
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_author_id_returns(), $return);
772
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_author_id_returns(), $return);
773
        $this->assertCount(2, $return['entries']);
773
        $this->assertCount(2, $return['entries']);
774
        $this->assertEquals(4, $return['count']);
774
        $this->assertEquals(4, $return['count']);
Línea 870... Línea 870...
870
        $this->assertEquals($e7->id, $return['entries'][0]['id']);
870
        $this->assertEquals($e7->id, $return['entries'][0]['id']);
Línea 871... Línea 871...
871
 
871
 
872
        // Including not approved.
872
        // Including not approved.
873
        $query = 'ou';
873
        $query = 'ou';
874
        $return = mod_glossary_external::get_entries_by_search($g1->id, $query, false, 'CONCEPT', 'ASC', 0, 20,
874
        $return = mod_glossary_external::get_entries_by_search($g1->id, $query, false, 'CONCEPT', 'ASC', 0, 20,
875
            array('includenotapproved' => true));
875
            ['includenotapproved' => true]);
876
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_search_returns(), $return);
876
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_search_returns(), $return);
877
        $this->assertCount(4, $return['entries']);
877
        $this->assertCount(4, $return['entries']);
878
        $this->assertEquals(4, $return['count']);
878
        $this->assertEquals(4, $return['count']);
879
        $this->assertEquals($e1->id, $return['entries'][0]['id']);
879
        $this->assertEquals($e1->id, $return['entries'][0]['id']);
Línea 882... Línea 882...
882
        $this->assertEquals($e7->id, $return['entries'][3]['id']);
882
        $this->assertEquals($e7->id, $return['entries'][3]['id']);
Línea 883... Línea 883...
883
 
883
 
884
        // Advanced query string.
884
        // Advanced query string.
885
        $query = '+Heroes -Abcd';
885
        $query = '+Heroes -Abcd';
886
        $return = mod_glossary_external::get_entries_by_search($g1->id, $query, true, 'CONCEPT', 'ASC', 0, 20,
886
        $return = mod_glossary_external::get_entries_by_search($g1->id, $query, true, 'CONCEPT', 'ASC', 0, 20,
887
            array('includenotapproved' => true));
887
            ['includenotapproved' => true]);
888
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_search_returns(), $return);
888
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_search_returns(), $return);
889
        $this->assertCount(2, $return['entries']);
889
        $this->assertCount(2, $return['entries']);
890
        $this->assertEquals(2, $return['count']);
890
        $this->assertEquals(2, $return['count']);
891
        $this->assertEquals($e6->id, $return['entries'][0]['id']);
891
        $this->assertEquals($e6->id, $return['entries'][0]['id']);
Línea 912... Línea 912...
912
        $e3 = $gg->create_content($g1, array('userid' => $u1->id, 'approved' => 1), array('dog'));
912
        $e3 = $gg->create_content($g1, array('userid' => $u1->id, 'approved' => 1), array('dog'));
913
        $e4 = $gg->create_content($g1, array('userid' => $u1->id, 'approved' => 0, 'concept' => 'dog'));
913
        $e4 = $gg->create_content($g1, array('userid' => $u1->id, 'approved' => 0, 'concept' => 'dog'));
914
        $e5 = $gg->create_content($g2, array('userid' => $u1->id, 'approved' => 1, 'concept' => 'dog'), array('cat'));
914
        $e5 = $gg->create_content($g2, array('userid' => $u1->id, 'approved' => 1, 'concept' => 'dog'), array('cat'));
Línea 915... Línea 915...
915
 
915
 
916
        // Search concept + alias.
916
        // Search concept + alias.
917
        $return = mod_glossary_external::get_entries_by_term($g1->id, 'cat', 0, 20, array('includenotapproved' => false));
917
        $return = mod_glossary_external::get_entries_by_term($g1->id, 'cat', 0, 20, ['includenotapproved' => false]);
918
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_term_returns(), $return);
918
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_term_returns(), $return);
919
        $this->assertCount(2, $return['entries']);
919
        $this->assertCount(2, $return['entries']);
920
        $this->assertEquals(2, $return['count']);
920
        $this->assertEquals(2, $return['count']);
921
        // Compare ids, ignore ordering of array, using canonicalize parameter of assertEquals.
921
        // Compare ids, ignore ordering of array, using canonicalize parameter of assertEquals.
Línea 931... Línea 931...
931
            }
931
            }
932
        }
932
        }
933
        $this->assertEqualsCanonicalizing($expected, $actual);
933
        $this->assertEqualsCanonicalizing($expected, $actual);
Línea 934... Línea 934...
934
 
934
 
935
        // Search alias.
935
        // Search alias.
936
        $return = mod_glossary_external::get_entries_by_term($g1->id, 'dog', 0, 20, array('includenotapproved' => false));
936
        $return = mod_glossary_external::get_entries_by_term($g1->id, 'dog', 0, 20, ['includenotapproved' => false]);
Línea 937... Línea 937...
937
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_term_returns(), $return);
937
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_term_returns(), $return);
938
 
938
 
939
        $this->assertCount(2, $return['entries']);
939
        $this->assertCount(2, $return['entries']);
940
        $this->assertEquals(2, $return['count']);
940
        $this->assertEquals(2, $return['count']);
941
        // Compare ids, ignore ordering of array, using canonicalize parameter of assertEquals.
941
        // Compare ids, ignore ordering of array, using canonicalize parameter of assertEquals.
942
        $expected = array($e2->id, $e3->id);
942
        $expected = array($e2->id, $e3->id);
Línea 943... Línea 943...
943
        $actual = array($return['entries'][0]['id'], $return['entries'][1]['id']);
943
        $actual = array($return['entries'][0]['id'], $return['entries'][1]['id']);
944
        $this->assertEqualsCanonicalizing($expected, $actual);
944
        $this->assertEqualsCanonicalizing($expected, $actual);
945
 
945
 
946
        // Search including not approved.
946
        // Search including not approved.
947
        $return = mod_glossary_external::get_entries_by_term($g1->id, 'dog', 0, 20, array('includenotapproved' => true));
947
        $return = mod_glossary_external::get_entries_by_term($g1->id, 'dog', 0, 20, ['includenotapproved' => true]);
948
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_term_returns(), $return);
948
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_term_returns(), $return);
949
        $this->assertCount(3, $return['entries']);
949
        $this->assertCount(3, $return['entries']);
950
        $this->assertEquals(3, $return['count']);
950
        $this->assertEquals(3, $return['count']);
951
        // Compare ids, ignore ordering of array, using canonicalize parameter of assertEquals.
951
        // Compare ids, ignore ordering of array, using canonicalize parameter of assertEquals.
Línea 952... Línea 952...
952
        $expected = array($e4->id, $e2->id, $e3->id);
952
        $expected = array($e4->id, $e2->id, $e3->id);
953
        $actual = array($return['entries'][0]['id'], $return['entries'][1]['id'], $return['entries'][2]['id']);
953
        $actual = array($return['entries'][0]['id'], $return['entries'][1]['id'], $return['entries'][2]['id']);
954
        $this->assertEqualsCanonicalizing($expected, $actual);
954
        $this->assertEqualsCanonicalizing($expected, $actual);
955
 
955
 
956
        // Pagination.
956
        // Pagination.
957
        $return = mod_glossary_external::get_entries_by_term($g1->id, 'dog', 0, 1, array('includenotapproved' => true));
957
        $return = mod_glossary_external::get_entries_by_term($g1->id, 'dog', 0, 1, ['includenotapproved' => true]);
958
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_term_returns(), $return);
958
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_term_returns(), $return);
-
 
959
        $this->assertCount(1, $return['entries']);
-
 
960
        // We don't compare the returned entry id because it may be different depending on the DBMS,
-
 
961
        // for example, Postgres does a random sorting in this case.
-
 
962
        $this->assertEquals(3, $return['count']);
-
 
963
        $return = mod_glossary_external::get_entries_by_term($g1->id, 'dog', 1, 1, ['includenotapproved' => true]);
-
 
964
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_term_returns(), $return);
-
 
965
        $this->assertCount(1, $return['entries']);
-
 
966
        $this->assertEquals(3, $return['count']);
-
 
967
    }
-
 
968
 
-
 
969
    /**
-
 
970
     * Test get_entries_by_multilingual_term.
-
 
971
     *
-
 
972
     * @covers \mod_glossary_external::get_entries_by_term
-
 
973
     * @return void
-
 
974
     * @throws \coding_exception
-
 
975
     * @throws \invalid_response_exception
-
 
976
     * @throws \moodle_exception
-
 
977
     */
-
 
978
    public function test_get_entries_by_multilingual_term(): void {
-
 
979
        $this->resetAfterTest(true);
-
 
980
 
-
 
981
        // Enable multilang filter to on content and heading.
-
 
982
        filter_set_global_state('multilang', TEXTFILTER_ON);
-
 
983
        filter_set_applies_to_strings('multilang', 1);
-
 
984
 
-
 
985
        // Generate all the things.
-
 
986
        $gg = $this->getDataGenerator()->get_plugin_generator('mod_glossary');
-
 
987
        $c1 = $this->getDataGenerator()->create_course();
-
 
988
        $g1 = $this->getDataGenerator()->create_module('glossary', ['course' => $c1->id]);
-
 
989
        $g2 = $this->getDataGenerator()->create_module('glossary', ['course' => $c1->id]);
-
 
990
        $u1 = $this->getDataGenerator()->create_user();
-
 
991
        $this->getDataGenerator()->enrol_user($u1->id, $c1->id);
-
 
992
 
-
 
993
        $this->setAdminUser();
-
 
994
 
-
 
995
        $e1 = $gg->create_content($g1, ['userid' => $u1->id, 'approved' => 1, 'concept' => '<span lang="en" ' .
-
 
996
            'class="multilang">cat</span><span lang="fr" class="multilang">chat</span>', 'tags' => ['Cats', 'Dogs']]);
-
 
997
        $e2 = $gg->create_content($g1, ['userid' => $u1->id, 'approved' => 1], ['<span lang="en" class="' .
-
 
998
            'multilang">cat</span><span lang="fr" class="multilang">chat</span>', '<span lang="en" class="multilang">' .
-
 
999
            'dog</span><span lang="fr" class="multilang">chien</span>']);
-
 
1000
        $e3 = $gg->create_content($g1, ['userid' => $u1->id, 'approved' => 1], ['<span lang="en" class="' .
-
 
1001
            'multilang">dog</span><span lang="fr" class="multilang">chien</span>']);
-
 
1002
        $e4 = $gg->create_content($g1, ['userid' => $u1->id, 'approved' => 0, 'concept' => '<span lang="en" class="' .
-
 
1003
            'multilang">dog</span><span lang="fr" class="multilang">chien</span>']);
-
 
1004
        $e5 = $gg->create_content($g2, ['userid' => $u1->id, 'approved' => 1, 'concept' => '<span lang="en" class="' .
-
 
1005
            'multilang">cog</span><span lang="fr" class="multilang">chien</span>'], ['cat']);
-
 
1006
 
-
 
1007
        // Search concept + alias.
-
 
1008
        $return = mod_glossary_external::get_entries_by_term($g1->id, 'cat', 0, 20, ['includenotapproved' => false]);
-
 
1009
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_term_returns(), $return);
-
 
1010
        $this->assertCount(2, $return['entries']);
-
 
1011
        $this->assertEquals(2, $return['count']);
-
 
1012
        // Compare ids, ignore ordering of array, using canonicalize parameter of assertEquals.
-
 
1013
        $expected = [$e1->id, $e2->id];
-
 
1014
        $actual = [$return['entries'][0]['id'], $return['entries'][1]['id']];
-
 
1015
        $this->assertEqualsCanonicalizing($expected, $actual);
-
 
1016
        // Compare rawnames of all expected tags, ignore ordering of array, using canonicalize parameter of assertEquals.
-
 
1017
        $expected = ['Cats', 'Dogs']; // Only $e1 has 2 tags.
-
 
1018
        $actual = []; // Accumulate all tags returned.
-
 
1019
        foreach ($return['entries'] as $entry) {
-
 
1020
            foreach ($entry['tags'] as $tag) {
-
 
1021
                $actual[] = $tag['rawname'];
-
 
1022
            }
-
 
1023
        }
-
 
1024
        $this->assertEqualsCanonicalizing($expected, $actual);
-
 
1025
 
-
 
1026
        // Search alias.
-
 
1027
        $return = mod_glossary_external::get_entries_by_term($g1->id, 'dog', 0, 20, ['includenotapproved' => false]);
-
 
1028
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_term_returns(), $return);
-
 
1029
 
-
 
1030
        $this->assertCount(2, $return['entries']);
-
 
1031
        $this->assertEquals(2, $return['count']);
-
 
1032
        // Compare ids, ignore ordering of array, using canonicalize parameter of assertEquals.
-
 
1033
        $expected = [$e2->id, $e3->id];
-
 
1034
        $actual = [$return['entries'][0]['id'], $return['entries'][1]['id']];
-
 
1035
        $this->assertEqualsCanonicalizing($expected, $actual);
-
 
1036
 
-
 
1037
        // Search including not approved.
-
 
1038
        $return = mod_glossary_external::get_entries_by_term($g1->id, 'dog', 0, 20, ['includenotapproved' => true]);
-
 
1039
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_term_returns(), $return);
-
 
1040
        $this->assertCount(3, $return['entries']);
-
 
1041
        $this->assertEquals(3, $return['count']);
-
 
1042
        // Compare ids, ignore ordering of array, using canonicalize parameter of assertEquals.
-
 
1043
        $expected = [$e4->id, $e2->id, $e3->id];
-
 
1044
        $actual = [$return['entries'][0]['id'], $return['entries'][1]['id'], $return['entries'][2]['id']];
-
 
1045
        $this->assertEqualsCanonicalizing($expected, $actual);
-
 
1046
 
-
 
1047
        // Pagination.
-
 
1048
        $return = mod_glossary_external::get_entries_by_term($g1->id, 'dog', 0, 1, ['includenotapproved' => true]);
-
 
1049
        $return = external_api::clean_returnvalue(mod_glossary_external::get_entries_by_term_returns(), $return);
959
        $this->assertCount(1, $return['entries']);
1050
        $this->assertCount(1, $return['entries']);
960
        // We don't compare the returned entry id because it may be different depending on the DBMS,
1051
        // We don't compare the returned entry id because it may be different depending on the DBMS,
961
        // for example, Postgres does a random sorting in this case.
1052
        // for example, Postgres does a random sorting in this case.
962
        $this->assertEquals(3, $return['count']);
1053
        $this->assertEquals(3, $return['count']);
963
        $return = mod_glossary_external::get_entries_by_term($g1->id, 'dog', 1, 1, array('includenotapproved' => true));
1054
        $return = mod_glossary_external::get_entries_by_term($g1->id, 'dog', 1, 1, ['includenotapproved' => true]);