diff --git a/mod/forum/tests/portfolio_caller_test.php b/mod/forum/tests/portfolio_caller_test.php new file mode 100644 index 00000000000..572068e64da --- /dev/null +++ b/mod/forum/tests/portfolio_caller_test.php @@ -0,0 +1,142 @@ +. + +/** + * The portfolio forum tests. + * + * @package mod_forum + * @copyright 2018 onwards Totara Learning Solutions LTD {@link http://www.totaralms.com/} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @author Brendan Cox + */ + +defined('MOODLE_INTERNAL') || die(); + +/** + * Class mod_forum_portfolio_caller_testcase + * + * Tests behaviour of the forum_portfolio_caller class. + */ +class mod_forum_portfolio_caller_testcase extends advanced_testcase { + + /** + * Ensure that a file will be loaded in an instance of the caller when supplied valid and + * accessible post and attachment file ids. + */ + public function test_file_in_user_post_is_loaded() { + global $CFG; + require_once($CFG->dirroot . '/mod/forum/locallib.php'); + $this->resetAfterTest(true); + + $user = $this->getDataGenerator()->create_user(); + $course = $this->getDataGenerator()->create_course(); + $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); + $context = context_module::instance($forum->cmid); + + /* @var mod_forum_generator $forumgenerator */ + $forumgenerator = $this->getDataGenerator()->get_plugin_generator('mod_forum'); + $discussion = $forumgenerator->create_discussion( + array( + 'course' => $course->id, + 'forum' => $forum->id, + 'userid' => $user->id, + 'attachment' => 1 + ) + ); + + $fs = get_file_storage(); + $dummy = (object) array( + 'contextid' => $context->id, + 'component' => 'mod_forum', + 'filearea' => 'attachment', + 'itemid' => $discussion->firstpost, + 'filepath' => '/', + 'filename' => 'myassignmnent.pdf' + ); + $firstpostfile = $fs->create_file_from_string($dummy, 'Content of ' . $dummy->filename); + + $caller = new forum_portfolio_caller(array( + 'postid' => $discussion->firstpost, + 'attachment' => $firstpostfile->get_id() + )); + + $caller->load_data(); + $this->assertEquals($caller->get_sha1_file(), $firstpostfile->get_contenthash()); + } + + /** + * Ensure that files will not be loaded if the supplied attachment id is for a file that is not attached to + * the supplied post id. + */ + public function test_file_not_in_user_post_not_loaded() { + global $CFG; + require_once($CFG->dirroot . '/mod/forum/locallib.php'); + $this->resetAfterTest(true); + + $user = $this->getDataGenerator()->create_user(); + $course = $this->getDataGenerator()->create_course(); + $forum = $this->getDataGenerator()->create_module('forum', array('course' => $course->id)); + $context = context_module::instance($forum->cmid); + + /* @var mod_forum_generator $forumgenerator */ + $forumgenerator = $this->getDataGenerator()->get_plugin_generator('mod_forum'); + $discussion = $forumgenerator->create_discussion( + array( + 'course' => $course->id, + 'forum' => $forum->id, + 'userid' => $user->id, + 'attachment' => 1 + ) + ); + + $fs = get_file_storage(); + $dummyone = (object) array( + 'contextid' => $context->id, + 'component' => 'mod_forum', + 'filearea' => 'attachment', + 'itemid' => $discussion->firstpost, + 'filepath' => '/', + 'filename' => 'myassignmnent.pdf' + ); + $firstpostfile = $fs->create_file_from_string($dummyone, 'Content of ' . $dummyone->filename); + + // Create a second post and add a file there. + $secondpost = $forumgenerator->create_post( + array( + 'discussion' => $discussion->id, + 'userid' => $user->id, + 'attachment' => 1 + ) + ); + $dummytwo = (object) array( + 'contextid' => $context->id, + 'component' => 'mod_forum', + 'filearea' => 'attachment', + 'itemid' => $secondpost->id, + 'filepath' => '/', + 'filename' => 'myotherthing.pdf' + ); + $secondpostfile = $fs->create_file_from_string($dummytwo, 'Content of ' . $dummytwo->filename); + + $caller = new forum_portfolio_caller(array( + 'postid' => $discussion->firstpost, + 'attachment' => $secondpostfile->get_id() + )); + + $this->expectExceptionMessage('Sorry, the requested file could not be found'); + $caller->load_data(); + } +}