From 15627f1636f5de99aeb4e7646c562c537741190e Mon Sep 17 00:00:00 2001 From: Kurzenberger <01kuni1bif@hft-stuttgart.de> Date: Fri, 24 Jan 2025 12:05:28 +0100 Subject: [PATCH] fixed issue in dta_result_summary to show the correct summary table --- dta/classes/dta_db_utils.php | 1 + dta/classes/dta_view_submission_utils.php | 8 +++ dta/classes/models/dta_result_summary.php | 87 +++++++++++++++++++++-- 3 files changed, 89 insertions(+), 7 deletions(-) diff --git a/dta/classes/dta_db_utils.php b/dta/classes/dta_db_utils.php index 5599d7f..0a3ab44 100644 --- a/dta/classes/dta_db_utils.php +++ b/dta/classes/dta_db_utils.php @@ -174,6 +174,7 @@ class dta_db_utils { $result->position = $rr->position; $summary->results[] = $result; + } return $summary; diff --git a/dta/classes/dta_view_submission_utils.php b/dta/classes/dta_view_submission_utils.php index aec50aa..9ce850a 100644 --- a/dta/classes/dta_view_submission_utils.php +++ b/dta/classes/dta_view_submission_utils.php @@ -49,6 +49,7 @@ public static function assignsubmission_dta_generate_summary_html( // 1) Retrieve the summary data from the DB (adjust your DB-utils class as needed). $summary = dta_db_utils::assignsubmission_dta_get_result_summary_from_database($assignmentid, $submissionid); + print_r($summary); // 2) Prepare an HTML buffer. $html = ''; @@ -93,6 +94,13 @@ public static function assignsubmission_dta_generate_summary_html( . "<br />"; } + if ($failcount > 0) { + $html .= $failcount + . get_string('tests_failed', self::ASSIGNSUBMISSION_DTA_COMPONENT_NAME) + . "<br />"; + } + + // 8) Competencies (like your old snippet): $showncompetencies = explode(';', $summary->successfultestcompetencies); $overallcompetencies = explode(';', $summary->overalltestcompetencies); diff --git a/dta/classes/models/dta_result_summary.php b/dta/classes/models/dta_result_summary.php index 541b02f..e05288f 100644 --- a/dta/classes/models/dta_result_summary.php +++ b/dta/classes/models/dta_result_summary.php @@ -3,15 +3,37 @@ namespace assignsubmission_dta\models; /** * Entity class for DTA submission plugin result summary. + * + * This class holds: + * - A timestamp for when the summary was generated. + * - An optional global stack trace (in case the entire process failed). + * - A competency profile of how many tests passed for each competency (successfulTestCompetencyProfile). + * - A competency profile of the total coverage for each competency (overallTestCompetencyProfile). + * - An array of DTA result objects that detail individual test results. */ class dta_result_summary { + /** @var int Unix timestamp for the summary. */ public $timestamp; + + /** @var string A global stacktrace if the entire run had a fatal error (optional). */ public $globalstacktrace; + + /** @var string Semi-colon-separated numbers for competencies actually passed. */ public $successfultestcompetencies; + + /** @var string Semi-colon-separated numbers for total tested competencies. */ public $overalltestcompetencies; + + /** @var dta_result[] Array of individual test results. */ public $results; + /** + * Decodes a JSON string into a dta_result_summary object. + * + * @param string $jsonstring JSON that includes timestamp, globalstacktrace, competency profiles, and results. + * @return dta_result_summary + */ public static function assignsubmission_dta_decode_json(string $jsonstring): dta_result_summary { $response = json_decode($jsonstring); @@ -19,9 +41,11 @@ class dta_result_summary { $summary->timestamp = $response->timestamp ?? 0; $summary->globalstacktrace = $response->globalstacktrace ?? ''; + // If your JSON keys are 'successfulTestCompetencyProfile' and 'overallTestCompetencyProfile': $summary->successfultestcompetencies = $response->successfulTestCompetencyProfile ?? ''; $summary->overalltestcompetencies = $response->overallTestCompetencyProfile ?? ''; + // Decode the "results" array into an array of dta_result objects. if (!empty($response->results) && is_array($response->results)) { $summary->results = self::assignsubmission_dta_decode_json_result_array($response->results); } else { @@ -31,10 +55,17 @@ class dta_result_summary { return $summary; } + /** + * Helper that transforms a list of JSON objects into an array of dta_result objects. + * + * @param array $jsonarray Array of JSON-decoded result objects. + * @return dta_result[] + */ private static function assignsubmission_dta_decode_json_result_array(array $jsonarray): array { $ret = []; foreach ($jsonarray as $entry) { $value = new dta_result(); + $value->packagename = $entry->packageName ?? ''; $value->classname = $entry->className ?? ''; $value->name = $entry->name ?? ''; @@ -51,41 +82,83 @@ class dta_result_summary { return $ret; } + /** + * Get the total number of results (tests) recorded in this summary. + * + * @return int + */ public function assignsubmission_dta_result_count(): int { return count($this->results); } + /** + * Generic helper to count how many results have the given $state. + * + * States can be: + * 0 => unknown + * 1 => success + * 2 => fail + * 3 => compilation error + * + * @param int $state The numeric state code to match. + * @return int Number of results with that state. + */ public function assignsubmission_dta_state_occurence_count(int $state): int { $num = 0; foreach ($this->results as $r) { - if ($r->state === $state) { + if ((int)$r->state === $state) { $num++; } } return $num; } + /** + * Count how many results had compilation errors (state=3). + * + * @return int + */ public function assignsubmission_dta_compilation_error_count(): int { - return $this->assignsubmission_dta_state_occurence_count(3); // State=3 => compile error + return $this->assignsubmission_dta_state_occurence_count(3); } + /** + * Count how many results failed (state=2). + * + * @return int + */ public function assignsubmission_dta_failed_count(): int { - return $this->assignsubmission_dta_state_occurence_count(2); // State=2 => fail + return $this->assignsubmission_dta_state_occurence_count(2); } + /** + * Count how many results were successful (state=1). + * + * @return int + */ public function assignsubmission_dta_successful_count(): int { - return $this->assignsubmission_dta_state_occurence_count(1); // State=1 => success + return $this->assignsubmission_dta_state_occurence_count(1); } + /** + * Count how many results are unknown (state=0). + * + * @return int + */ public function assignsubmission_dta_unknown_count(): int { - return $this->assignsubmission_dta_state_occurence_count(0); // State=0 => unknown + return $this->assignsubmission_dta_state_occurence_count(0); } - // OPTIONAL: A helper to safely get success rate 0..100 + /** + * Computes the success rate as a percentage of all results (0..100). + * Note: This includes tests that might have compile errors, unknown states, etc. + * + * @return float A floating percentage between 0.0 and 100.0. + */ public function assignsubmission_dta_success_rate(): float { $count = $this->assignsubmission_dta_result_count(); if ($count === 0) { - return 0.0; + return 0.0; } $successful = $this->assignsubmission_dta_successful_count(); return ($successful / $count) * 100.0; -- GitLab