Proyectos de Subversion Moodle

Rev

Rev 11 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 11 Rev 1441
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