MDL-61692 core_privacy: add privacyfields to link_ methods
[moodle.git] / privacy / tests / collection_test.php
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/>.
17 /**
18  * Collection unit tests.
19  *
20  * @package     core_privacy
21  * @category    test
22  * @copyright   2018 Andrew Nicols <andrew@nicols.co.uk>
23  * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24  */
26 defined('MOODLE_INTERNAL') || die();
28 global $CFG;
30 use \core_privacy\local\metadata\collection;
31 use \core_privacy\local\metadata\types;
33 /**
34  * Tests for the \core_privacy API's collection functionality.
35  *
36  * @copyright   2018 Andrew Nicols <andrew@nicols.co.uk>
37  * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
38  */
39 class core_privacy_metadata_collection extends advanced_testcase {
42     /**
43      * Test that adding an unknown type causes the type to be added to the collection.
44      */
45     public function test_add_type_generic_type() {
46         $collection = new collection('core_privacy');
48         // Mock a new types\type.
49         $mockedtype = $this->createMock(types\type::class);
50         $collection->add_type($mockedtype);
52         $items = $collection->get_collection();
53         $this->assertCount(1, $items);
54         $this->assertEquals($mockedtype, reset($items));
55     }
57     /**
58      * Test that adding a known type works as anticipated.
59      */
60     public function test_add_type_known_type() {
61         $collection = new collection('core_privacy');
63         $linked = new types\subsystem_link('example', [], 'langstring');
64         $collection->add_type($linked);
66         $items = $collection->get_collection();
67         $this->assertCount(1, $items);
68         $this->assertEquals($linked, reset($items));
69     }
71     /**
72      * Test that adding multiple types returns them all.
73      */
74     public function test_add_type_multiple() {
75         $collection = new collection('core_privacy');
77         $a = new types\subsystem_link('example', [], 'langstring');
78         $collection->add_type($a);
80         $b = new types\subsystem_link('example', [], 'langstring');
81         $collection->add_type($b);
83         $items = $collection->get_collection();
84         $this->assertCount(2, $items);
85     }
87     /**
88      * Test that the add_database_table function adds a database table.
89      */
90     public function test_add_database_table() {
91         $collection = new collection('core_privacy');
93         $name = 'example';
94         $fields = ['field' => 'description'];
95         $summary = 'summarisation';
97         $collection->add_database_table($name, $fields, $summary);
99         $items = $collection->get_collection();
100         $this->assertCount(1, $items);
101         $item = reset($items);
102         $this->assertInstanceOf(types\database_table::class, $item);
103         $this->assertEquals($name, $item->get_name());
104         $this->assertEquals($fields, $item->get_privacy_fields());
105         $this->assertEquals($summary, $item->get_summary());
106     }
108     /**
109      * Test that the add_user_preference function adds a single user preference.
110      */
111     public function test_add_user_preference() {
112         $collection = new collection('core_privacy');
114         $name = 'example';
115         $summary = 'summarisation';
117         $collection->add_user_preference($name, $summary);
119         $items = $collection->get_collection();
120         $this->assertCount(1, $items);
121         $item = reset($items);
122         $this->assertInstanceOf(types\user_preference::class, $item);
123         $this->assertEquals($name, $item->get_name());
124         $this->assertEquals($summary, $item->get_summary());
125     }
127     /**
128      * Test that the link_external_location function links an external location.
129      */
130     public function test_link_external_location() {
131         $collection = new collection('core_privacy');
133         $name = 'example';
134         $fields = ['field' => 'description'];
135         $summary = 'summarisation';
137         $collection->link_external_location($name, $fields, $summary);
139         $items = $collection->get_collection();
140         $this->assertCount(1, $items);
141         $item = reset($items);
142         $this->assertInstanceOf(types\external_location::class, $item);
143         $this->assertEquals($name, $item->get_name());
144         $this->assertEquals($fields, $item->get_privacy_fields());
145         $this->assertEquals($summary, $item->get_summary());
146     }
148     /**
149      * Test that the link_subsystem function links the subsystem.
150      */
151     public function test_link_subsystem() {
152         $collection = new collection('core_privacy');
154         $name = 'example';
155         $summary = 'summarisation';
157         $collection->link_subsystem($name, $summary);
159         $items = $collection->get_collection();
160         $this->assertCount(1, $items);
161         $item = reset($items);
162         $this->assertInstanceOf(types\subsystem_link::class, $item);
163         $this->assertEquals($name, $item->get_name());
164         $this->assertEquals($summary, $item->get_summary());
165     }
167     /**
168      * Test that the link_plugintype function links the plugin.
169      */
170     public function test_link_plugintype() {
171         $collection = new collection('core_privacy');
173         $name = 'example';
174         $summary = 'summarisation';
176         $collection->link_plugintype($name, $summary);
178         $items = $collection->get_collection();
179         $this->assertCount(1, $items);
180         $item = reset($items);
181         $this->assertInstanceOf(types\plugintype_link::class, $item);
182         $this->assertEquals($name, $item->get_name());
183         $this->assertEquals($summary, $item->get_summary());
184     }
186     /**
187      * Data provider to supply a list of valid components.
188      *
189      * @return  array
190      */
191     public function component_list_provider() {
192         return [
193             ['core_privacy'],
194             ['mod_forum'],
195         ];
196     }
198     /**
199      * Test that we can get the component correctly.
200      *
201      * The component will be used for string translations.
202      *
203      * @dataProvider component_list_provider
204      * @param   string  $component The component to test
205      */
206     public function test_get_component($component) {
207         $collection = new collection($component);
209         $this->assertEquals($component, $collection->get_component());
210     }