diff --git a/contentbank/tests/behat/events.feature b/contentbank/tests/behat/events.feature new file mode 100644 index 00000000000..c52019903e4 --- /dev/null +++ b/contentbank/tests/behat/events.feature @@ -0,0 +1,73 @@ +@core @core_contentbank @_file_upload @_switch_iframe @javascript +Feature: Confirm content bank events are triggered + In order to log content bank actions + As an admin + I need to be able to check triggered events + + Background: + And the following "courses" exist: + | fullname | shortname | category | + | Course 1 | C1 | 0 | + And the following "contentbank content" exist: + | course | contenttype | user | contentname | + | C1 | contenttype_h5p | admin | Existing | + And I log in as "admin" + And I follow "Manage private files..." + And I upload "h5p/tests/fixtures/filltheblanks.h5p" file to "Files" filemanager + And I click on "Save changes" "button" + And I am on "Course 1" course homepage with editing mode on + And I add the "Navigation" block if not present + + Scenario: Content created and uploaded events when uploading a content file + Given I navigate to "Reports > Live logs" in site administration + And I should not see "Content uploaded" + And I should not see "Content created" + And I am on "Course 1" course homepage + And I expand "Site pages" node + And I click on "Content bank" "link" + When I click on "Upload" "link" + And I click on "Choose a file..." "button" + And I click on "Private files" "link" in the ".fp-repo-area" "css_element" + And I click on "filltheblanks.h5p" "link" + And I click on "Select this file" "button" + And I click on "Save changes" "button" + And I navigate to "Reports > Live logs" in site administration + Then I should see "Content uploaded" + And I should see "Content created" + + Scenario: Content viewed event + Given I navigate to "Reports > Live logs" in site administration + And I should not see "Content viewed" + And I am on "Course 1" course homepage + And I expand "Site pages" node + And I click on "Content bank" "link" + When I click on "Existing" "link" + And I navigate to "Reports > Live logs" in site administration + Then I should see "Content viewed" + + Scenario: Content deleted event + Given I navigate to "Reports > Live logs" in site administration + And I should not see "Content deleted" + And I am on "Course 1" course homepage + And I expand "Site pages" node + And I click on "Content bank" "link" + And I click on "Existing" "link" + And I open the action menu in "region-main-settings-menu" "region" + When I choose "Delete" in the open action menu + And I click on "Delete" "button" in the "Delete content" "dialogue" + And I navigate to "Reports > Live logs" in site administration + Then I should see "Content deleted" + + Scenario: Content updated event when renaming + Given I navigate to "Reports > Live logs" in site administration + And I should not see "Content updated" + And I am on "Course 1" course homepage + And I expand "Site pages" node + And I click on "Content bank" "link" + And I click on "Existing" "link" + And I open the action menu in "region-main-settings-menu" "region" + When I choose "Rename" in the open action menu + And I set the field "Content name" to "New name" + And I click on "Rename" "button" + And I navigate to "Reports > Live logs" in site administration + Then I should see "Content updated" \ No newline at end of file diff --git a/lib/tests/event/contentbank_content_created_test.php b/lib/tests/event/contentbank_content_created_test.php new file mode 100644 index 00000000000..0e381b9e6d3 --- /dev/null +++ b/lib/tests/event/contentbank_content_created_test.php @@ -0,0 +1,77 @@ +. + +/** + * Content bank created event tests. + * + * @package core + * @category test + * @copyright 2020 Amaia Anabitarte + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace core\event; + +/** + * Test for content bank created event. + * + * @package core + * @category test + * @copyright 2020 Amaia Anabitarte + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @coversDefaultClass \core\event\contentbank_content_created + */ +class contentbank_content_created_testcase extends \advanced_testcase { + + /** + * Setup to ensure that fixtures are loaded. + */ + public static function setUpBeforeClass() { + global $CFG; + + require_once($CFG->dirroot . '/contentbank/tests/fixtures/testable_contenttype.php'); + require_once($CFG->dirroot . '/contentbank/tests/fixtures/testable_content.php'); + } + + /** + * Test the content created event. + * + * @covers ::create_from_record + */ + public function test_content_created() { + + $this->resetAfterTest(); + $this->setAdminUser(); + + // Save the system context. + $systemcontext = \context_system::instance(); + + // Trigger and capture the event when creating a content. + $sink = $this->redirectEvents(); + + // Create a content bank content. + $generator = $this->getDataGenerator()->get_plugin_generator('core_contentbank'); + $contents = $generator->generate_contentbank_data('contenttype_testable', 1); + $content = array_shift($contents); + + $events = $sink->get_events(); + $event = reset($events); + + // Check that the event data is valid. + $this->assertInstanceOf('\core\event\contentbank_content_created', $event); + $this->assertEquals($systemcontext, $event->get_context()); + } +} diff --git a/lib/tests/event/contentbank_content_deleted_test.php b/lib/tests/event/contentbank_content_deleted_test.php new file mode 100644 index 00000000000..20c7517d846 --- /dev/null +++ b/lib/tests/event/contentbank_content_deleted_test.php @@ -0,0 +1,83 @@ +. + +/** + * Content bank deleted event tests. + * + * @package core + * @category test + * @copyright 2020 Amaia Anabitarte + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace core\event; + +/** + * Test for content bank deleted event. + * + * @package core + * @category test + * @copyright 2020 Amaia Anabitarte + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @coversDefaultClass \core\event\contentbank_content_deleted + */ +class contentbank_content_deleted_testcase extends \advanced_testcase { + + /** + * Setup to ensure that fixtures are loaded. + */ + public static function setUpBeforeClass() { + global $CFG; + + require_once($CFG->dirroot . '/contentbank/tests/fixtures/testable_contenttype.php'); + require_once($CFG->dirroot . '/contentbank/tests/fixtures/testable_content.php'); + } + + /** + * Test the content deleted event + * + * @covers ::create_from_record + */ + public function test_content_deleted() { + global $DB; + + $this->resetAfterTest(); + $this->setAdminUser(); + + // Save the system context. + $systemcontext = \context_system::instance(); + + // Create a content bank content. + $generator = $this->getDataGenerator()->get_plugin_generator('core_contentbank'); + $contents = $generator->generate_contentbank_data('contenttype_testable', 3); + $content = array_shift($contents); + $this->assertEquals(3, $DB->count_records('contentbank_content')); + + $classname = '\\contenttype_testable\\contenttype'; + $contentype = new $classname($systemcontext); + + // Trigger and capture the event for deleting a content. + $sink = $this->redirectEvents(); + $contentype->delete_content($content); + $events = $sink->get_events(); + $event = reset($events); + + // Check that the content was deleted and the event data is valid. + $this->assertEquals(2, $DB->count_records('contentbank_content')); + $this->assertInstanceOf('\core\event\contentbank_content_deleted', $event); + $this->assertEquals(\context_system::instance(), $event->get_context()); + } +} diff --git a/lib/tests/event/contentbank_content_updated_test.php b/lib/tests/event/contentbank_content_updated_test.php new file mode 100644 index 00000000000..b6aeae790d3 --- /dev/null +++ b/lib/tests/event/contentbank_content_updated_test.php @@ -0,0 +1,82 @@ +. + +/** + * Content bank updated event tests. + * + * @package core + * @category test + * @copyright 2020 Amaia Anabitarte + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace core\event; + +/** + * Test for content bank updated event. + * + * @package core + * @category test + * @copyright 2020 Amaia Anabitarte + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @coversDefaultClass \core\event\contentbank_content_updated + */ +class contentbank_content_updated_testcase extends \advanced_testcase { + + /** + * Setup to ensure that fixtures are loaded. + */ + public static function setUpBeforeClass() { + global $CFG; + + require_once($CFG->dirroot . '/contentbank/tests/fixtures/testable_contenttype.php'); + require_once($CFG->dirroot . '/contentbank/tests/fixtures/testable_content.php'); + } + + /** + * Test the content updated event. + * + * @covers ::create_from_record + */ + public function test_content_updated() { + + $this->resetAfterTest(); + $this->setAdminUser(); + + // Save the system context. + $systemcontext = \context_system::instance(); + + // Create a content bank content. + $generator = $this->getDataGenerator()->get_plugin_generator('core_contentbank'); + $contents = $generator->generate_contentbank_data('contenttype_testable', 1); + $content = array_shift($contents); + + // Store the name before we change it. + $oldname = $content->get_name(); + + // Trigger and capture the event when renaming a content. + $sink = $this->redirectEvents(); + + $newname = "New name"; + $content->set_name($newname); + $events = $sink->get_events(); + $event = reset($events); + + // Check that the event data is valid. + $this->assertInstanceOf('\core\event\contentbank_content_updated', $event); + $this->assertEquals($systemcontext, $event->get_context()); + } +} diff --git a/lib/tests/event/contentbank_content_uploaded_test.php b/lib/tests/event/contentbank_content_uploaded_test.php new file mode 100644 index 00000000000..93e6d7d045d --- /dev/null +++ b/lib/tests/event/contentbank_content_uploaded_test.php @@ -0,0 +1,94 @@ +. + +/** + * Content bank uploaded event tests. + * + * @package core + * @category test + * @copyright 2020 Amaia Anabitarte + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace core\event; + +use core_contentbank\contentbank; + +/** + * Test for content bank uploaded event. + * + * @package core + * @category test + * @copyright 2020 Amaia Anabitarte + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @coversDefaultClass \core\event\contentbank_content_uploaded + */ +class contentbank_content_uploaded_testcase extends \advanced_testcase { + + /** + * Setup to ensure that fixtures are loaded. + */ + public static function setUpBeforeClass() { + global $CFG; + + require_once($CFG->dirroot . '/contentbank/tests/fixtures/testable_contenttype.php'); + require_once($CFG->dirroot . '/contentbank/tests/fixtures/testable_content.php'); + } + + /** + * Test the content created event. + * + * @covers ::create_from_record + */ + public function test_content_created() { + global $USER; + + $this->resetAfterTest(); + $this->setAdminUser(); + $systemcontext = \context_system::instance(); + + // Create a dummy H5P file. + $dummyh5p = array( + 'contextid' => $systemcontext->id, + 'component' => 'contentbank', + 'filearea' => 'public', + 'itemid' => 1, + 'filepath' => '/', + 'filename' => 'dummy_h5p.h5p' + ); + $fs = get_file_storage(); + $dummyh5pfile = $fs->create_file_from_string($dummyh5p, 'Dummy H5Pcontent'); + + // Trigger and capture the event when creating content from a file. + $sink = $this->redirectEvents(); + $cb = new contentbank(); + $cb->create_content_from_file($systemcontext, $USER->id, $dummyh5pfile); + + // Both uploaded and created events are raised. + $events = $sink->get_events(); + $this->assertCount(2, $events); + + // First the created content event has been raised. + $event = array_shift($events); + $this->assertInstanceOf('\core\event\contentbank_content_created', $event); + $this->assertEquals($systemcontext, $event->get_context()); + + // Second the uploaded content event has been raised. + $event = array_pop($events); + $this->assertInstanceOf('\core\event\contentbank_content_uploaded', $event); + $this->assertEquals($systemcontext, $event->get_context()); + } +} diff --git a/lib/tests/event/contentbank_content_viewed_test.php b/lib/tests/event/contentbank_content_viewed_test.php new file mode 100644 index 00000000000..acc7e53d521 --- /dev/null +++ b/lib/tests/event/contentbank_content_viewed_test.php @@ -0,0 +1,79 @@ +. + +/** + * Content bank viewed event tests. + * + * @package core + * @category test + * @copyright 2020 Amaia Anabitarte + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace core\event; + +/** + * Test for content bank viewed event. + * + * @package core + * @category test + * @copyright 2020 Amaia Anabitarte + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @coversDefaultClass \core\event\contentbank_content_viewed + */ +class contentbank_content_viewed_testcase extends \advanced_testcase { + + /** + * Setup to ensure that fixtures are loaded. + */ + public static function setUpBeforeClass() { + global $CFG; + + require_once($CFG->dirroot . '/contentbank/tests/fixtures/testable_contenttype.php'); + require_once($CFG->dirroot . '/contentbank/tests/fixtures/testable_content.php'); + } + + /** + * Test the content updated event. + * + * @covers ::create_from_record + */ + public function test_content_updated() { + + $this->resetAfterTest(); + $this->setAdminUser(); + + // Save the system context. + $systemcontext = \context_system::instance(); + + // Create a content bank content. + $generator = $this->getDataGenerator()->get_plugin_generator('core_contentbank'); + $contents = $generator->generate_contentbank_data('contenttype_testable', 1); + $content = array_shift($contents); + + // Trigger and capture the content viewed event. + $sink = $this->redirectEvents(); + $eventtotrigger = \core\event\contentbank_content_viewed::create_from_record($content->get_content()); + $eventtotrigger->trigger(); + + $events = $sink->get_events(); + $event = reset($events); + + // Check that the event data is valid. + $this->assertInstanceOf('\core\event\contentbank_content_viewed', $event); + $this->assertEquals($systemcontext, $event->get_context()); + } +}