MDL-61308 assign_submission: Privacy code for user rights.
[moodle.git] / mod / assign / submission / onlinetext / tests / privacy_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 assignsubmission_onlinetext.
19  *
20  * @package    assignsubmission_onlinetext
21  * @copyright  2018 Adrian Greeve <adrian@moodle.com>
22  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 defined('MOODLE_INTERNAL') || die();
27 global $CFG;
28 require_once($CFG->dirroot . '/mod/assign/tests/privacy_test.php');
30 /**
31  * Unit tests for mod/assign/submission/onlinetext/classes/privacy/
32  *
33  * @copyright  2018 Adrian Greeve <adrian@moodle.com>
34  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
35  */
36 class assignsubmission_online_privacy_testcase extends \mod_assign\tests\mod_assign_privacy_testcase {
38     /**
39      * Convenience function for creating feedback data.
40      *
41      * @param  object   $assign         assign object
42      * @param  stdClass $student        user object
43      * @param  string   $text           Submission text.
44      * @return array   Submission plugin object and the submission object.
45      */
46     protected function create_online_submission($assign, $student, $text) {
47         global $CFG;
49         $this->setUser($student->id);
50         $submission = $assign->get_user_submission($student->id, true);
51         $data = new stdClass();
52         $data->onlinetext_editor = array(
53             'itemid' => file_get_unused_draft_itemid(),
54             'text' => $text,
55             'format' => FORMAT_PLAIN
56         );
58         $submission = $assign->get_user_submission($student->id, true);
60         $plugin = $assign->get_submission_plugin_by_type('onlinetext');
61         $plugin->save($submission, $data);
63         return [$plugin, $submission];
64     }
66     /**
67      * Quick test to make sure that get_metadata returns something.
68      */
69     public function test_get_metadata() {
70         $collection = new \core_privacy\local\metadata\collection('assignsubmission_file');
71         $collection = \assignsubmission_onlinetext\privacy\provider::get_metadata($collection);
72         $this->assertNotEmpty($collection);
73     }
75     /**
76      * Test that submission files and text are exported for a user.
77      */
78     public function test_export_submission_user_data() {
79         $this->resetAfterTest();
80         // Create course, assignment, submission, and then a feedback comment.
81         $course = $this->getDataGenerator()->create_course();
82         // Student.
83         $user1 = $this->getDataGenerator()->create_user();
84         $this->getDataGenerator()->enrol_user($user1->id, $course->id, 'student');
85         $assign = $this->create_instance(['course' => $course]);
87         $context = $assign->get_context();
89         $submissiontext = 'Just some text';
90         list($plugin, $submission) = $this->create_online_submission($assign, $user1, $submissiontext);
92         $writer = \core_privacy\local\request\writer::with_context($context);
93         $this->assertFalse($writer->has_any_data());
95         // The student should have some text submitted.
96         $exportdata = new \mod_assign\privacy\assign_plugin_request_data($context, $assign, $submission, ['Attempt 1']);
97         \assignsubmission_onlinetext\privacy\provider::export_submission_user_data($exportdata);
98         $this->assertEquals($submissiontext, $writer->get_data(['Attempt 1',
99                 get_string('privacy:path', 'assignsubmission_onlinetext')])->text);
100     }
102     /**
103      * Test that all submission files are deleted for this context.
104      */
105     public function test_delete_submission_for_context() {
106         $this->resetAfterTest();
107         // Create course, assignment, submission, and then a feedback comment.
108         $course = $this->getDataGenerator()->create_course();
109         // Student.
110         $user1 = $this->getDataGenerator()->create_user();
111         $user2 = $this->getDataGenerator()->create_user();
113         $this->getDataGenerator()->enrol_user($user1->id, $course->id, 'student');
114         $this->getDataGenerator()->enrol_user($user2->id, $course->id, 'student');
116         $assign = $this->create_instance(['course' => $course]);
118         $context = $assign->get_context();
120         $studenttext = 'Student one\'s text.';
121         list($plugin, $submission) = $this->create_online_submission($assign, $user1, $studenttext);
122         $studenttext2 = 'Student two\'s text.';
123         list($plugin2, $submission2) = $this->create_online_submission($assign, $user2, $studenttext2);
125         // Only need the context and assign object in this plugin for this operation.
126         $requestdata = new \mod_assign\privacy\assign_plugin_request_data($context, $assign);
127         \assignsubmission_onlinetext\privacy\provider::delete_submission_for_context($requestdata);
128         // This checks that there is no content for these submissions.
129         $this->assertTrue($plugin->is_empty($submission));
130         $this->assertTrue($plugin2->is_empty($submission2));
131     }
133     /**
134      * Test that the comments for a user are deleted.
135      */
136     public function test_delete_submission_for_userid() {
137         $this->resetAfterTest();
138         // Create course, assignment, submission, and then a feedback comment.
139         $course = $this->getDataGenerator()->create_course();
140         // Student.
141         $user1 = $this->getDataGenerator()->create_user();
142         $user2 = $this->getDataGenerator()->create_user();
144         $this->getDataGenerator()->enrol_user($user1->id, $course->id, 'student');
145         $this->getDataGenerator()->enrol_user($user2->id, $course->id, 'student');
147         $assign = $this->create_instance(['course' => $course]);
149         $context = $assign->get_context();
151         $studenttext = 'Student one\'s text.';
152         list($plugin, $submission) = $this->create_online_submission($assign, $user1, $studenttext);
153         $studenttext2 = 'Student two\'s text.';
154         list($plugin2, $submission2) = $this->create_online_submission($assign, $user2, $studenttext2);
156         // Need more data for this operation.
157         $requestdata = new \mod_assign\privacy\assign_plugin_request_data($context, $assign, $submission, [], $user1);
158         \assignsubmission_onlinetext\privacy\provider::delete_submission_for_userid($requestdata);
159         // This checks that there is no content for the first submission.
160         $this->assertTrue($plugin->is_empty($submission));
161         // But there is for the second submission.
162         $this->assertFalse($plugin2->is_empty($submission2));
163     }