/** * Test that the discussion subscription cache can filled course-at-a-time. */ public function test_discussion_subscription_cache_fill_for_course() { global $DB; $this->resetAfterTest(true); // Create a course, with a twf. $course = $this->getDataGenerator()->create_course(); // Create the twfs. $options = array('course' => $course->id, 'forcesubscribe' => FORUM_DISALLOWSUBSCRIBE); $disallowtwf = $this->getDataGenerator()->create_module('twf', $options); $options = array('course' => $course->id, 'forcesubscribe' => FORUM_CHOOSESUBSCRIBE); $choosetwf = $this->getDataGenerator()->create_module('twf', $options); $options = array('course' => $course->id, 'forcesubscribe' => FORUM_INITIALSUBSCRIBE); $initialtwf = $this->getDataGenerator()->create_module('twf', $options); // Create some users and keep a reference to the first user. $users = $this->helper_create_users($course, 20); $user = reset($users); // Reset the subscription caches. \mod_twf\subscriptions::reset_twf_cache(); $startcount = $DB->perf_get_reads(); $result = \mod_twf\subscriptions::fill_subscription_cache_for_course($course->id, $user->id); $this->assertNull($result); $postfillcount = $DB->perf_get_reads(); $this->assertEquals(1, $postfillcount - $startcount); $this->assertFalse(\mod_twf\subscriptions::fetch_subscription_cache($disallowtwf->id, $user->id)); $this->assertFalse(\mod_twf\subscriptions::fetch_subscription_cache($choosetwf->id, $user->id)); $this->assertTrue(\mod_twf\subscriptions::fetch_subscription_cache($initialtwf->id, $user->id)); $finalcount = $DB->perf_get_reads(); $this->assertEquals(0, $finalcount - $postfillcount); // Test for all users. foreach ($users as $user) { $result = \mod_twf\subscriptions::fill_subscription_cache_for_course($course->id, $user->id); $this->assertFalse(\mod_twf\subscriptions::fetch_subscription_cache($disallowtwf->id, $user->id)); $this->assertFalse(\mod_twf\subscriptions::fetch_subscription_cache($choosetwf->id, $user->id)); $this->assertTrue(\mod_twf\subscriptions::fetch_subscription_cache($initialtwf->id, $user->id)); } $finalcount = $DB->perf_get_reads(); $this->assertEquals(count($users), $finalcount - $postfillcount); }