| 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 | 
             
  |