MDL-59395 core_user: added unit tests for new participation functions

Part of MDL-59290.
This commit is contained in:
Mark Nelson 2017-07-03 16:08:24 +08:00
parent bc47b70667
commit ba6645daa0

View File

@ -694,4 +694,183 @@ class core_userliblib_testcase extends advanced_testcase {
self::assertSame('50', $got['timezone']); self::assertSame('50', $got['timezone']);
self::assertSame('0', $got['mailformat']); self::assertSame('0', $got['mailformat']);
} }
/**
* Test returning the total number of participants.
*/
public function test_user_get_total_participants() {
global $DB;
$this->resetAfterTest();
// Create a course.
$course = self::getDataGenerator()->create_course();
// Create a teacher.
$teacher = self::getDataGenerator()->create_user(['firstname' => 'searchforthis']);
// Create a bunch of students.
$student1 = self::getDataGenerator()->create_user(['firstname' => 'searchforthis']);
$student2 = self::getDataGenerator()->create_user(['firstname' => 'searchforthis']);
$student3 = self::getDataGenerator()->create_user(['firstname' => 'searchforthis']);
// Create a group.
$group = self::getDataGenerator()->create_group(array('courseid' => $course->id));
// Enrol the students.
self::getDataGenerator()->enrol_user($student1->id, $course->id);
self::getDataGenerator()->enrol_user($student2->id, $course->id);
self::getDataGenerator()->enrol_user($student3->id, $course->id);
// Enrol the teacher.
$roleids = $DB->get_records_menu('role', null, '', 'shortname, id');
self::getDataGenerator()->enrol_user($teacher->id, $course->id, $roleids['editingteacher']);
// Add the teacher and two of the students to the group.
groups_add_member($group->id, $teacher->id);
groups_add_member($group->id, $student1->id);
groups_add_member($group->id, $student2->id);
// Set it so the teacher and two of the students have accessed the courses within the last day,
// but only one of the students is in the group.
$accesssince = time() - DAYSECS;
$lastaccess = new stdClass();
$lastaccess->userid = $teacher->id;
$lastaccess->courseid = $course->id;
$lastaccess->timeaccess = time() - DAYSECS;
$DB->insert_record('user_lastaccess', $lastaccess);
$lastaccess->userid = $student1->id;
$DB->insert_record('user_lastaccess', $lastaccess);
$lastaccess->userid = $student3->id;
$DB->insert_record('user_lastaccess', $lastaccess);
// Now, when we perform the following search we should only return 1 user. A student who belongs to
// the group and has the name 'searchforthis' and has also accessed the course in the last day.
$count = user_get_total_participants($course->id, $group->id, $accesssince + 1, $roleids['student'], 'searchforthis');
$this->assertEquals(1, $count);
}
/**
* Test returning the number of participants on the front page.
*/
public function test_user_get_total_participants_on_front_page() {
$this->resetAfterTest();
// Set it so that only 3 users have accessed the site within the last day.
$accesssince = time() - DAYSECS;
// Create a bunch of users.
$user1 = self::getDataGenerator()->create_user(['firstname' => 'searchforthis', 'lastaccess' => $accesssince]);
$user2 = self::getDataGenerator()->create_user(['firstname' => 'searchforthis', 'lastaccess' => $accesssince]);
$user3 = self::getDataGenerator()->create_user(['firstname' => 'searchforthis']);
$user4 = self::getDataGenerator()->create_user(['firstname' => 'searchforthis', 'lastaccess' => $accesssince]);
// Create a group.
$group = self::getDataGenerator()->create_group(array('courseid' => SITEID));
// Add 3 of the users to a group.
groups_add_member($group->id, $user1->id);
groups_add_member($group->id, $user2->id);
groups_add_member($group->id, $user3->id);
// Now, when we perform the following search we should only return 2 users. Users who belong to
// the group and have the name 'searchforthis' and have also accessed the site in the last day.
$count = user_get_total_participants(SITEID, $group->id, $accesssince + 1, 0, 'searchforthis');
$this->assertEquals(2, $count);
}
/**
* Test returning the participants.
*/
public function test_user_get_participants() {
global $DB;
$this->resetAfterTest();
// Create a course.
$course = self::getDataGenerator()->create_course();
// Create a teacher.
$teacher = self::getDataGenerator()->create_user(['firstname' => 'searchforthis']);
// Create a bunch of students.
$student1 = self::getDataGenerator()->create_user(['firstname' => 'searchforthis']);
$student2 = self::getDataGenerator()->create_user(['firstname' => 'searchforthis']);
$student3 = self::getDataGenerator()->create_user(['firstname' => 'searchforthis']);
// Create a group.
$group = self::getDataGenerator()->create_group(array('courseid' => $course->id));
// Enrol the students.
self::getDataGenerator()->enrol_user($student1->id, $course->id);
self::getDataGenerator()->enrol_user($student2->id, $course->id);
self::getDataGenerator()->enrol_user($student3->id, $course->id);
// Enrol the teacher.
$roleids = $DB->get_records_menu('role', null, '', 'shortname, id');
self::getDataGenerator()->enrol_user($teacher->id, $course->id, $roleids['editingteacher']);
// Add the teacher and two of the students to the group.
groups_add_member($group->id, $teacher->id);
groups_add_member($group->id, $student1->id);
groups_add_member($group->id, $student2->id);
// Set it so the teacher and two of the students have accessed the course within the last day, but only one of
// the students is in the group.
$accesssince = time() - DAYSECS;
$lastaccess = new stdClass();
$lastaccess->userid = $teacher->id;
$lastaccess->courseid = $course->id;
$lastaccess->timeaccess = time() - DAYSECS;
$DB->insert_record('user_lastaccess', $lastaccess);
$lastaccess->userid = $student1->id;
$DB->insert_record('user_lastaccess', $lastaccess);
$lastaccess->userid = $student3->id;
$DB->insert_record('user_lastaccess', $lastaccess);
// Now, when we perform the following search we should only return 1 user. A student who belongs to
// the group and has the name 'searchforthis' and has also accessed the course in the last day.
$userset = user_get_participants($course->id, $group->id, $accesssince + 1, $roleids['student'], 'searchforthis');
$this->assertEquals(1, sizeof($userset));
$this->assertEquals($student1->id, $userset->current()->id);
}
/**
* Test returning the participants on the front page.
*/
public function test_user_get_participants_on_front_page() {
$this->resetAfterTest();
// Set it so that only 3 users have accessed the site within the last day.
$accesssince = time() - DAYSECS;
// Create a bunch of users.
$user1 = self::getDataGenerator()->create_user(['firstname' => 'searchforthis', 'lastaccess' => $accesssince]);
$user2 = self::getDataGenerator()->create_user(['firstname' => 'searchforthis', 'lastaccess' => $accesssince]);
$user3 = self::getDataGenerator()->create_user(['firstname' => 'searchforthis']);
$user4 = self::getDataGenerator()->create_user(['firstname' => 'searchforthis', 'lastaccess' => $accesssince]);
// Create a group.
$group = self::getDataGenerator()->create_group(array('courseid' => SITEID));
// Add 3 of the users to a group.
groups_add_member($group->id, $user1->id);
groups_add_member($group->id, $user2->id);
groups_add_member($group->id, $user3->id);
// Now, when we perform the following search we should only return 2 users. Users who belong to
// the group and have the name 'searchforthis' and have also accessed the site in the last day.
$userset = user_get_participants(SITEID, $group->id, $accesssince + 1, 0, 'searchforthis');
$this->assertEquals($user1->id, $userset->current()->id);
$userset->next();
$this->assertEquals($user2->id, $userset->current()->id);
}
} }