diff --git a/filter/data/tests/filter_test.php b/filter/data/tests/filter_test.php new file mode 100644 index 00000000000..17c279ce4b6 --- /dev/null +++ b/filter/data/tests/filter_test.php @@ -0,0 +1,119 @@ +. + +/** + * Unit tests. + * + * @package filter_data + * @category test + * @copyright 2015 David Monllao + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; +require_once($CFG->dirroot . '/filter/data/filter.php'); + +/** + * Tests for filter_data. + * + * @package filter_data + * @copyright 2015 David Monllao + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class filter_data_filter_testcase extends advanced_testcase { + + /** + * Tests that the filter applies the required changes. + * + * @return void + */ + public function test_filter() { + + $this->resetAfterTest(true); + $this->setAdminUser(); + filter_manager::reset_caches(); + + filter_set_global_state('data', TEXTFILTER_ON); + + $course1 = $this->getDataGenerator()->create_course(); + $coursecontext1 = context_course::instance($course1->id); + + $course2 = $this->getDataGenerator()->create_course(); + $coursecontext2 = context_course::instance($course2->id); + + $sitecontext = context_course::instance(SITEID); + + $site = get_site(); + $this->add_simple_database_instance($site, array('SiteEntry')); + $this->add_simple_database_instance($course1, array('CourseEntry')); + + $html = '
I like CourseEntry and SiteEntry
'; + + // Testing at course level (both site and course). + $filtered = format_text($html, FORMAT_HTML, array('context' => $coursecontext1)); + $this->assertRegExp('/title=(\'|")CourseEntry(\'|")/', $filtered); + $this->assertRegExp('/title=(\'|")SiteEntry(\'|")/', $filtered); + + // Testing at site level (only site). + $filtered = format_text($html, FORMAT_HTML, array('context' => $sitecontext)); + $this->assertNotRegExp('/title=(\'|")CourseEntry(\'|")/', $filtered); + $this->assertRegExp('/title=(\'|")SiteEntry(\'|")/', $filtered); + + // Changing to another course to test the caches invalidation (only site). + $filtered = format_text($html, FORMAT_HTML, array('context' => $coursecontext2)); + $this->assertNotRegExp('/title=(\'|")CourseEntry(\'|")/', $filtered); + $this->assertRegExp('/title=(\'|")SiteEntry(\'|")/', $filtered); + } + + /** + * Adds a database instance to the provided course + a text field + adds all attached entries. + * + * @param stdClass $course + * @param array $entries A list of entry names. + * @return void + */ + protected function add_simple_database_instance($course, $entries = false) { + global $DB; + + $database = $this->getDataGenerator()->create_module('data', + array('course' => $course->id)); + + // A database field. + $field = data_get_field_new('text', $database); + $fielddetail = new stdClass(); + $fielddetail->d = $database->id; + $fielddetail->mode = 'add'; + $fielddetail->type = 'text'; + $fielddetail->sesskey = sesskey(); + $fielddetail->name = 'Name'; + $fielddetail->description = 'Some name'; + $fielddetail->param1 = '1'; + $field->define_field($fielddetail); + $field->insert_field(); + $recordid = data_add_record($database); + + // Database entries. + foreach ($entries as $entrytext) { + $datacontent = array(); + $datacontent['fieldid'] = $field->field->id; + $datacontent['recordid'] = $recordid; + $datacontent['content'] = $entrytext; + $contentid = $DB->insert_record('data_content', $datacontent); + } + } +}