Proyectos de Subversion Moodle

Rev

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

Rev 11 Rev 1441
Línea 17... Línea 17...
17
namespace mod_quiz;
17
namespace mod_quiz;
Línea 18... Línea 18...
18
 
18
 
19
use moodle_url;
19
use moodle_url;
20
use question_bank;
20
use question_bank;
21
use question_engine;
21
use question_engine;
22
use mod_quiz\question\bank\qbank_helper;
-
 
23
 
-
 
24
defined('MOODLE_INTERNAL') || die();
-
 
25
 
-
 
26
global $CFG;
-
 
27
require_once($CFG->dirroot . '/mod/quiz/locallib.php');
-
 
Línea 28... Línea 22...
28
require_once($CFG->dirroot . '/mod/quiz/tests/quiz_question_helper_test_trait.php');
22
use mod_quiz\tests\question_helper_test_trait;
29
 
23
 
30
/**
24
/**
31
 * Quiz attempt walk through.
25
 * Quiz attempt walk through.
Línea 35... Línea 29...
35
 * @copyright 2013 The Open University
29
 * @copyright 2013 The Open University
36
 * @author    Jamie Pratt <me@jamiep.org>
30
 * @author    Jamie Pratt <me@jamiep.org>
37
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
31
 * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
38
 * @covers \mod_quiz\quiz_attempt
32
 * @covers \mod_quiz\quiz_attempt
39
 */
33
 */
40
class attempt_walkthrough_test extends \advanced_testcase {
34
final class attempt_walkthrough_test extends \advanced_testcase {
-
 
35
    use question_helper_test_trait;
Línea -... Línea 36...
-
 
36
 
41
 
37
    #[\Override]
-
 
38
    public static function setUpBeforeClass(): void {
-
 
39
        global $CFG;
-
 
40
 
-
 
41
        parent::setUpBeforeClass();
-
 
42
 
-
 
43
        require_once($CFG->dirroot . '/mod/quiz/locallib.php');
Línea 42... Línea 44...
42
    use \quiz_question_helper_test_trait;
44
    }
43
 
45
 
44
    /**
46
    /**
45
     * Create a quiz with questions and walk through a quiz attempt.
47
     * Create a quiz with questions and walk through a quiz attempt.
Línea 102... Línea 104...
102
 
104
 
103
        $tosubmit = [
105
        $tosubmit = [
104
            3 => [
106
            3 => [
105
                'frog' => 'amphibian',
107
                'frog' => 'amphibian',
106
                'cat' => 'mammal',
108
                'cat' => 'mammal',
107
                'newt' => ''
109
                'newt' => '',
108
            ]
110
            ],
Línea 109... Línea 111...
109
        ];
111
        ];
110
 
112
 
111
        $attemptobj->process_submitted_actions($timenow, false, $tosubmit);
113
        $attemptobj->process_submitted_actions($timenow, false, $tosubmit);
Línea 112... Línea 114...
112
        // The student has answered three questions but one is invalid, so there is still one remaining.
114
        // The student has answered three questions but one is invalid, so there is still one remaining.
113
        $this->assertEquals(1, $attemptobj->get_number_of_unanswered_questions());
115
        $this->assertEquals(1, $attemptobj->get_number_of_unanswered_questions());
114
 
116
 
115
        $tosubmit = [
117
        $tosubmit = [
116
            3 => [
118
            3 => [
117
                'frog' => 'amphibian',
119
                'frog' => 'amphibian',
118
                'cat' => 'mammal',
120
                'cat' => 'mammal',
Línea 119... Línea 121...
119
                'newt' => 'amphibian'
121
                'newt' => 'amphibian',
120
            ]
122
            ],
121
        ];
123
        ];
Línea 122... Línea 124...
122
 
124
 
123
        $attemptobj->process_submitted_actions($timenow, false, $tosubmit);
125
        $attemptobj->process_submitted_actions($timenow, false, $tosubmit);
124
        // The student has answered three questions, so there are no remaining.
126
        // The student has answered three questions, so there are no remaining.
125
        $this->assertEquals(0, $attemptobj->get_number_of_unanswered_questions());
127
        $this->assertEquals(0, $attemptobj->get_number_of_unanswered_questions());
Línea 126... Línea 128...
126
 
128
 
127
        // Finish the attempt.
129
        // Finish the attempt.
Línea 128... Línea 130...
128
        $attemptobj = quiz_attempt::create($attempt->id);
130
        $attemptobj = quiz_attempt::create($attempt->id);
129
        $this->assertTrue($attemptobj->has_response_to_at_least_one_graded_question());
131
        $this->assertTrue($attemptobj->has_response_to_at_least_one_graded_question());
130
        $attemptobj->process_finish($timenow, false);
-
 
131
 
132
        $attemptobj->process_submit($timenow, false);
132
        // Re-load quiz attempt data.
133
 
133
        $attemptobj = quiz_attempt::create($attempt->id);
134
        // Re-load quiz attempt data.
134
 
135
        $attemptobj = quiz_attempt::create($attempt->id);
135
        // Check that results are stored as expected.
136
 
-
 
137
        // Check that results are stored as expected.
-
 
138
        $this->assertEquals(1, $attemptobj->get_attempt_number());
-
 
139
        $this->assertEquals(false, $attemptobj->is_finished());
-
 
140
        $this->assertEquals($timenow, $attemptobj->get_submitted_date());
-
 
141
        $this->assertEquals($user1->id, $attemptobj->get_userid());
-
 
142
        $this->assertTrue($attemptobj->has_response_to_at_least_one_graded_question());
-
 
143
        $this->assertEquals(0, $attemptobj->get_number_of_unanswered_questions());
Línea 136... Línea 144...
136
        $this->assertEquals(1, $attemptobj->get_attempt_number());
144
        // Check we don't have grades yet.
-
 
145
        $this->assertEmpty(quiz_get_user_grades($quiz, $user1->id));
-
 
146
        $this->assertNull($attemptobj->get_sum_marks());
-
 
147
 
137
        $this->assertEquals(3, $attemptobj->get_sum_marks());
148
        // Now grade the submission.
138
        $this->assertEquals(true, $attemptobj->is_finished());
149
        $attemptobj->process_grade_submission($timenow);
139
        $this->assertEquals($timenow, $attemptobj->get_submitted_date());
150
        $attemptobj = quiz_attempt::create($attempt->id);
Línea 140... Línea 151...
140
        $this->assertEquals($user1->id, $attemptobj->get_userid());
151
 
Línea 151... Línea 162...
151
        $gradebookitem = array_shift($gradebookgrades->items);
162
        $gradebookitem = array_shift($gradebookgrades->items);
152
        $gradebookgrade = array_shift($gradebookitem->grades);
163
        $gradebookgrade = array_shift($gradebookitem->grades);
153
        $this->assertEquals(100, $gradebookgrade->grade);
164
        $this->assertEquals(100, $gradebookgrade->grade);
Línea 154... Línea 165...
154
 
165
 
155
        // Update question in quiz.
166
        // Update question in quiz.
-
 
167
        $newsa = $questiongenerator->update_question(
-
 
168
            $saq,
156
        $newsa = $questiongenerator->update_question($saq, null,
169
            null,
-
 
170
            ['name' => 'This is the second version of shortanswer']
157
            ['name' => 'This is the second version of shortanswer']);
171
        );
-
 
172
        $newnumbq = $questiongenerator->update_question(
-
 
173
            $numq,
158
        $newnumbq = $questiongenerator->update_question($numq, null,
174
            null,
-
 
175
            ['name' => 'This is the second version of numerical']
159
            ['name' => 'This is the second version of numerical']);
176
        );
-
 
177
        $newmatch = $questiongenerator->update_question(
-
 
178
            $matchq,
160
        $newmatch = $questiongenerator->update_question($matchq, null,
179
            null,
-
 
180
            ['name' => 'This is the second version of match']
161
            ['name' => 'This is the second version of match']);
181
        );
-
 
182
        $newdescription = $questiongenerator->update_question(
-
 
183
            $description,
162
        $newdescription = $questiongenerator->update_question($description, null,
184
            null,
-
 
185
            ['name' => 'This is the second version of description']
Línea 163... Línea 186...
163
            ['name' => 'This is the second version of description']);
186
        );
164
 
187
 
165
        // Update the attempt to use this questions.
188
        // Update the attempt to use this questions.
Línea 216... Línea 239...
216
        // Make a quiz.
239
        // Make a quiz.
217
        $timeclose = time() + HOURSECS;
240
        $timeclose = time() + HOURSECS;
218
        $quizgenerator = $this->getDataGenerator()->get_plugin_generator('mod_quiz');
241
        $quizgenerator = $this->getDataGenerator()->get_plugin_generator('mod_quiz');
Línea 219... Línea 242...
219
 
242
 
220
        $quiz = $quizgenerator->create_instance(
243
        $quiz = $quizgenerator->create_instance(
221
                ['course' => $SITE->id, 'timeclose' => $timeclose,
244
            ['course' => $SITE->id, 'timeclose' => $timeclose,
-
 
245
            'overduehandling' => $overduehandling,
-
 
246
            'graceperiod' => HOURSECS]
Línea 222... Línea 247...
222
                        'overduehandling' => $overduehandling, 'graceperiod' => HOURSECS]);
247
        );
223
 
248
 
224
        // Create a question.
249
        // Create a question.
225
        /** @var \core_question_generator $questiongenerator */
250
        /** @var \core_question_generator $questiongenerator */
Línea 394... Línea 419...
394
 
419
 
395
            // Finish the attempt.
420
            // Finish the attempt.
396
            $attemptobj = quiz_attempt::create($attempt->id);
421
            $attemptobj = quiz_attempt::create($attempt->id);
397
            $this->assertTrue($attemptobj->has_response_to_at_least_one_graded_question());
422
            $this->assertTrue($attemptobj->has_response_to_at_least_one_graded_question());
398
            $this->assertEquals(0, $attemptobj->get_number_of_unanswered_questions());
423
            $this->assertEquals(0, $attemptobj->get_number_of_unanswered_questions());
Línea 399... Línea 424...
399
            $attemptobj->process_finish($timenow, false);
424
            $attemptobj->process_submit($timenow, false);
400
 
425
 
Línea 401... Línea 426...
401
            // Re-load quiz attempt data.
426
            // Re-load quiz attempt data.
402
            $attemptobj = quiz_attempt::create($attempt->id);
427
            $attemptobj = quiz_attempt::create($attempt->id);
403
 
-
 
404
            // Check that results are stored as expected.
428
 
405
            $this->assertEquals(1, $attemptobj->get_attempt_number());
429
            // Check that results are stored as expected.
406
            $this->assertEquals(4, $attemptobj->get_sum_marks());
430
            $this->assertEquals(1, $attemptobj->get_attempt_number());
407
            $this->assertEquals(true, $attemptobj->is_finished());
431
            $this->assertEquals(false, $attemptobj->is_finished());
408
            $this->assertEquals($timenow, $attemptobj->get_submitted_date());
432
            $this->assertEquals($timenow, $attemptobj->get_submitted_date());
Línea -... Línea 433...
-
 
433
            $this->assertEquals($user1->id, $attemptobj->get_userid());
-
 
434
            $this->assertTrue($attemptobj->has_response_to_at_least_one_graded_question());
-
 
435
            $this->assertEquals(0, $attemptobj->get_number_of_unanswered_questions());
-
 
436
 
-
 
437
            // Check we don't have grades yet.
-
 
438
            $this->assertEmpty(quiz_get_user_grades($quiz, $user1->id));
-
 
439
            $this->assertNull($attemptobj->get_sum_marks());
-
 
440
 
-
 
441
            // Now grade the submission.
-
 
442
            $attemptobj->process_grade_submission($timenow);
-
 
443
            $attemptobj = quiz_attempt::create($attempt->id);
-
 
444
 
409
            $this->assertEquals($user1->id, $attemptobj->get_userid());
445
            // Check quiz grades.
410
            $this->assertTrue($attemptobj->has_response_to_at_least_one_graded_question());
446
            $this->assertEquals(true, $attemptobj->is_finished());
411
            $this->assertEquals(0, $attemptobj->get_number_of_unanswered_questions());
447
            $this->assertEquals(4, $attemptobj->get_sum_marks());
412
 
448
 
Línea 421... Línea 457...
421
            $gradebookgrade = array_shift($gradebookitem->grades);
457
            $gradebookgrade = array_shift($gradebookitem->grades);
422
            $this->assertEquals(100, $gradebookgrade->grade);
458
            $this->assertEquals(100, $gradebookgrade->grade);
423
        }
459
        }
424
    }
460
    }
Línea -... Línea 461...
-
 
461
 
-
 
462
    /**
425
 
463
     * Get the correct response for variants.
-
 
464
     *
-
 
465
     * @return array
426
 
466
     */
427
    public function get_correct_response_for_variants() {
467
    public static function get_correct_response_for_variants(): array {
428
        return [[1, 9.9], [2, 8.5], [5, 14.2], [10, 6.8, true]];
468
        return [[1, 9.9], [2, 8.5], [5, 14.2], [10, 6.8, true]];
Línea -... Línea 469...
-
 
469
    }
429
    }
470
 
Línea 430... Línea 471...
430
 
471
    /** @var ?\quiz A quiz with variants */
431
    protected $quizwithvariants = null;
472
    protected $quizwithvariants = null;
432
 
473
 
Línea 487... Línea 528...
487
        // Finish the attempt.
528
        // Finish the attempt.
488
        $attemptobj = quiz_attempt::create($attempt->id);
529
        $attemptobj = quiz_attempt::create($attempt->id);
489
        $this->assertTrue($attemptobj->has_response_to_at_least_one_graded_question());
530
        $this->assertTrue($attemptobj->has_response_to_at_least_one_graded_question());
490
        $this->assertEquals(0, $attemptobj->get_number_of_unanswered_questions());
531
        $this->assertEquals(0, $attemptobj->get_number_of_unanswered_questions());
Línea 491... Línea 532...
491
 
532
 
Línea 492... Línea 533...
492
        $attemptobj->process_finish($timenow, false);
533
        $attemptobj->process_submit($timenow, false);
493
 
534
 
Línea 494... Línea 535...
494
        // Re-load quiz attempt data.
535
        // Re-load quiz attempt data.
495
        $attemptobj = quiz_attempt::create($attempt->id);
536
        $attemptobj = quiz_attempt::create($attempt->id);
496
 
-
 
497
        // Check that results are stored as expected.
537
 
498
        $this->assertEquals(1, $attemptobj->get_attempt_number());
538
        // Check that results are stored as expected.
499
        $this->assertEquals(1, $attemptobj->get_sum_marks());
539
        $this->assertEquals(1, $attemptobj->get_attempt_number());
500
        $this->assertEquals(true, $attemptobj->is_finished());
540
        $this->assertEquals(false, $attemptobj->is_finished());
501
        $this->assertEquals($timenow, $attemptobj->get_submitted_date());
541
        $this->assertEquals($timenow, $attemptobj->get_submitted_date());
Línea -... Línea 542...
-
 
542
        $this->assertEquals($user1->id, $attemptobj->get_userid());
-
 
543
        $this->assertTrue($attemptobj->has_response_to_at_least_one_graded_question());
-
 
544
        $this->assertEquals(0, $attemptobj->get_number_of_unanswered_questions());
-
 
545
 
-
 
546
        // Check we don't have grades yet.
-
 
547
        $this->assertEmpty(quiz_get_user_grades($this->quizwithvariants, $user1->id));
-
 
548
        $this->assertNull($attemptobj->get_sum_marks());
-
 
549
 
-
 
550
        // Now grade the submission.
-
 
551
        $attemptobj->process_grade_submission($timenow);
-
 
552
        $attemptobj = quiz_attempt::create($attempt->id);
502
        $this->assertEquals($user1->id, $attemptobj->get_userid());
553
 
503
        $this->assertTrue($attemptobj->has_response_to_at_least_one_graded_question());
554
        // Check quiz grades.
504
        $this->assertEquals(0, $attemptobj->get_number_of_unanswered_questions());
555
        $this->assertEquals(true, $attemptobj->is_finished());
505
 
556
        $this->assertEquals(1, $attemptobj->get_sum_marks());
Línea 559... Línea 610...
559
        $this->assertEquals(1, $attemptobj->get_attempt_number());
610
        $this->assertEquals(1, $attemptobj->get_attempt_number());
560
        $this->assertFalse($attemptobj->is_finished());
611
        $this->assertFalse($attemptobj->is_finished());
561
        $this->assertEquals(quiz_attempt::IN_PROGRESS, $attemptobj->get_state());
612
        $this->assertEquals(quiz_attempt::IN_PROGRESS, $attemptobj->get_state());
562
        $this->assertEquals(0, $attemptobj->get_submitted_date());
613
        $this->assertEquals(0, $attemptobj->get_submitted_date());
563
        $this->assertEquals($user->id, $attemptobj->get_userid());
614
        $this->assertEquals($user->id, $attemptobj->get_userid());
-
 
615
        $this->assertEquals(
564
        $this->assertEquals($overriddentimeclose,
616
            $overriddentimeclose,
565
                $attemptobj->get_access_manager($reopentime)->get_end_time($attemptobj->get_attempt()));
617
            $attemptobj->get_access_manager($reopentime)->get_end_time($attemptobj->get_attempt())
-
 
618
        );
Línea 566... Línea 619...
566
 
619
 
567
        // Verify this was logged correctly.
620
        // Verify this was logged correctly.
568
        $events = $sink->get_events();
621
        $events = $sink->get_events();
Línea 569... Línea 622...
569
        $this->assertCount(1, $events);
622
        $this->assertCount(1, $events);
570
 
623
 
571
        $reopenedevent = array_shift($events);
624
        $reopenedevent = array_shift($events);
-
 
625
        $this->assertInstanceOf('\mod_quiz\event\attempt_reopened', $reopenedevent);
572
        $this->assertInstanceOf('\mod_quiz\event\attempt_reopened', $reopenedevent);
626
        $this->assertEquals($attemptobj->get_context(), $reopenedevent->get_context());
573
        $this->assertEquals($attemptobj->get_context(), $reopenedevent->get_context());
627
        $this->assertEquals(
-
 
628
            new moodle_url('/mod/quiz/review.php', ['attempt' => $attemptobj->get_attemptid()]),
574
        $this->assertEquals(new moodle_url('/mod/quiz/review.php', ['attempt' => $attemptobj->get_attemptid()]),
629
            $reopenedevent->get_url()
Línea 575... Línea 630...
575
                $reopenedevent->get_url());
630
        );
576
    }
631
    }
577
 
632
 
Línea 614... Línea 669...
614
        $this->assertEquals($user->id, $attemptobj->get_userid());
669
        $this->assertEquals($user->id, $attemptobj->get_userid());
615
        $this->assertEquals(1, $attemptobj->get_sum_marks());
670
        $this->assertEquals(1, $attemptobj->get_sum_marks());
Línea 616... Línea 671...
616
 
671
 
617
        // Verify this was logged correctly - there are some gradebook events between the two we want to check.
672
        // Verify this was logged correctly - there are some gradebook events between the two we want to check.
618
        $events = $sink->get_events();
673
        $events = $sink->get_events();
Línea -... Línea 674...
-
 
674
        $this->assertGreaterThanOrEqual(3, $events);
-
 
675
 
-
 
676
        $attempturl = new moodle_url(
-
 
677
            '/mod/quiz/review.php',
619
        $this->assertGreaterThanOrEqual(2, $events);
678
            ['attempt' => $attemptobj->get_attemptid()],
620
 
679
        );
621
        $reopenedevent = array_shift($events);
680
        $reopenedevent = array_shift($events);
622
        $this->assertInstanceOf('\mod_quiz\event\attempt_reopened', $reopenedevent);
-
 
623
        $this->assertEquals($attemptobj->get_context(), $reopenedevent->get_context());
-
 
Línea -... Línea 681...
-
 
681
        $this->assertInstanceOf('\mod_quiz\event\attempt_reopened', $reopenedevent);
-
 
682
        $this->assertEquals($attemptobj->get_context(), $reopenedevent->get_context());
624
        $this->assertEquals(new moodle_url('/mod/quiz/review.php', ['attempt' => $attemptobj->get_attemptid()]),
683
 
625
                $reopenedevent->get_url());
684
        $this->assertEquals($attempturl, $reopenedevent->get_url());
626
 
685
 
-
 
686
        $submittedevent = array_shift($events);
-
 
687
        $this->assertInstanceOf('\mod_quiz\event\attempt_submitted', $submittedevent);
-
 
688
        $this->assertEquals($attemptobj->get_context(), $submittedevent->get_context());
-
 
689
 
-
 
690
        $this->assertEquals($attempturl, $submittedevent->get_url());
627
        $submittedevent = array_pop($events);
691
 
-
 
692
        $gradedevent = array_pop($events);
-
 
693
        $this->assertInstanceOf('\mod_quiz\event\attempt_graded', $gradedevent);
-
 
694
        $this->assertEquals($attemptobj->get_context(), $gradedevent->get_context());
-
 
695
        $this->assertEquals($attempturl, $gradedevent->get_url());
-
 
696
    }
-
 
697
 
-
 
698
    /**
-
 
699
     * Create a quiz with questions, pre-create an attempt, edit a question, then begin the attempt.
-
 
700
     */
-
 
701
    public function test_quiz_attempt_walkthrough_update_question_after_precreate(): void {
-
 
702
        global $SITE;
-
 
703
 
-
 
704
        $this->resetAfterTest(true);
-
 
705
 
-
 
706
        // Make a quiz.
-
 
707
        $quizgenerator = $this->getDataGenerator()->get_plugin_generator('mod_quiz');
-
 
708
 
628
        $this->assertInstanceOf('\mod_quiz\event\attempt_submitted', $submittedevent);
709
        $quiz = $quizgenerator->create_instance(
-
 
710
            [
-
 
711
                'course' => $SITE->id,
-
 
712
                'questionsperpage' => 0,
-
 
713
                'grade' => 100.0,
-
 
714
                'sumgrades' => 3,
-
 
715
            ],
-
 
716
        );
-
 
717
 
-
 
718
        // Create a couple of questions.
-
 
719
        $questiongenerator = $this->getDataGenerator()->get_plugin_generator('core_question');
-
 
720
 
-
 
721
        $cat = $questiongenerator->create_question_category();
-
 
722
        $saq = $questiongenerator->create_question('shortanswer', null, ['category' => $cat->id]);
-
 
723
        $numq = $questiongenerator->create_question('numerical', null, ['category' => $cat->id]);
-
 
724
        $matchq = $questiongenerator->create_question('match', null, ['category' => $cat->id]);
-
 
725
        $description = $questiongenerator->create_question('description', null, ['category' => $cat->id]);
-
 
726
 
-
 
727
        // Add them to the quiz.
-
 
728
        quiz_add_quiz_question($saq->id, $quiz);
-
 
729
        quiz_add_quiz_question($numq->id, $quiz);
-
 
730
        quiz_add_quiz_question($matchq->id, $quiz);
-
 
731
        quiz_add_quiz_question($description->id, $quiz);
-
 
732
 
-
 
733
        // Make a user to do the quiz.
-
 
734
        $user1 = $this->getDataGenerator()->create_user();
-
 
735
 
-
 
736
        $quizobj = quiz_settings::create($quiz->id, $user1->id);
-
 
737
 
-
 
738
        // Start the attempt.
-
 
739
        $quba = question_engine::make_questions_usage_by_activity('mod_quiz', $quizobj->get_context());
-
 
740
        $quba->set_preferred_behaviour($quizobj->get_quiz()->preferredbehaviour);
-
 
741
 
-
 
742
        $timenow = time();
-
 
743
        $attempt = quiz_create_attempt($quizobj, 1, false, $timenow, false, $user1->id);
-
 
744
 
-
 
745
        quiz_start_new_attempt($quizobj, $quba, $attempt, 1, $timenow);
-
 
746
        $this->assertEquals('1,2,3,4,0', $attempt->layout);
-
 
747
 
-
 
748
        quiz_attempt_save_not_started($quba, $attempt);
-
 
749
 
-
 
750
        $attemptobj = quiz_attempt::create($attempt->id);
-
 
751
 
-
 
752
        // Update question in quiz.
-
 
753
        $newsa = $questiongenerator->update_question($saq, null,
-
 
754
            ['name' => 'This is the second version of shortanswer']);
-
 
755
        $newnumbq = $questiongenerator->update_question($numq, null,
-
 
756
            ['name' => 'This is the second version of numerical']);
-
 
757
        $newmatch = $questiongenerator->update_question($matchq, null,
-
 
758
            ['name' => 'This is the second version of match']);
-
 
759
        $newdescription = $questiongenerator->update_question($description, null,
-
 
760
            ['name' => 'This is the second version of description']);
-
 
761
 
-
 
762
        $this->assertEquals($saq->id, $attemptobj->get_question_attempt(1)->get_question_id());
-
 
763
        $this->assertEquals($numq->id, $attemptobj->get_question_attempt(2)->get_question_id());
-
 
764
        $this->assertEquals($matchq->id, $attemptobj->get_question_attempt(3)->get_question_id());
-
 
765
        $this->assertEquals($description->id, $attemptobj->get_question_attempt(4)->get_question_id());
-
 
766
 
-
 
767
        quiz_attempt_save_started($quizobj, $quba, $attempt);
-
 
768
 
-
 
769
        // Verify that the started attempt contains the new questions.
-
 
770
        $attemptobj = quiz_attempt::create($attempt->id);
-
 
771
        $this->assertEquals($newsa->id, $attemptobj->get_question_attempt(1)->get_question_id());
629
        $this->assertEquals($attemptobj->get_context(), $submittedevent->get_context());
772
        $this->assertEquals($newnumbq->id, $attemptobj->get_question_attempt(2)->get_question_id());
630
        $this->assertEquals(new moodle_url('/mod/quiz/review.php', ['attempt' => $attemptobj->get_attemptid()]),
773
        $this->assertEquals($newmatch->id, $attemptobj->get_question_attempt(3)->get_question_id());