diff --git a/completion/tests/behat/completion_no_calendar_capabilities.feature b/completion/tests/behat/completion_no_calendar_capabilities.feature new file mode 100644 index 00000000000..f690f76e556 --- /dev/null +++ b/completion/tests/behat/completion_no_calendar_capabilities.feature @@ -0,0 +1,44 @@ +@core @core_completion +Feature: Completion with no calendar capabilites + In order to allow work effectively + As a teacher + I need to be able to create activities with completion enabled without calendar capabilities + + Background: + Given the following "courses" exist: + | fullname | shortname | category | groupmode | enablecompletion | + | Course 1 | C1 | 0 | 1 | 1 | + And the following "users" exist: + | username | firstname | lastname | email | + | teacher1 | Teacher | 1 | teacher1@example.com | + And the following "course enrolments" exist: + | user | course | role | + | teacher1 | C1 | editingteacher | + And I log in as "admin" + And I am on "Course 1" course homepage + And I navigate to "Users > Permissions" in current page administration + And I override the system permissions of "Teacher" role with: + | capability | permission | + | moodle/calendar:manageentries | Prohibit | + And I log out + + Scenario: Editing completion date + Given I log in as "admin" + And I am on "Course 1" course homepage with editing mode on + When I add a "Forum" to section "1" and I fill the form with: + | Forum name | Test forum name | + | Description | Test forum description | + | Completion tracking | Show activity as complete when conditions are met | + | id_completionexpected_enabled | 1 | + | id_completionexpected_day | 1 | + | id_completionexpected_month | 1 | + | id_completionexpected_year | 2017 | + And I log out + When I log in as "teacher1" + And I am on "Course 1" course homepage with editing mode on + And I follow "Test forum name" + And I navigate to "Edit settings" in current page administration + And I set the following fields to these values: + | id_completionexpected_year | 2018 | + And I press "Save and return to course" + Then I should see "Test forum name" diff --git a/completion/tests/capabilities_test.php b/completion/tests/capabilities_test.php new file mode 100644 index 00000000000..5dd4239e955 --- /dev/null +++ b/completion/tests/capabilities_test.php @@ -0,0 +1,57 @@ +. + +/** + * Tests that completion works without requiring unnecessary capabilities. + * + * @package core_completion + * @copyright 2018 University of Nottingham + * @author Neill Magill + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +/** + * Tests that completion works without requiring unnecessary capabilities. + * + * @package core_completion + * @copyright 2018 University of Nottingham + * @author Neill Magill + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class core_completion_capabilities_testcase extends advanced_testcase { + /** + * A user who does not have capabilities to add events to the calendar should be able to create activities. + */ + public function test_creation_with_no_calendar_capabilities() { + $this->resetAfterTest(); + $course = self::getDataGenerator()->create_course(['enablecompletion' => 1]); + $context = context_course::instance($course->id); + $user = self::getDataGenerator()->create_and_enrol($course, 'editingteacher'); + $roleid = self::getDataGenerator()->create_role(); + self::getDataGenerator()->role_assign($roleid, $user->id, $context->id); + assign_capability('moodle/calendar:manageentries', CAP_PROHIBIT, $roleid, $context, true); + $generator = self::getDataGenerator()->get_plugin_generator('mod_forum'); + // Create an instance as a user without the calendar capabilities. + $this->setUser($user); + $params = array( + 'course' => $course->id, + 'completionexpected' => time() + 2000, + ); + $generator->create_instance($params); + } +}