mirror of
https://github.com/moodle/moodle.git
synced 2025-08-10 03:16:42 +02:00
Merge branch 'MDL-70565' of git://github.com/paulholden/moodle
This commit is contained in:
commit
c9912e2c0e
7 changed files with 284 additions and 2 deletions
|
@ -757,6 +757,172 @@ class participants_search_test extends advanced_testcase {
|
|||
return $finaltests;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test participant search country filter
|
||||
*
|
||||
* @param array $usersdata
|
||||
* @param array $countries
|
||||
* @param int $jointype
|
||||
* @param array $expectedusers
|
||||
*
|
||||
* @dataProvider country_provider
|
||||
*/
|
||||
public function test_country_filter(array $usersdata, array $countries, int $jointype, array $expectedusers): void {
|
||||
$this->resetAfterTest();
|
||||
|
||||
$course = $this->getDataGenerator()->create_course();
|
||||
$users = [];
|
||||
|
||||
foreach ($usersdata as $username => $country) {
|
||||
$users[$username] = $this->getDataGenerator()->create_and_enrol($course, 'student', (object) [
|
||||
'username' => $username,
|
||||
'country' => $country,
|
||||
]);
|
||||
}
|
||||
|
||||
// Add filters (courseid is required).
|
||||
$filterset = new participants_filterset();
|
||||
$filterset->add_filter(new integer_filter('courseid', null, [(int) $course->id]));
|
||||
$filterset->add_filter(new string_filter('country', $jointype, $countries));
|
||||
|
||||
// Run the search, assert count matches the number of expected users.
|
||||
$search = new participants_search($course, context_course::instance($course->id), $filterset);
|
||||
$this->assertEquals(count($expectedusers), $search->get_total_participants_count());
|
||||
|
||||
$rs = $search->get_participants();
|
||||
$this->assertInstanceOf(moodle_recordset::class, $rs);
|
||||
|
||||
// Assert that each expected user is within the participant records.
|
||||
$records = $this->convert_recordset_to_array($rs);
|
||||
foreach ($expectedusers as $expecteduser) {
|
||||
$this->assertArrayHasKey($users[$expecteduser]->id, $records);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for {@see test_country_filter}
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function country_provider(): array {
|
||||
$tests = [
|
||||
'users' => [
|
||||
'user1' => 'DE',
|
||||
'user2' => 'ES',
|
||||
'user3' => 'ES',
|
||||
'user4' => 'GB',
|
||||
],
|
||||
'expects' => [
|
||||
// Tests for jointype: ANY.
|
||||
'ANY: No filter' => (object) [
|
||||
'countries' => [],
|
||||
'jointype' => filter::JOINTYPE_ANY,
|
||||
'expectedusers' => [
|
||||
'user1',
|
||||
'user2',
|
||||
'user3',
|
||||
'user4',
|
||||
],
|
||||
],
|
||||
'ANY: Matching filters' => (object) [
|
||||
'countries' => [
|
||||
'DE',
|
||||
'GB',
|
||||
],
|
||||
'jointype' => filter::JOINTYPE_ANY,
|
||||
'expectedusers' => [
|
||||
'user1',
|
||||
'user4',
|
||||
],
|
||||
],
|
||||
'ANY: Non-matching filters' => (object) [
|
||||
'countries' => [
|
||||
'RU',
|
||||
],
|
||||
'jointype' => filter::JOINTYPE_ANY,
|
||||
'expectedusers' => [],
|
||||
],
|
||||
|
||||
// Tests for jointype: ALL.
|
||||
'ALL: No filter' => (object) [
|
||||
'countries' => [],
|
||||
'jointype' => filter::JOINTYPE_ALL,
|
||||
'expectedusers' => [
|
||||
'user1',
|
||||
'user2',
|
||||
'user3',
|
||||
'user4',
|
||||
],
|
||||
],
|
||||
'ALL: Matching filters' => (object) [
|
||||
'countries' => [
|
||||
'DE',
|
||||
'GB',
|
||||
],
|
||||
'jointype' => filter::JOINTYPE_ALL,
|
||||
'expectedusers' => [
|
||||
'user1',
|
||||
'user4',
|
||||
],
|
||||
],
|
||||
'ALL: Non-matching filters' => (object) [
|
||||
'countries' => [
|
||||
'RU',
|
||||
],
|
||||
'jointype' => filter::JOINTYPE_ALL,
|
||||
'expectedusers' => [],
|
||||
],
|
||||
|
||||
// Tests for jointype: NONE.
|
||||
'NONE: No filter' => (object) [
|
||||
'countries' => [],
|
||||
'jointype' => filter::JOINTYPE_NONE,
|
||||
'expectedusers' => [
|
||||
'user1',
|
||||
'user2',
|
||||
'user3',
|
||||
'user4',
|
||||
],
|
||||
],
|
||||
'NONE: Matching filters' => (object) [
|
||||
'countries' => [
|
||||
'DE',
|
||||
'GB',
|
||||
],
|
||||
'jointype' => filter::JOINTYPE_NONE,
|
||||
'expectedusers' => [
|
||||
'user2',
|
||||
'user3',
|
||||
],
|
||||
],
|
||||
'NONE: Non-matching filters' => (object) [
|
||||
'countries' => [
|
||||
'RU',
|
||||
],
|
||||
'jointype' => filter::JOINTYPE_NONE,
|
||||
'expectedusers' => [
|
||||
'user1',
|
||||
'user2',
|
||||
'user3',
|
||||
'user4',
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
$finaltests = [];
|
||||
foreach ($tests['expects'] as $testname => $test) {
|
||||
$finaltests[$testname] = [
|
||||
'users' => $tests['users'],
|
||||
'countries' => $test->countries,
|
||||
'jointype' => $test->jointype,
|
||||
'expectedusers' => $test->expectedusers,
|
||||
];
|
||||
}
|
||||
|
||||
return $finaltests;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure that the keywords filter works as expected with the provided test cases.
|
||||
*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue