MDL-68019 favourites: Unit test

This commit is contained in:
Peter
2020-03-03 13:19:46 +08:00
committed by Peter Dias
parent b3b2d72c1e
commit 3d7d25afce
2 changed files with 75 additions and 1 deletions
+20
View File
@@ -302,6 +302,16 @@ class favourite_repository_testcase extends advanced_testcase {
);
$favouritesrepo->add($favourite);
// Add another favourite.
$favourite = new favourite(
'core_course',
'course_item',
$course1context->instanceid,
$course1context->id,
$user1context->instanceid
);
$favouritesrepo->add($favourite);
// From the repo, get the list of favourites for the 'core_course/course' area.
$userfavourites = $favouritesrepo->find_by(['component' => 'core_course', 'itemtype' => 'course']);
$this->assertIsArray($userfavourites);
@@ -311,6 +321,16 @@ class favourite_repository_testcase extends advanced_testcase {
$userfavourites = $favouritesrepo->find_by(['component' => 'core_cannibalism', 'itemtype' => 'course']);
$this->assertIsArray($userfavourites);
$this->assertCount(0, $userfavourites);
// From the repo, get the list of favourites for the 'core_course/course' area when passed as an array.
$userfavourites = $favouritesrepo->find_by(['component' => 'core_course', 'itemtype' => ['course']]);
$this->assertIsArray($userfavourites);
$this->assertCount(1, $userfavourites);
// From the repo, get the list of favourites for the 'core_course' area given multiple item_types.
$userfavourites = $favouritesrepo->find_by(['component' => 'core_course', 'itemtype' => ['course', 'course_item']]);
$this->assertIsArray($userfavourites);
$this->assertCount(2, $userfavourites);
}
/**
@@ -85,11 +85,29 @@ class user_favourite_service_testcase extends advanced_testcase {
$mockrepo->expects($this->any())
->method('find_by')
->will($this->returnCallback(function(array $criteria, int $limitfrom = 0, int $limitnum = 0) use (&$mockstore) {
// Check for single value key pair vs multiple.
$multipleconditions = [];
foreach ($criteria as $key => $value) {
if (is_array($value)) {
$multipleconditions[$key] = $value;
unset($criteria[$key]);
}
}
// Check the mockstore for all objects with properties matching the key => val pairs in $criteria.
foreach ($mockstore as $index => $mockrow) {
$mockrowarr = (array)$mockrow;
if (array_diff_assoc($criteria, $mockrowarr) == []) {
$returns[$index] = $mockrow;
$found = true;
foreach ($multipleconditions as $key => $value) {
if (!in_array($mockrowarr[$key], $value)) {
$found = false;
break;
}
}
if ($found) {
$returns[$index] = $mockrow;
}
}
}
// Return a subset of the records, according to the paging options, if set.
@@ -235,6 +253,42 @@ class user_favourite_service_testcase extends advanced_testcase {
$this->assertEquals($fav2->id, $favourites[$fav2->id]->id);
}
/**
* Test fetching favourites for single user, by area.
*/
public function test_find_all_favourites() {
list($user1context, $user2context, $course1context, $course2context) = $this->setup_users_and_courses();
// Get a user_favourite_service for the user.
$repo = $this->get_mock_repository([]); // Mock repository, using the array as a mock DB.
$service = new \core_favourites\local\service\user_favourite_service($user1context, $repo);
// Favourite 2 courses, in separate areas.
$fav1 = $service->create_favourite('core_course', 'course', $course1context->instanceid, $course1context);
$fav2 = $service->create_favourite('core_course', 'anothertype', $course2context->instanceid, $course2context);
$fav3 = $service->create_favourite('core_course', 'yetanothertype', $course2context->instanceid, $course2context);
// Verify we can get favourites by area.
$favourites = $service->find_all_favourites('core_course', ['course']);
$this->assertIsArray($favourites);
$this->assertCount(1, $favourites); // We only get favourites for the 'core_course/course' area.
$this->assertEquals($fav1->id, $favourites[$fav1->id]->id);
$favourites = $service->find_all_favourites('core_course', ['course', 'anothertype']);
$this->assertIsArray($favourites);
// We only get favourites for the 'core_course/course' and 'core_course/anothertype area.
$this->assertCount(2, $favourites);
$this->assertEquals($fav1->id, $favourites[$fav1->id]->id);
$this->assertEquals($fav2->id, $favourites[$fav2->id]->id);
$favourites = $service->find_all_favourites('core_course');
$this->assertIsArray($favourites);
$this->assertCount(3, $favourites); // We only get favourites for the 'core_cours' area.
$this->assertEquals($fav2->id, $favourites[$fav2->id]->id);
$this->assertEquals($fav1->id, $favourites[$fav1->id]->id);
$this->assertEquals($fav3->id, $favourites[$fav3->id]->id);
}
/**
* Make sure the find_favourites_by_type() method only returns favourites for the scoped user.
*/