Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 3.9.x will end* 10 May 2021 (12 months).
  • Bug fixes for security issues in 3.9.x will end* 8 May 2023 (36 months).
  • PHP version: minimum PHP 7.2.0 Note: minimum PHP version has increased since Moodle 3.8. PHP 7.3.x and 7.4.x are supported too.

Differences Between: [Versions 39 and 310]

   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/>.
  16  
  17  /**
  18   * Unit tests for the gradereport_grader implementation of the privacy API.
  19   *
  20   * @package    gradereport_grader
  21   * @category   test
  22   * @copyright  2018 Sara Arjona <sara@moodle.com>
  23   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  24   */
  25  
  26  defined('MOODLE_INTERNAL') || die();
  27  
  28  use \core_privacy\local\metadata\collection;
  29  use \core_privacy\local\request\writer;
  30  use \core_privacy\local\request\approved_contextlist;
  31  use \core_privacy\local\request\deletion_criteria;
  32  use \gradereport_grader\privacy\provider;
  33  
  34  /**
  35   * Unit tests for the gradereport_grader implementation of the privacy API.
  36   *
  37   * @copyright  2018 Sara Arjona <sara@moodle.com>
  38   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  39   */
  40  class gradereport_grader_privacy_testcase extends \core_privacy\tests\provider_testcase {
  41  
  42      /**
  43       * Basic setup for these tests.
  44       */
  45      public function setUp() {
  46          $this->resetAfterTest(true);
  47      }
  48  
  49  
  50      /**
  51       * Ensure that export_user_preferences returns no data if the user has no data.
  52       */
  53      public function test_export_user_preferences_not_defined() {
  54          $user = \core_user::get_user_by_username('admin');
  55          provider::export_user_preferences($user->id);
  56  
  57          $writer = writer::with_context(\context_system::instance());
  58          $this->assertFalse($writer->has_any_data());
  59      }
  60  
  61      /**
  62       * Ensure that export_user_preferences returns single preferences.
  63       * These preferences can be set on each course, but the value is shared in the whole site.
  64       */
  65      public function test_export_user_preferences_single() {
  66          // Create test user, add some preferences.
  67          $user = $this->getDataGenerator()->create_user();
  68          $this->setUser($user);
  69  
  70          set_user_preference('grade_report_showcalculations', 1, $user);
  71          set_user_preference('grade_report_meanselection', GRADE_REPORT_MEAN_GRADED, $user);
  72          set_user_preference('grade_report_studentsperpage', 50, $user);
  73  
  74          // Switch to admin user (so we can validate preferences of our test user are still exported).
  75          $this->setAdminUser();
  76  
  77          // Validate exported data for our test user.
  78          provider::export_user_preferences($user->id);
  79          $context = context_user::instance($user->id);
  80          $writer = writer::with_context($context);
  81          $this->assertTrue($writer->has_any_data());
  82          $prefs = $writer->get_user_preferences('gradereport_grader');
  83          $this->assertCount(3, (array) $prefs);
  84          $this->assertEquals(
  85              get_string('privacy:metadata:preference:grade_report_showcalculations', 'gradereport_grader'),
  86              $prefs->grade_report_showcalculations->description
  87          );
  88          $this->assertEquals(get_string('meangraded', 'grades'), $prefs->grade_report_meanselection->value);
  89          $this->assertEquals(50, $prefs->grade_report_studentsperpage->value);
  90      }
  91  
  92      /**
  93       * Ensure that export_user_preferences returns preferences.
  94       */
  95      public function test_export_user_preferences_multiple() {
  96          // Create a course and add a user preference.
  97          $user = $this->getDataGenerator()->create_user();
  98          $this->setUser($user);
  99          $course = $this->getDataGenerator()->create_course();
 100          $collapsed = serialize(['aggregatesonly' => array(), 'gradesonly' => array()]);
 101          set_user_preference('grade_report_grader_collapsed_categories'.$course->id, $collapsed, $user);
 102  
 103          // Validate exported data.
 104          provider::export_user_preferences($user->id);
 105          $context = context_user::instance($user->id);
 106          $writer = writer::with_context($context);
 107          $this->assertTrue($writer->has_any_data());
 108          $prefs = $writer->get_user_preferences('gradereport_grader');
 109          $this->assertCount(1, (array) $prefs);
 110          $this->assertEquals(
 111              get_string('privacy:request:preference:grade_report_grader_collapsed_categories', 'gradereport_grader', ['name' => $course->fullname]),
 112              $prefs->grade_report_grader_collapsed_categories->description
 113          );
 114      }
 115  }