weekly back-to-dev release 5.0dev
[moodle.git] / mod / glossary / tests / concept_cache_test.php
blob8f97bac8f353a9d48b53b7c22f3c21e4b69a5976
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.
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/>.
17 namespace mod_glossary;
19 /**
20 * Concept fetching and caching tests.
22 * @package mod_glossary
23 * @category test
24 * @copyright 2014 Petr Skoda
25 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
27 class concept_cache_test extends \advanced_testcase {
28 /**
29 * Test convect fetching.
31 public function test_concept_fetching(): void {
32 global $CFG, $DB;
33 $this->resetAfterTest(true);
34 $this->setAdminUser();
36 $CFG->glossary_linkbydefault = 1;
37 $CFG->glossary_linkentries = 0;
39 // Create a test courses.
40 $course1 = $this->getDataGenerator()->create_course();
41 $course2 = $this->getDataGenerator()->create_course();
42 $site = $DB->get_record('course', array('id' => SITEID));
44 // Create a glossary.
45 $glossary1a = $this->getDataGenerator()->create_module('glossary',
46 array('course' => $course1->id, 'mainglossary' => 1, 'usedynalink' => 1));
47 $glossary1b = $this->getDataGenerator()->create_module('glossary',
48 array('course' => $course1->id, 'mainglossary' => 1, 'usedynalink' => 1));
49 $glossary1c = $this->getDataGenerator()->create_module('glossary',
50 array('course' => $course1->id, 'mainglossary' => 1, 'usedynalink' => 0));
51 $glossary2 = $this->getDataGenerator()->create_module('glossary',
52 array('course' => $course2->id, 'mainglossary' => 1, 'usedynalink' => 1));
53 $glossary3 = $this->getDataGenerator()->create_module('glossary',
54 array('course' => $site->id, 'mainglossary' => 1, 'usedynalink' => 1, 'globalglossary' => 1));
56 /** @var mod_glossary_generator $generator */
57 $generator = $this->getDataGenerator()->get_plugin_generator('mod_glossary');
58 $entry1a1 = $generator->create_content($glossary1a, array('concept' => 'first', 'usedynalink' => 1), array('prvni', 'erste'));
59 $entry1a2 = $generator->create_content($glossary1a, array('concept' => 'A&B', 'usedynalink' => 1));
60 $entry1a3 = $generator->create_content($glossary1a, array('concept' => 'neee', 'usedynalink' => 0));
61 $entry1b1 = $generator->create_content($glossary1b, array('concept' => 'second', 'usedynalink' => 1));
62 $entry1c1 = $generator->create_content($glossary1c, array('concept' => 'third', 'usedynalink' => 1));
63 $entry31 = $generator->create_content($glossary3, array('concept' => 'global', 'usedynalink' => 1), array('globalni'));
65 $cat1 = $generator->create_category($glossary1a, array('name' => 'special'), array($entry1a1, $entry1a2));
67 \mod_glossary\local\concept_cache::reset_caches();
69 $concepts1 = \mod_glossary\local\concept_cache::get_concepts($course1->id);
70 $this->assertCount(3, $concepts1[0]);
71 $this->arrayHasKey($concepts1[0], $glossary1a->id);
72 $this->arrayHasKey($concepts1[0], $glossary1b->id);
73 $this->arrayHasKey($concepts1[0], $glossary3->id);
74 $this->assertCount(3, $concepts1[1]);
75 $this->arrayHasKey($concepts1[1], $glossary1a->id);
76 $this->arrayHasKey($concepts1[1], $glossary1b->id);
77 $this->arrayHasKey($concepts1[0], $glossary3->id);
78 $this->assertCount(5, $concepts1[1][$glossary1a->id]);
79 foreach($concepts1[1][$glossary1a->id] as $concept) {
80 $this->assertSame(array('id', 'glossaryid', 'concept', 'casesensitive', 'category', 'fullmatch'), array_keys((array)$concept));
81 if ($concept->concept === 'first') {
82 $this->assertEquals($entry1a1->id, $concept->id);
83 $this->assertEquals($glossary1a->id, $concept->glossaryid);
84 $this->assertEquals(0, $concept->category);
85 } else if ($concept->concept === 'prvni') {
86 $this->assertEquals($entry1a1->id, $concept->id);
87 $this->assertEquals($glossary1a->id, $concept->glossaryid);
88 $this->assertEquals(0, $concept->category);
89 } else if ($concept->concept === 'erste') {
90 $this->assertEquals($entry1a1->id, $concept->id);
91 $this->assertEquals($glossary1a->id, $concept->glossaryid);
92 $this->assertEquals(0, $concept->category);
93 } else if ($concept->concept === 'A&amp;B') {
94 $this->assertEquals($entry1a2->id, $concept->id);
95 $this->assertEquals($glossary1a->id, $concept->glossaryid);
96 $this->assertEquals(0, $concept->category);
97 } else if ($concept->concept === 'special') {
98 $this->assertEquals($cat1->id, $concept->id);
99 $this->assertEquals($glossary1a->id, $concept->glossaryid);
100 $this->assertEquals(1, $concept->category);
101 } else {
102 $this->fail('Unexpected concept: ' . $concept->concept);
105 $this->assertCount(1, $concepts1[1][$glossary1b->id]);
106 foreach($concepts1[1][$glossary1b->id] as $concept) {
107 $this->assertSame(array('id', 'glossaryid', 'concept', 'casesensitive', 'category', 'fullmatch'), array_keys((array)$concept));
108 if ($concept->concept === 'second') {
109 $this->assertEquals($entry1b1->id, $concept->id);
110 $this->assertEquals($glossary1b->id, $concept->glossaryid);
111 $this->assertEquals(0, $concept->category);
112 } else {
113 $this->fail('Unexpected concept: ' . $concept->concept);
116 $this->assertCount(2, $concepts1[1][$glossary3->id]);
117 foreach($concepts1[1][$glossary3->id] as $concept) {
118 $this->assertSame(array('id', 'glossaryid', 'concept', 'casesensitive', 'category', 'fullmatch'), array_keys((array)$concept));
119 if ($concept->concept === 'global') {
120 $this->assertEquals($entry31->id, $concept->id);
121 $this->assertEquals($glossary3->id, $concept->glossaryid);
122 $this->assertEquals(0, $concept->category);
123 } else if ($concept->concept === 'globalni') {
124 $this->assertEquals($entry31->id, $concept->id);
125 $this->assertEquals($glossary3->id, $concept->glossaryid);
126 $this->assertEquals(0, $concept->category);
127 } else {
128 $this->fail('Unexpected concept: ' . $concept->concept);
132 $concepts3 = \mod_glossary\local\concept_cache::get_concepts($site->id);
133 $this->assertCount(1, $concepts3[0]);
134 $this->arrayHasKey($concepts3[0], $glossary3->id);
135 $this->assertCount(1, $concepts3[1]);
136 $this->arrayHasKey($concepts3[0], $glossary3->id);
137 foreach($concepts3[1][$glossary3->id] as $concept) {
138 $this->assertSame(array('id', 'glossaryid', 'concept', 'casesensitive', 'category', 'fullmatch'), array_keys((array)$concept));
139 if ($concept->concept === 'global') {
140 $this->assertEquals($entry31->id, $concept->id);
141 $this->assertEquals($glossary3->id, $concept->glossaryid);
142 $this->assertEquals(0, $concept->category);
143 } else if ($concept->concept === 'globalni') {
144 $this->assertEquals($entry31->id, $concept->id);
145 $this->assertEquals($glossary3->id, $concept->glossaryid);
146 $this->assertEquals(0, $concept->category);
147 } else {
148 $this->fail('Unexpected concept: ' . $concept->concept);
152 $concepts2 = \mod_glossary\local\concept_cache::get_concepts($course2->id);
153 $this->assertEquals($concepts3, $concepts2);
155 // Test uservisible flag.
156 set_config('enableavailability', 1);
157 $glossary1d = $this->getDataGenerator()->create_module('glossary',
158 array('course' => $course1->id, 'mainglossary' => 1, 'usedynalink' => 1,
159 'availability' => json_encode(\core_availability\tree::get_root_json(
160 array(\availability_group\condition::get_json())))));
161 $entry1d1 = $generator->create_content($glossary1d, array('concept' => 'membersonly', 'usedynalink' => 1));
162 $user = $this->getDataGenerator()->create_user();
163 $this->getDataGenerator()->enrol_user($user->id, $course1->id);
164 $this->getDataGenerator()->enrol_user($user->id, $course2->id);
165 \mod_glossary\local\concept_cache::reset_caches();
166 $concepts1 = \mod_glossary\local\concept_cache::get_concepts($course1->id);
167 $this->assertCount(4, $concepts1[0]);
168 $this->assertCount(4, $concepts1[1]);
169 $this->setUser($user);
170 \course_modinfo::clear_instance_cache();
171 \mod_glossary\local\concept_cache::reset_caches();
172 $concepts1 = \mod_glossary\local\concept_cache::get_concepts($course1->id);
173 $this->assertCount(3, $concepts1[0]);
174 $this->assertCount(3, $concepts1[1]);