public function test_internal_get_grade_state()
 {
     $this->mock_setup();
     $item = new stdClass();
     $grade = new stdClass();
     $item->gradepass = 4;
     $item->hidden = 0;
     $grade->rawgrade = 4.0;
     $grade->finalgrade = null;
     // Grade has pass mark and is not hidden,  user passes.
     $this->assertEquals(COMPLETION_COMPLETE_PASS, completion_info::internal_get_grade_state($item, $grade));
     // Same but user fails.
     $grade->rawgrade = 3.9;
     $this->assertEquals(COMPLETION_COMPLETE_FAIL, completion_info::internal_get_grade_state($item, $grade));
     // User fails on raw grade but passes on final.
     $grade->finalgrade = 4.0;
     $this->assertEquals(COMPLETION_COMPLETE_PASS, completion_info::internal_get_grade_state($item, $grade));
     // Item is hidden.
     $item->hidden = 1;
     $this->assertEquals(COMPLETION_COMPLETE, completion_info::internal_get_grade_state($item, $grade));
     // Item isn't hidden but has no pass mark.
     $item->hidden = 0;
     $item->gradepass = 0;
     $this->assertEquals(COMPLETION_COMPLETE, completion_info::internal_get_grade_state($item, $grade));
 }