From 28f31f7d2dd440d8980114d3f8d9f5e23cac106d Mon Sep 17 00:00:00 2001 From: sam marshall Date: Wed, 3 Sep 2014 18:03:50 +0100 Subject: [PATCH] MDL-44725 Availability: Unit test for tree::get_user_list_sql --- availability/tests/tree_test.php | 62 ++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/availability/tests/tree_test.php b/availability/tests/tree_test.php index c91f59b017f42..714aa8e41ca44 100644 --- a/availability/tests/tree_test.php +++ b/availability/tests/tree_test.php @@ -643,6 +643,68 @@ public function test_get_json() { json_encode(tree::get_root_json(array($child, $child), tree::OP_AND, array(true, false)))); } + /** + * Tests get_user_list_sql. + */ + public function test_get_user_list_sql() { + global $DB; + $this->resetAfterTest(); + $generator = $this->getDataGenerator(); + + // Create a test course with 2 groups and users in each combination of them. + $course = $generator->create_course(); + $group1 = $generator->create_group(array('courseid' => $course->id)); + $group2 = $generator->create_group(array('courseid' => $course->id)); + $userin1 = $generator->create_user(); + $userin2 = $generator->create_user(); + $userinboth = $generator->create_user(); + $userinneither = $generator->create_user(); + $studentroleid = $DB->get_field('role', 'id', array('shortname' => 'student')); + foreach (array($userin1, $userin2, $userinboth, $userinneither) as $user) { + $generator->enrol_user($user->id, $course->id, $studentroleid); + } + groups_add_member($group1, $userin1); + groups_add_member($group2, $userin2); + groups_add_member($group1, $userinboth); + groups_add_member($group2, $userinboth); + $info = new \core_availability\mock_info($course); + + // Tree with single group condition. + $tree = new tree(tree::get_root_json(array( + \availability_group\condition::get_json($group1->id) + ))); + list($sql, $params) = $tree->get_user_list_sql(false, $info, false); + $result = $DB->get_fieldset_sql($sql, $params); + sort($result); + $this->assertEquals(array($userin1->id, $userinboth->id), $result); + + // Tree with 'AND' of both group conditions. + $tree = new tree(tree::get_root_json(array( + \availability_group\condition::get_json($group1->id), + \availability_group\condition::get_json($group2->id) + ))); + list($sql, $params) = $tree->get_user_list_sql(false, $info, false); + $result = $DB->get_fieldset_sql($sql, $params); + sort($result); + $this->assertEquals(array($userinboth->id), $result); + + // Tree with 'AND' of both group conditions. + $tree = new tree(tree::get_root_json(array( + \availability_group\condition::get_json($group1->id), + \availability_group\condition::get_json($group2->id) + ), tree::OP_OR)); + list($sql, $params) = $tree->get_user_list_sql(false, $info, false); + $result = $DB->get_fieldset_sql($sql, $params); + sort($result); + $this->assertEquals(array($userin1->id, $userin2->id, $userinboth->id), $result); + + // Check with flipped logic (NOT above level of tree). + list($sql, $params) = $tree->get_user_list_sql(true, $info, false); + $result = $DB->get_fieldset_sql($sql, $params); + sort($result); + $this->assertEquals(array($userinneither->id), $result); + } + /** * Utility function to build the PHP structure representing a mock condition. *