From edd7407b60fd55cc47361779d64cae100c60e4b3 Mon Sep 17 00:00:00 2001 From: Daniel Ziegenberg Date: Fri, 21 Mar 2025 17:53:35 +0100 Subject: [PATCH] MDL-84967 analytics: close recordset when it's not needed anymore Signed-off-by: Daniel Ziegenberg --- .../classes/local/analyser/by_course.php | 1 + public/lib/tests/analysers_test.php | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/public/analytics/classes/local/analyser/by_course.php b/public/analytics/classes/local/analyser/by_course.php index 59b66273605..2264971af5e 100644 --- a/public/analytics/classes/local/analyser/by_course.php +++ b/public/analytics/classes/local/analyser/by_course.php @@ -53,6 +53,7 @@ abstract class by_course extends base { if (!$recordset->valid()) { $this->add_log(get_string('nocourses', 'analytics')); + $recordset->close(); return new \ArrayIterator([]); } diff --git a/public/lib/tests/analysers_test.php b/public/lib/tests/analysers_test.php index 1b99dbe0b30..2d6fe7c0b22 100644 --- a/public/lib/tests/analysers_test.php +++ b/public/lib/tests/analysers_test.php @@ -16,6 +16,7 @@ namespace core; +use core\context\coursecat; use test_target_course_level_shortname; use test_target_shortname; @@ -32,6 +33,8 @@ require_once(__DIR__ . '/../../lib/enrollib.php'); * @category test * @copyright 2017 David Monllaó {@link http://www.davidmonllao.com} * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * + * @covers \core\analytics\analyser\courses */ final class analysers_test extends \advanced_testcase { @@ -81,6 +84,24 @@ final class analysers_test extends \advanced_testcase { } + /** + * Test analyser iterator status with invalid course data. + */ + public function test_no_courses_analyser(): void { + $this->resetAfterTest(true); + + $target = new test_target_shortname(); + $analyser = new \core\analytics\analyser\courses(1, $target, [], [], []); + + $category = $this->getDataGenerator()->create_category(); + $categorycontext = coursecat::instance($category->id); + + // No courses. + $this->assertCount(0, $analyser->get_analysables_iterator(null, [$categorycontext])); + $this->assertCount(1, $analyser->get_logs()); + $this->assertEquals(get_string('nocourses', 'analytics'), $analyser->get_logs()[0]); + } + /** * test_site_courses_analyser *