MDL-62560 tool_dataprivacy: Add unit test for filtered userlist
authorAndrew Nicols <andrew@nicols.co.uk>
Wed, 17 Oct 2018 04:53:27 +0000 (12:53 +0800)
committerDavid Monllao <davidm@moodle.com>
Mon, 22 Oct 2018 10:50:15 +0000 (12:50 +0200)
admin/tool/dataprivacy/tests/filtered_userlist_test.php [new file with mode: 0644]

diff --git a/admin/tool/dataprivacy/tests/filtered_userlist_test.php b/admin/tool/dataprivacy/tests/filtered_userlist_test.php
new file mode 100644 (file)
index 0000000..cdffded
--- /dev/null
@@ -0,0 +1,99 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * Unit tests for the filtered_userlist.
+ *
+ * @package    tool_dataprivacy
+ * @copyright  2018 Andrew Nicols <andrew@nicols.co.uk>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+/**
+ * Unit tests for the filtered_userlist.
+ *
+ * @package    tool_dataprivacy
+ * @copyright  2018 Andrew Nicols <andrew@nicols.co.uk>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class tool_dataprivacy_filtered_userlist_testcase extends advanced_testcase {
+    /**
+     * Test the apply_expired_contexts_filters function with arange of options.
+     *
+     * @dataProvider apply_expired_contexts_filters_provider
+     * @param   array   $initial The set of userids in the initial filterlist.
+     * @param   array   $expired The set of userids considered as expired.
+     * @param   array   $unexpired The set of userids considered as unexpired.
+     * @param   array   $expected The expected values.
+     */
+    public function test_apply_expired_contexts_filters(array $initial, array $expired, array $unexpired, array $expected) {
+        $userlist = $this->getMockBuilder(\tool_dataprivacy\filtered_userlist::class)
+            ->disableOriginalConstructor()
+            ->setMethods(null)
+            ->getMock();
+
+        $rc = new \ReflectionClass(\tool_dataprivacy\filtered_userlist::class);
+        $rcm = $rc->getMethod('set_userids');
+        $rcm->setAccessible(true);
+        $rcm->invoke($userlist, $initial);
+
+
+        $userlist->apply_expired_context_filters($expired, $unexpired);
+        $filtered = $userlist->get_userids();
+
+        sort($expected);
+        sort($filtered);
+        $this->assertEquals($expected, $filtered);
+    }
+
+    /**
+     * Data provider for the apply_expired_contexts_filters function.
+     *
+     * @return  array
+     */
+    public function apply_expired_contexts_filters_provider() : array {
+        return [
+            // Entire list should be preserved.
+            'No overrides' => [
+                'users' => [1, 2, 3, 4, 5],
+                'expired' => [],
+                'unexpired' => [],
+                [1, 2, 3, 4, 5],
+            ],
+            // The list should be filtered to only keep the expired users.
+            'Expired only' => [
+                'users' => [1, 2, 3, 4, 5],
+                'expired' => [2, 3, 4],
+                'unexpired' => [],
+                'expected' => [2, 3, 4],
+            ],
+            // The list should be filtered to remove any unexpired users.
+            'Unexpired only' => [
+                'users' => [1, 2, 3, 4, 5],
+                'expired' => [],
+                'unexpired' => [1, 5],
+                'expected' => [2, 3, 4],
+            ],
+            // The list should be filtered to only keep expired users who are not on the unexpired list.
+            'Combination of expired and unexpired' => [
+                'users' => [1, 2, 3, 4, 5],
+                'expired' => [1, 2, 3],
+                'unexpired' => [1, 5],
+                'expected' => [2, 3],
+            ],
+        ];
+    }
+}