| Línea 27... |
Línea 27... |
| 27 |
* @package mod_quiz
|
27 |
* @package mod_quiz
|
| 28 |
* @category test
|
28 |
* @category test
|
| 29 |
* @copyright 2008 Jamie Pratt me@jamiep.org
|
29 |
* @copyright 2008 Jamie Pratt me@jamiep.org
|
| 30 |
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
|
30 |
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
|
| 31 |
*/
|
31 |
*/
|
| 32 |
class reportlib_test extends \advanced_testcase {
|
32 |
final class reportlib_test extends \advanced_testcase {
|
| 33 |
public function test_quiz_report_index_by_keys(): void {
|
33 |
public function test_quiz_report_index_by_keys(): void {
|
| 34 |
$datum = [];
|
34 |
$datum = [];
|
| 35 |
$object = new \stdClass();
|
35 |
$object = new \stdClass();
|
| 36 |
$object->qid = 3;
|
36 |
$object->qid = 3;
|
| 37 |
$object->aid = 101;
|
37 |
$object->aid = 101;
|
| Línea 92... |
Línea 92... |
| 92 |
|
92 |
|
| 93 |
// We intentionally insert these in a funny order, to test the SQL better.
|
93 |
// We intentionally insert these in a funny order, to test the SQL better.
|
| 94 |
// The test data is:
|
94 |
// The test data is:
|
| 95 |
// id | quizid | user | attempt | sumgrades | state
|
95 |
// id | quizid | user | attempt | sumgrades | state
|
| 96 |
// ---------------------------------------------------
|
96 |
// ---------------------------------------------------
|
| 97 |
// 4 | 456 | 123 | 1 | 30 | finished
|
97 |
// 4 | 456 | 123 | 1 | null | submitted
|
| 98 |
// 2 | 456 | 123 | 2 | 50 | finished
|
98 |
// 2 | 456 | 123 | 2 | 50 | finished
|
| 99 |
// 1 | 456 | 123 | 3 | 50 | finished
|
99 |
// 1 | 456 | 123 | 3 | 50 | finished
|
| 100 |
// 3 | 456 | 123 | 4 | null | inprogress
|
100 |
// 3 | 456 | 123 | 4 | null | inprogress
|
| - |
|
101 |
// 5 | 456 | 1 | 1 | 100 | finished
|
| - |
|
102 |
// 6 | 456 | 234 | 1 | 100 | finished
|
| 101 |
// 5 | 456 | 1 | 1 | 100 | finished
|
103 |
// 7 | 456 | 234 | 2 | null | submitted
|
| 102 |
// layout is only given because it has a not-null constraint.
|
104 |
// layout is only given because it has a not-null constraint.
|
| - |
|
105 |
// uniqueid values are meaningless, but that column has a unique constraint.
|
| - |
|
106 |
// user 123 will have their first attempt submitted, but not finished.
|
| Línea 103... |
Línea 107... |
| 103 |
// uniqueid values are meaningless, but that column has a unique constraint.
|
107 |
// user 234 will have their last attempt submitted, but not finished.
|
| 104 |
|
108 |
|
| 105 |
$fakeattempt->attempt = 3;
|
109 |
$fakeattempt->attempt = 3;
|
| 106 |
$fakeattempt->sumgrades = 50;
|
110 |
$fakeattempt->sumgrades = 50;
|
| Línea 107... |
Línea 111... |
| 107 |
$fakeattempt->uniqueid = 13;
|
111 |
$fakeattempt->uniqueid = 13;
|
| 108 |
$DB->insert_record('quiz_attempts', $fakeattempt);
|
112 |
$DB->insert_record('quiz_attempts', $fakeattempt);
|
| 109 |
|
113 |
|
| - |
|
114 |
$fakeattempt->attempt = 2;
|
| 110 |
$fakeattempt->attempt = 2;
|
115 |
$fakeattempt->sumgrades = 50;
|
| Línea 111... |
Línea 116... |
| 111 |
$fakeattempt->sumgrades = 50;
|
116 |
$fakeattempt->uniqueid = 26;
|
| 112 |
$fakeattempt->uniqueid = 26;
|
117 |
$fakeattempt->state = quiz_attempt::FINISHED;
|
| 113 |
$DB->insert_record('quiz_attempts', $fakeattempt);
|
118 |
$DB->insert_record('quiz_attempts', $fakeattempt);
|
| 114 |
|
119 |
|
| 115 |
$fakeattempt->attempt = 4;
|
120 |
$fakeattempt->attempt = 4;
|
| Línea 116... |
Línea 121... |
| 116 |
$fakeattempt->sumgrades = null;
|
121 |
$fakeattempt->sumgrades = null;
|
| 117 |
$fakeattempt->uniqueid = 39;
|
122 |
$fakeattempt->uniqueid = 39;
|
| 118 |
$fakeattempt->state = quiz_attempt::IN_PROGRESS;
|
123 |
$fakeattempt->state = quiz_attempt::IN_PROGRESS;
|
| 119 |
$DB->insert_record('quiz_attempts', $fakeattempt);
|
124 |
$DB->insert_record('quiz_attempts', $fakeattempt);
|
| 120 |
|
125 |
|
| Línea 121... |
Línea 126... |
| 121 |
$fakeattempt->attempt = 1;
|
126 |
$fakeattempt->attempt = 1;
|
| 122 |
$fakeattempt->sumgrades = 30;
|
127 |
$fakeattempt->sumgrades = null;
|
| 123 |
$fakeattempt->uniqueid = 52;
|
128 |
$fakeattempt->uniqueid = 52;
|
| 124 |
$fakeattempt->state = quiz_attempt::FINISHED;
|
129 |
$fakeattempt->state = quiz_attempt::SUBMITTED;
|
| - |
|
130 |
$DB->insert_record('quiz_attempts', $fakeattempt);
|
| - |
|
131 |
|
| - |
|
132 |
$fakeattempt->attempt = 1;
|
| - |
|
133 |
$fakeattempt->userid = 1;
|
| - |
|
134 |
$fakeattempt->sumgrades = 100;
|
| - |
|
135 |
$fakeattempt->uniqueid = 65;
|
| - |
|
136 |
$fakeattempt->state = quiz_attempt::FINISHED;
|
| - |
|
137 |
$DB->insert_record('quiz_attempts', $fakeattempt);
|
| - |
|
138 |
|
| - |
|
139 |
$fakeattempt->attempt = 1;
|
| - |
|
140 |
$fakeattempt->userid = 234;
|
| - |
|
141 |
$fakeattempt->sumgrades = 100;
|
| - |
|
142 |
$fakeattempt->uniqueid = 99;
|
| - |
|
143 |
$DB->insert_record('quiz_attempts', $fakeattempt);
|
| 125 |
$DB->insert_record('quiz_attempts', $fakeattempt);
|
144 |
|
| Línea 126... |
Línea 145... |
| 126 |
|
145 |
$fakeattempt->attempt = 2;
|
| 127 |
$fakeattempt->attempt = 1;
|
146 |
$fakeattempt->userid = 234;
|
| Línea 128... |
Línea 147... |
| 128 |
$fakeattempt->userid = 1;
|
147 |
$fakeattempt->sumgrades = null;
|
| 129 |
$fakeattempt->sumgrades = 100;
|
148 |
$fakeattempt->uniqueid = 77;
|
| 130 |
$fakeattempt->uniqueid = 65;
|
149 |
$fakeattempt->state = quiz_attempt::SUBMITTED;
|
| 131 |
$DB->insert_record('quiz_attempts', $fakeattempt);
|
150 |
$DB->insert_record('quiz_attempts', $fakeattempt);
|
| - |
|
151 |
|
| - |
|
152 |
$quiz = new \stdClass();
|
| - |
|
153 |
$quiz->attempts = 10;
|
| - |
|
154 |
|
| - |
|
155 |
$quiz->grademethod = QUIZ_ATTEMPTFIRST;
|
| - |
|
156 |
$firstattempt = $DB->get_records_sql("
|
| - |
|
157 |
SELECT * FROM {quiz_attempts} quiza WHERE userid = ? AND quiz = ? AND "
|
| - |
|
158 |
. quiz_report_qm_filter_select($quiz), [123, 456]);
|
| 132 |
|
159 |
$this->assertCount(1, $firstattempt);
|
| 133 |
$quiz = new \stdClass();
|
160 |
$firstattempt = reset($firstattempt);
|
| 134 |
$quiz->attempts = 10;
|
161 |
$this->assertEquals(1, $firstattempt->attempt);
|
| - |
|
162 |
$this->assertEquals(quiz_attempt::SUBMITTED, $firstattempt->state);
|
| Línea 135... |
Línea 163... |
| 135 |
|
163 |
|
| 136 |
$quiz->grademethod = QUIZ_ATTEMPTFIRST;
|
164 |
$firstattempt = $DB->get_records_sql("
|
| 137 |
$firstattempt = $DB->get_records_sql("
|
165 |
SELECT * FROM {quiz_attempts} quiza WHERE userid = ? AND quiz = ? AND "
|
| 138 |
SELECT * FROM {quiz_attempts} quiza WHERE userid = ? AND quiz = ? AND "
|
166 |
. quiz_report_qm_filter_select($quiz), [234, 456]);
|
| 139 |
. quiz_report_qm_filter_select($quiz), [123, 456]);
|
167 |
$this->assertCount(1, $firstattempt);
|
| 140 |
$this->assertEquals(1, count($firstattempt));
|
168 |
$firstattempt = reset($firstattempt);
|
| 141 |
$firstattempt = reset($firstattempt);
|
169 |
$this->assertEquals(1, $firstattempt->attempt);
|
| - |
|
170 |
$this->assertEquals(quiz_attempt::FINISHED, $firstattempt->state);
|
| - |
|
171 |
|
| - |
|
172 |
$quiz->grademethod = QUIZ_ATTEMPTLAST;
|
| - |
|
173 |
$lastattempt = $DB->get_records_sql("
|
| - |
|
174 |
SELECT * FROM {quiz_attempts} quiza WHERE userid = ? AND quiz = ? AND "
|
| - |
|
175 |
. quiz_report_qm_filter_select($quiz), [123, 456]);
|
| - |
|
176 |
$this->assertCount(1, $lastattempt);
|
| - |
|
177 |
$lastattempt = reset($lastattempt);
|
| - |
|
178 |
$this->assertEquals(3, $lastattempt->attempt);
|
| Línea 142... |
Línea 179... |
| 142 |
$this->assertEquals(1, $firstattempt->attempt);
|
179 |
$this->assertEquals(quiz_attempt::FINISHED, $lastattempt->state);
|
| 143 |
|
180 |
|
| 144 |
$quiz->grademethod = QUIZ_ATTEMPTLAST;
|
181 |
$lastattempt = $DB->get_records_sql("
|
| 145 |
$lastattempt = $DB->get_records_sql("
|
182 |
SELECT * FROM {quiz_attempts} quiza WHERE userid = ? AND quiz = ? AND "
|
| 146 |
SELECT * FROM {quiz_attempts} quiza WHERE userid = ? AND quiz = ? AND "
|
183 |
. quiz_report_qm_filter_select($quiz), [234, 456]);
|
| 147 |
. quiz_report_qm_filter_select($quiz), [123, 456]);
|
184 |
$this->assertCount(1, $lastattempt);
|
| 148 |
$this->assertEquals(1, count($lastattempt));
|
185 |
$lastattempt = reset($lastattempt);
|
| 149 |
$lastattempt = reset($lastattempt);
|
186 |
$this->assertEquals(2, $lastattempt->attempt);
|
| - |
|
187 |
$this->assertEquals(quiz_attempt::SUBMITTED, $lastattempt->state);
|
| - |
|
188 |
|
| - |
|
189 |
$quiz->attempts = 0;
|
| - |
|
190 |
$quiz->grademethod = QUIZ_GRADEHIGHEST;
|
| - |
|
191 |
$bestattempt = $DB->get_records_sql("
|
| - |
|
192 |
SELECT * FROM {quiz_attempts} qa_alias WHERE userid = ? AND quiz = ? AND "
|
| - |
|
193 |
. quiz_report_qm_filter_select($quiz, 'qa_alias'), [123, 456]);
|
| 150 |
$this->assertEquals(3, $lastattempt->attempt);
|
194 |
$this->assertCount(1, $bestattempt);
|
| Línea 151... |
Línea 195... |
| 151 |
|
195 |
$bestattempt = reset($bestattempt);
|
| 152 |
$quiz->attempts = 0;
|
196 |
$this->assertEquals(2, $bestattempt->attempt);
|
| 153 |
$quiz->grademethod = QUIZ_GRADEHIGHEST;
|
197 |
|