/** * Test get_attempt_review */ public function test_get_attempt_review() { global $DB; // Create a new quiz with two questions and one attempt finished. list($quiz, $context, $quizobj, $attempt, $attemptobj, $quba) = $this->create_quiz_with_questions(true, true); // Add feedback to the quiz. $feedback = new stdClass(); $feedback->quizid = $quiz->id; $feedback->feedbacktext = 'Feedback text 1'; $feedback->feedbacktextformat = 1; $feedback->mingrade = 49; $feedback->maxgrade = 100; $feedback->id = $DB->insert_record('quiz_feedback', $feedback); $feedback->feedbacktext = 'Feedback text 2'; $feedback->feedbacktextformat = 1; $feedback->mingrade = 30; $feedback->maxgrade = 48; $feedback->id = $DB->insert_record('quiz_feedback', $feedback); $result = mod_quiz_external::get_attempt_review($attempt->id); $result = external_api::clean_returnvalue(mod_quiz_external::get_attempt_review_returns(), $result); // Two questions, one completed and correct, the other gave up. $this->assertEquals(50, $result['grade']); $this->assertEquals(1, $result['attempt']['attempt']); $this->assertEquals('finished', $result['attempt']['state']); $this->assertEquals(1, $result['attempt']['sumgrades']); $this->assertCount(2, $result['questions']); $this->assertEquals('gradedright', $result['questions'][0]['state']); $this->assertEquals(1, $result['questions'][0]['slot']); $this->assertEquals('gaveup', $result['questions'][1]['state']); $this->assertEquals(2, $result['questions'][1]['slot']); $this->assertCount(1, $result['additionaldata']); $this->assertEquals('feedback', $result['additionaldata'][0]['id']); $this->assertEquals('Feedback', $result['additionaldata'][0]['title']); $this->assertEquals('Feedback text 1', $result['additionaldata'][0]['content']); // Only first page. $result = mod_quiz_external::get_attempt_review($attempt->id, 0); $result = external_api::clean_returnvalue(mod_quiz_external::get_attempt_review_returns(), $result); $this->assertEquals(50, $result['grade']); $this->assertEquals(1, $result['attempt']['attempt']); $this->assertEquals('finished', $result['attempt']['state']); $this->assertEquals(1, $result['attempt']['sumgrades']); $this->assertCount(1, $result['questions']); $this->assertEquals('gradedright', $result['questions'][0]['state']); $this->assertEquals(1, $result['questions'][0]['slot']); $this->assertCount(1, $result['additionaldata']); $this->assertEquals('feedback', $result['additionaldata'][0]['id']); $this->assertEquals('Feedback', $result['additionaldata'][0]['title']); $this->assertEquals('Feedback text 1', $result['additionaldata'][0]['content']); }