}
+ /**
+ * Test hidden grader for get_submission_status.
+ */
+ public function test_get_submission_status_hidden_grader() {
+ $this->resetAfterTest(true);
+
+ list($assign, $instance, $student1, $student2, $teacher, $g1, $g2) = $this->create_submission_for_testing_status(true);
+
+ // Grade the assign for the student1.
+ $this->setUser($teacher);
+
+ $data = new stdClass();
+ $data->grade = '50.0';
+ $data->assignfeedbackcomments_editor = ['text' => ''];
+ $assign->testable_apply_grade_to_user($data, $student1->id, 0);
+
+ $this->setUser($student1);
+
+ // Check that the student can see the grader by default.
+ $result = mod_assign_external::get_submission_status($assign->get_instance()->id);
+ // We expect debugging because of the $PAGE object, this won't happen in a normal WS request.
+ $this->assertDebuggingCalled();
+
+ $result = external_api::clean_returnvalue(mod_assign_external::get_submission_status_returns(), $result);
+
+ $this->assertTrue(isset($result['feedback']));
+ $this->assertTrue(isset($result['feedback']['grade']));
+ $this->assertEquals($teacher->id, $result['feedback']['grade']['grader']);
+
+ // Now change the setting so the grader is hidden.
+ $this->setAdminUser();
+
+ $instance = $assign->get_instance();
+ $instance->instance = $instance->id;
+ $instance->hidegrader = true;
+ $assign->update_instance($instance);
+
+ $this->setUser($student1);
+
+ // Check that the student cannot see the grader anymore.
+ $result = mod_assign_external::get_submission_status($assign->get_instance()->id);
+ $result = external_api::clean_returnvalue(mod_assign_external::get_submission_status_returns(), $result);
+
+ $this->assertTrue(isset($result['feedback']));
+ $this->assertTrue(isset($result['feedback']['grade']));
+ $this->assertEquals(-1, $result['feedback']['grade']['grader']);
+
+ // Check that the teacher can see the grader.
+ $this->setUser($teacher);
+
+ $result = mod_assign_external::get_submission_status($assign->get_instance()->id, $student1->id);
+ $result = external_api::clean_returnvalue(mod_assign_external::get_submission_status_returns(), $result);
+
+ $this->assertTrue(isset($result['feedback']));
+ $this->assertTrue(isset($result['feedback']['grade']));
+ $this->assertEquals($teacher->id, $result['feedback']['grade']['grader']);
+ }
+
/**
* get_participant should throw an excaption if the requested assignment doesn't exist.
*