. /** * Unit tests for assignfeedback_file * * @package assignfeedback_file * @copyright 2016 Adrian Greeve * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ defined('MOODLE_INTERNAL') || die(); global $CFG; require_once($CFG->dirroot . '/mod/assign/tests/base_test.php'); /** * Unit tests for assignfeedback_file * * @copyright 2016 Adrian Greeve * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class assignfeedback_file_testcase extends mod_assign_base_testcase { /** * Create an assign object and submit an online text submission. */ protected function create_assign_and_submit_text() { $assign = $this->create_instance(array('assignsubmission_onlinetext_enabled' => 1, 'assignfeedback_comments_enabled' => 1)); $user = $this->students[0]; $this->setUser($user); // Create an online text submission. $submission = $assign->get_user_submission($user->id, true); $data = new stdClass(); $data->onlinetext_editor = array( 'text' => '

This is some text.

', 'format' => 1, 'itemid' => file_get_unused_draft_itemid()); $plugin = $assign->get_submission_plugin_by_type('onlinetext'); $plugin->save($submission, $data); return $assign; } /** * Test the is_feedback_modified() method for the file feedback. */ public function test_is_feedback_modified() { $assign = $this->create_assign_and_submit_text(); $this->setUser($this->teachers[0]); $fs = get_file_storage(); $context = context_user::instance($this->teachers[0]->id); $draftitemid = file_get_unused_draft_itemid(); file_prepare_draft_area($draftitemid, $context->id, 'assignfeedback_file', 'feedback_files', 1); $dummy = array( 'contextid' => $context->id, 'component' => 'user', 'filearea' => 'draft', 'itemid' => $draftitemid, 'filepath' => '/', 'filename' => 'feedback1.txt' ); $file = $fs->create_file_from_string($dummy, 'This is the first feedback file'); // Create formdata. $data = new stdClass(); $data->{'files_' . $this->students[0]->id . '_filemanager'} = $draftitemid; $grade = $assign->get_user_grade($this->students[0]->id, true); // This is the first time that we are submitting feedback, so it is modified. $plugin = $assign->get_feedback_plugin_by_type('file'); $this->assertTrue($plugin->is_feedback_modified($grade, $data)); // Save the feedback. $plugin->save($grade, $data); // Try again with the same data. $draftitemid = file_get_unused_draft_itemid(); file_prepare_draft_area($draftitemid, $context->id, 'assignfeedback_file', 'feedback_files', 1); $dummy['itemid'] = $draftitemid; $file = $fs->create_file_from_string($dummy, 'This is the first feedback file'); // Create formdata. $data = new stdClass(); $data->{'files_' . $this->students[0]->id . '_filemanager'} = $draftitemid; $this->assertFalse($plugin->is_feedback_modified($grade, $data)); // Same name for the file but different content. $draftitemid = file_get_unused_draft_itemid(); file_prepare_draft_area($draftitemid, $context->id, 'assignfeedback_file', 'feedback_files', 1); $dummy['itemid'] = $draftitemid; $file = $fs->create_file_from_string($dummy, 'This is different feedback'); // Create formdata. $data = new stdClass(); $data->{'files_' . $this->students[0]->id . '_filemanager'} = $draftitemid; $this->assertTrue($plugin->is_feedback_modified($grade, $data)); $plugin->save($grade, $data); // Add another file. $draftitemid = file_get_unused_draft_itemid(); file_prepare_draft_area($draftitemid, $context->id, 'assignfeedback_file', 'feedback_files', 1); $dummy['itemid'] = $draftitemid; $file = $fs->create_file_from_string($dummy, 'This is different feedback'); $dummy['filename'] = 'feedback2.txt'; $file = $fs->create_file_from_string($dummy, 'A second feedback file'); // Create formdata. $data = new stdClass(); $data->{'files_' . $this->students[0]->id . '_filemanager'} = $draftitemid; $this->assertTrue($plugin->is_feedback_modified($grade, $data)); $plugin->save($grade, $data); // Deleting a file. $draftitemid = file_get_unused_draft_itemid(); file_prepare_draft_area($draftitemid, $context->id, 'assignfeedback_file', 'feedback_files', 1); $dummy['itemid'] = $draftitemid; $file = $fs->create_file_from_string($dummy, 'This is different feedback'); // Create formdata. $data = new stdClass(); $data->{'files_' . $this->students[0]->id . '_filemanager'} = $draftitemid; $this->assertTrue($plugin->is_feedback_modified($grade, $data)); $plugin->save($grade, $data); // The file was moved to a folder. $draftitemid = file_get_unused_draft_itemid(); file_prepare_draft_area($draftitemid, $context->id, 'assignfeedback_file', 'feedback_files', 1); $dummy['itemid'] = $draftitemid; $dummy['filepath'] = '/testdir/'; $file = $fs->create_file_from_string($dummy, 'This is different feedback'); // Create formdata. $data = new stdClass(); $data->{'files_' . $this->students[0]->id . '_filemanager'} = $draftitemid; $this->assertTrue($plugin->is_feedback_modified($grade, $data)); $plugin->save($grade, $data); // No modification to the file in the folder. $draftitemid = file_get_unused_draft_itemid(); file_prepare_draft_area($draftitemid, $context->id, 'assignfeedback_file', 'feedback_files', 1); $dummy['itemid'] = $draftitemid; $dummy['filepath'] = '/testdir/'; $file = $fs->create_file_from_string($dummy, 'This is different feedback'); // Create formdata. $data = new stdClass(); $data->{'files_' . $this->students[0]->id . '_filemanager'} = $draftitemid; $this->assertFalse($plugin->is_feedback_modified($grade, $data)); } }