MDL-61951 core_grading: Several fixes to the privacy implementation
[moodle.git] / grade / grading / tests / privacy_legacy_polyfill_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  * Unit tests for the privacy legacy polyfill for gradingform.
19  *
20  * @package     core_grading
21  * @category    test
22  * @copyright   2018 Jake Dallimore <jrhdallimore@gmail.com>
23  * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24  */
26 defined('MOODLE_INTERNAL') || die();
28 /**
29  * Unit tests for the Grading API's privacy legacy_polyfill.
30  *
31  * @copyright   2018 Jake Dallimore <jrhdallimore@gmail.com>
32  * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
33  */
34 class gradeform_privacy_legacy_polyfill_test extends advanced_testcase {
35     /**
36      * Test that the core_grading\privacy\legacy_polyfill works and that the static _get_grading_export_data can be called.
37      */
38     public function test_get_gradingform_export_data() {
39         $userid = 476;
40         $context = context_system::instance();
42         $mock = $this->createMock(test_gradingform_legacy_polyfill_mock_wrapper::class);
43         $mock->expects($this->once())
44             ->method('get_return_value')
45             ->with('_get_gradingform_export_data', [$context, (object)[], $userid]);
47         test_legacy_polyfill_gradingform_provider::$mock = $mock;
48         test_legacy_polyfill_gradingform_provider::get_gradingform_export_data($context, (object)[], $userid);
49     }
51     /**
52      * Test for _get_metadata shim.
53      */
54     public function test_get_metadata() {
55         $collection = new \core_privacy\local\metadata\collection('core_gradingform');
56         $this->assertSame($collection, test_legacy_polyfill_gradingform_provider::get_metadata($collection));
57     }
59     /**
60      * Test the _delete_gradingform_for_context shim.
61      */
62     public function test_delete_gradingform_for_context() {
63         $context = context_system::instance();
65         $mock = $this->createMock(test_gradingform_legacy_polyfill_mock_wrapper::class);
66         $mock->expects($this->once())
67             ->method('get_return_value')
68             ->with('_delete_gradingform_for_context', [$context]);
70         test_legacy_polyfill_gradingform_provider::$mock = $mock;
71         test_legacy_polyfill_gradingform_provider::delete_gradingform_for_context($context);
72     }
74     /**
75      * Test the _delete_gradingform_for_context shim.
76      */
77     public function test_delete_gradingform_for_user() {
78         $userid = 696;
79         $context = \context_system::instance();
81         $mock = $this->createMock(test_gradingform_legacy_polyfill_mock_wrapper::class);
82         $mock->expects($this->once())
83             ->method('get_return_value')
84             ->with('_delete_gradingform_for_userid', [$userid, $context]);
86         test_legacy_polyfill_gradingform_provider::$mock = $mock;
87         test_legacy_polyfill_gradingform_provider::delete_gradingform_for_userid($userid, $context);
88     }
89 }
91 /**
92  * Legacy polyfill test class for the gradingform_provider.
93  *
94  * @copyright   2018 Jake Dallimore <jrhdallimore@gmail.com>
95  * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
96  */
97 class test_legacy_polyfill_gradingform_provider implements
98     \core_privacy\local\metadata\provider,
99     \core_grading\privacy\gradingform_provider {
101     use \core_grading\privacy\gradingform_legacy_polyfill;
102     use \core_privacy\local\legacy_polyfill;
104     /**
105      * @var test_legacy_polyfill_gradingform_provider $mock.
106      */
107     public static $mock = null;
109     /**
110      * Export all user data for the gradingform plugin.
111      *
112      * @param context $context
113      * @param stdClass $definition
114      * @param int $userid
115      */
116     protected static function _get_gradingform_export_data(\context $context, $definition, $userid) {
117         static::$mock->get_return_value(__FUNCTION__, func_get_args());
118     }
120     /**
121      * Deletes all user data for the given context.
122      *
123      * @param context $context
124      */
125     protected static function _delete_gradingform_for_context(\context $context) {
126         static::$mock->get_return_value(__FUNCTION__, func_get_args());
127     }
129     /**
130      * Delete personal data for the given user and context.
131      *
132      * @param int $userid
133      * @param context $context
134      */
135     protected static function _delete_gradingform_for_userid($userid, \context $context) {
136         static::$mock->get_return_value(__FUNCTION__, func_get_args());
137     }
139     /**
140      * Returns metadata about this plugin.
141      *
142      * @param   \core_privacy\local\metadata\collection $collection The initialised collection to add items to.
143      * @return  \core_privacy\local\metadata\collection     A listing of user data stored through this system.
144      */
145     protected static function _get_metadata(\core_privacy\local\metadata\collection $collection) {
146         return $collection;
147     }
150 /**
151  * Called inside the polyfill methods in the test polyfill provider, allowing us to ensure these are called with correct params.
152  *
153  * @copyright   2018 Jake Dallimore <jrhdallimore@gmail.com>
154  * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
155  */
156 class test_gradingform_legacy_polyfill_mock_wrapper {
157     /**
158      * Get the return value for the specified item.
159      */
160     public function get_return_value() {
161     }