dta_result_summary.php 5.78 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
// This file is part of Moodle - http://moodle.org/
// 
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// 
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.

/**
 * Entity class for DTA submission plugin result summary
 *
 * @package    assignsubmission_dta
 * @copyright  2023 Gero Lueckemeyer and student project teams
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */

namespace assignsubmission_dta\models;

defined('MOODLE_INTERNAL') || die();

/**
 * Entity class for DTA submission plugin result summary
 *
 * @package    assignsubmission_dta
 * @copyright  2023 Gero Lueckemeyer and student project teams
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
class dta_result_summary {

    /**
     * @var int $timestamp Result timestamp for chronological ordering and deletion of previous results.
     */
    public $timestamp;

    /**
     * @var string $globalstacktrace Global stack trace if applicable, empty string otherwise.
     */
    public $globalstacktrace;

    /**
     * @var string $successfultestcompetencies Successfully tested competencies according to tests and weights, empty string otherwise.
     */
    public $successfultestcompetencies;

    /**
     * @var string $overalltestcompetencies Overall tested competencies according to tests and weights, empty string otherwise.
     */
    public $overalltestcompetencies;

    /**
     * @var array $results List of detail results.
     */
    public $results;

    /**
     * Decodes the JSON result summary returned by the backend service call into the plugin PHP data structure.
     *
     * @param string $jsonstring JSON string containing DtaResultSummary
     * @return DtaResultSummary The result summary
     */
69
    public static function assignsubmission_dta_decode_json(string $jsonstring): dta_result_summary {
70
71
72
73
74
75
76
77
78
        $response = json_decode($jsonstring);

        $summary = new dta_result_summary();
        $summary->timestamp = $response->timestamp;
        $summary->globalstacktrace = $response->globalstacktrace;

        $summary->successfultestcompetencies = $response->successfulTestCompetencyProfile ?? '';
        $summary->overalltestcompetencies = $response->overallTestCompetencyProfile ?? '';

79
        $summary->results = self::assignsubmission_dta_decode_json_result_array($response->results);
80
81
82
83
84
85
86
87
88
89

        return $summary;
    }

    /**
     * Decodes the array of JSON detail results returned by the backend service call into the plugin PHP data structure.
     *
     * @param array $jsonarray Decoded JSON array of results
     * @return array Array of DtaResult
     */
90
    private static function assignsubmission_dta_decode_json_result_array(array $jsonarray): array {
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
        $ret = [];
        foreach ($jsonarray as $entry) {
            $value = new dta_result();
            $value->packagename = $entry->packageName ?? '';
            $value->classname = $entry->className ?? '';
            $value->name = $entry->name ?? '';

            $value->state = $entry->state ?? 0;

            $value->failuretype = $entry->failureType ?? '';
            $value->failurereason = $entry->failureReason ?? '';
            $value->stacktrace = $entry->stacktrace ?? '';

            $value->columnnumber = $entry->columnNumber ?? '';
            $value->linenumber = $entry->lineNumber ?? '';
            $value->position = $entry->position ?? '';

            $ret[] = $value;
        }
        return $ret;
    }

    /**
     * Returns the number of detail results attached to the summary.
     *
     * @return int Count of occurrences
     */
118
    public function assignsubmission_dta_result_count(): int {
119
120
121
122
123
124
125
126
127
        return count($this->results);
    }

    /**
     * Returns the number of detail results with the given state attached to the summary.
     *
     * @param int $state State ordinal number
     * @return int Count of occurrences for the provided state
     */
128
    public function assignsubmission_dta_state_occurence_count(int $state): int {
129
130
131
132
133
134
135
136
137
138
139
140
141
142
        $num = 0;
        foreach ($this->results as $r) {
            if ($r->state == $state) {
                $num++;
            }
        }
        return $num;
    }

    /**
     * Returns the number of detail results with compilation errors attached to the summary.
     *
     * @return int Count of occurrences
     */
143
144
    public function assignsubmission_dta_compilation_error_count(): int {
        return $this->assignsubmission_dta_state_occurence_count(3);
145
146
147
148
149
150
151
    }

    /**
     * Returns the number of detail results with test failures attached to the summary.
     *
     * @return int Count of occurrences
     */
152
153
    public function assignsubmission_dta_failed_count(): int {
        return $this->assignsubmission_dta_state_occurence_count(2);
154
155
156
157
158
159
160
    }

    /**
     * Returns the number of detail results with successful tests attached to the summary.
     *
     * @return int Count of occurrences
     */
161
162
    public function assignsubmission_dta_successful_count(): int {
        return $this->assignsubmission_dta_state_occurence_count(1);
163
164
165
166
167
168
169
    }

    /**
     * Returns the number of detail results with an unknown result attached to the summary.
     *
     * @return int Count of occurrences
     */
170
171
    public function assignsubmission_dta_unknown_count(): int {
        return $this->assignsubmission_dta_state_occurence_count(0);
172
173
    }
}