From de198dce1bc30a77f689f039a6e80e2af04f4da5 Mon Sep 17 00:00:00 2001 From: Neill Magill Date: Fri, 3 Aug 2018 14:26:57 +0100 Subject: [PATCH] MDL-62944 activities: Test adding activities with no calendar capability --- .../assign_no_calendar_capabilities.feature | 58 +++++++++++++++++++ mod/assign/tests/lib_test.php | 25 ++++++++ .../chat_no_calendar_capabilities.feature | 43 ++++++++++++++ mod/chat/tests/lib_test.php | 21 +++++++ .../choice_no_calendar_capabilities.feature | 50 ++++++++++++++++ mod/choice/tests/lib_test.php | 23 ++++++++ .../data_no_calendar_capabilities.feature | 58 +++++++++++++++++++ mod/data/tests/lib_test.php | 25 ++++++++ .../feedback_no_calendar_capabilities.feature | 48 +++++++++++++++ mod/feedback/tests/lib_test.php | 23 ++++++++ .../lesson_no_calendar_capabilities.feature | 48 +++++++++++++++ mod/lesson/tests/lib_test.php | 23 ++++++++ .../quiz_no_calendar_capabilities.feature | 48 +++++++++++++++ mod/quiz/tests/lib_test.php | 23 ++++++++ .../scorm_no_calendar_capabilities.feature | 52 +++++++++++++++++ mod/scorm/tests/lib_test.php | 23 ++++++++ 16 files changed, 591 insertions(+) create mode 100644 mod/assign/tests/behat/assign_no_calendar_capabilities.feature create mode 100644 mod/chat/tests/behat/chat_no_calendar_capabilities.feature create mode 100644 mod/choice/tests/behat/choice_no_calendar_capabilities.feature create mode 100644 mod/data/tests/behat/data_no_calendar_capabilities.feature create mode 100644 mod/feedback/tests/behat/feedback_no_calendar_capabilities.feature create mode 100644 mod/lesson/tests/behat/lesson_no_calendar_capabilities.feature create mode 100644 mod/quiz/tests/behat/quiz_no_calendar_capabilities.feature create mode 100644 mod/scorm/tests/behat/scorm_no_calendar_capabilities.feature diff --git a/mod/assign/tests/behat/assign_no_calendar_capabilities.feature b/mod/assign/tests/behat/assign_no_calendar_capabilities.feature new file mode 100644 index 00000000000..e97a77db693 --- /dev/null +++ b/mod/assign/tests/behat/assign_no_calendar_capabilities.feature @@ -0,0 +1,58 @@ +@mod @mod_assign +Feature: Assignment with no calendar capabilites + In order to allow work effectively + As a teacher + I need to be able to create assignments even when I cannot edit calendar events + + Background: + Given the following "courses" exist: + | fullname | shortname | category | groupmode | + | Course 1 | C1 | 0 | 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 an assignment + Given I log in as "admin" + And I am on "Course 1" course homepage with editing mode on + When I add a "Assignment" to section "1" and I fill the form with: + | Assignment name | Test assignment name | + | Description | Test assignment description | + | id_allowsubmissionsfromdate_enabled | 1 | + | id_allowsubmissionsfromdate_day | 1 | + | id_allowsubmissionsfromdate_month | 1 | + | id_allowsubmissionsfromdate_year | 2017 | + | id_duedate_enabled | 1 | + | id_duedate_day | 1 | + | id_duedate_month | 2 | + | id_duedate_year | 2017 | + | id_cutoffdate_enabled | 1 | + | id_cutoffdate_day | 2 | + | id_cutoffdate_month | 2 | + | id_cutoffdate_year | 2017 | + | id_gradingduedate_enabled | 1 | + | id_gradingduedate_day | 1 | + | id_gradingduedate_month | 3 | + | id_gradingduedate_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 assignment name" + And I navigate to "Edit settings" in current page administration + And I set the following fields to these values: + | id_allowsubmissionsfromdate_year | 2018 | + | id_duedate_year | 2018 | + | id_cutoffdate_year | 2018 | + | id_gradingduedate_year | 2018 | + And I press "Save and return to course" + Then I should see "Test assignment name" diff --git a/mod/assign/tests/lib_test.php b/mod/assign/tests/lib_test.php index 54054b3f256..759f534818a 100644 --- a/mod/assign/tests/lib_test.php +++ b/mod/assign/tests/lib_test.php @@ -1472,4 +1472,29 @@ class mod_assign_lib_testcase extends advanced_testcase { // is changed. $this->assertNotEmpty($moduleupdatedevents); } + + /** + * A user who does not have capabilities to add events to the calendar should be able to create an assignment. + */ + public function test_creation_with_no_calendar_capabilities() { + $this->resetAfterTest(); + $course = self::getDataGenerator()->create_course(); + $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_assign'); + // Create an instance as a user without the calendar capabilities. + $this->setUser($user); + $time = time(); + $params = array( + 'course' => $course->id, + 'allowsubmissionsfromdate' => $time, + 'duedate' => $time + 500, + 'cutoffdate' => $time + 600, + 'gradingduedate' => $time + 700, + ); + $generator->create_instance($params); + } } diff --git a/mod/chat/tests/behat/chat_no_calendar_capabilities.feature b/mod/chat/tests/behat/chat_no_calendar_capabilities.feature new file mode 100644 index 00000000000..a9903493b4c --- /dev/null +++ b/mod/chat/tests/behat/chat_no_calendar_capabilities.feature @@ -0,0 +1,43 @@ +@mod @mod_chat +Feature: Chat with no calendar capabilites + In order to allow work effectively + As a teacher + I need to be able to create chats even when I cannot edit calendar events + + Background: + Given the following "courses" exist: + | fullname | shortname | category | groupmode | + | Course 1 | C1 | 0 | 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 a chat + Given I log in as "admin" + And I am on "Course 1" course homepage with editing mode on + When I add a "Chat" to section "1" and I fill the form with: + | Name of this chat room | Test chat name | + | Description | Test chat description | + | Repeat/publish session times | No repeats - publish the specified time only | + | id_chattime_day | 1 | + | id_chattime_month | 1 | + | id_chattime_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 chat name" + And I navigate to "Edit settings" in current page administration + And I set the following fields to these values: + | id_chattime_year | 2018 | + And I press "Save and return to course" + Then I should see "Test chat name" diff --git a/mod/chat/tests/lib_test.php b/mod/chat/tests/lib_test.php index 4edef1aea5a..6de2379f7eb 100644 --- a/mod/chat/tests/lib_test.php +++ b/mod/chat/tests/lib_test.php @@ -163,4 +163,25 @@ class mod_chat_lib_testcase extends advanced_testcase { return calendar_event::create($event); } + + /** + * A user who does not have capabilities to add events to the calendar should be able to create an chat. + */ + public function test_creation_with_no_calendar_capabilities() { + $this->resetAfterTest(); + $course = self::getDataGenerator()->create_course(); + $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_chat'); + // Create an instance as a user without the calendar capabilities. + $this->setUser($user); + $params = array( + 'course' => $course->id, + 'chattime' => time() + 500, + ); + $generator->create_instance($params); + } } diff --git a/mod/choice/tests/behat/choice_no_calendar_capabilities.feature b/mod/choice/tests/behat/choice_no_calendar_capabilities.feature new file mode 100644 index 00000000000..0f4554c7c78 --- /dev/null +++ b/mod/choice/tests/behat/choice_no_calendar_capabilities.feature @@ -0,0 +1,50 @@ +@mod @mod_choice +Feature: Choice with no calendar capabilites + In order to allow work effectively + As a teacher + I need to be able to create choices even when I cannot edit calendar events + + Background: + Given the following "courses" exist: + | fullname | shortname | category | groupmode | + | Course 1 | C1 | 0 | 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 a choice + Given I log in as "admin" + And I am on "Course 1" course homepage with editing mode on + When I add a "Choice" to section "1" and I fill the form with: + | Choice name | Test choice name | + | Description | Test choice description | + | option[0] | Option 1 | + | option[1] | Option 2 | + | id_timeopen_enabled | 1 | + | id_timeopen_day | 1 | + | id_timeopen_month | 1 | + | id_timeopen_year | 2017 | + | id_timeclose_enabled | 1 | + | id_timeclose_day | 1 | + | id_timeclose_month | 2 | + | id_timeclose_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 choice name" + And I navigate to "Edit settings" in current page administration + And I set the following fields to these values: + | id_timeopen_year | 2018 | + | id_timeclose_year | 2018 | + And I press "Save and return to course" + Then I should see "Test choice name" diff --git a/mod/choice/tests/lib_test.php b/mod/choice/tests/lib_test.php index eb452e16dc1..72a32fe3a97 100644 --- a/mod/choice/tests/lib_test.php +++ b/mod/choice/tests/lib_test.php @@ -979,4 +979,27 @@ class mod_choice_lib_testcase extends externallib_advanced_testcase { $this->expectException('moodle_exception'); choice_user_submit_response($optionids[1], $choicewithoptions, $user2->id, $course, $cm); } + + /** + * A user who does not have capabilities to add events to the calendar should be able to create an choice. + */ + public function test_creation_with_no_calendar_capabilities() { + $this->resetAfterTest(); + $course = self::getDataGenerator()->create_course(); + $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_choice'); + // Create an instance as a user without the calendar capabilities. + $this->setUser($user); + $time = time(); + $params = array( + 'course' => $course->id, + 'timeopen' => $time + 200, + 'timeclose' => $time + 500, + ); + $generator->create_instance($params); + } } diff --git a/mod/data/tests/behat/data_no_calendar_capabilities.feature b/mod/data/tests/behat/data_no_calendar_capabilities.feature new file mode 100644 index 00000000000..98d7d490311 --- /dev/null +++ b/mod/data/tests/behat/data_no_calendar_capabilities.feature @@ -0,0 +1,58 @@ +@mod @mod_data +Feature: Database with no calendar capabilites + In order to allow work effectively + As a teacher + I need to be able to create databases even when I cannot edit calendar events + + Background: + Given the following "courses" exist: + | fullname | shortname | category | groupmode | + | Course 1 | C1 | 0 | 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 a database + Given I log in as "admin" + And I am on "Course 1" course homepage with editing mode on + When I add a "Database" to section "1" and I fill the form with: + | Name | Test database name | + | Description | Test database description | + | id_timeavailablefrom_enabled | 1 | + | id_timeavailablefrom_day | 1 | + | id_timeavailablefrom_month | 1 | + | id_timeavailablefrom_year | 2017 | + | id_timeavailableto_enabled | 1 | + | id_timeavailableto_day | 1 | + | id_timeavailableto_month | 4 | + | id_timeavailableto_year | 2017 | + | id_timeviewfrom_enabled | 1 | + | id_timeviewfrom_day | 1 | + | id_timeviewfrom_month | 3 | + | id_timeviewfrom_year | 2017 | + | id_timeviewto_enabled | 1 | + | id_timeviewto_day | 1 | + | id_timeviewto_month | 4 | + | id_timeviewto_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 database name" + And I navigate to "Edit settings" in current page administration + And I set the following fields to these values: + | id_timeavailablefrom_year | 2018 | + | id_timeavailableto_year | 2018 | + | id_timeviewfrom_year | 2018 | + | id_timeviewto_year | 2018 | + And I press "Save and return to course" + Then I should see "Test database name" diff --git a/mod/data/tests/lib_test.php b/mod/data/tests/lib_test.php index 351879bb5cf..0117f8b01fd 100644 --- a/mod/data/tests/lib_test.php +++ b/mod/data/tests/lib_test.php @@ -1483,4 +1483,29 @@ class mod_data_lib_testcase extends advanced_testcase { $this->assertEquals(mod_data_get_completion_active_rule_descriptions($moddefaults), $activeruledescriptions); $this->assertEquals(mod_data_get_completion_active_rule_descriptions(new stdClass()), []); } + + /** + * A user who does not have capabilities to add events to the calendar should be able to create an database. + */ + public function test_creation_with_no_calendar_capabilities() { + $this->resetAfterTest(); + $course = self::getDataGenerator()->create_course(); + $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_data'); + // Create an instance as a user without the calendar capabilities. + $this->setUser($user); + $time = time(); + $params = array( + 'course' => $course->id, + 'timeavailablefrom' => $time + 200, + 'timeavailableto' => $time + 2000, + 'timeviewfrom' => $time + 400, + 'timeviewto' => $time + 2000, + ); + $generator->create_instance($params); + } } diff --git a/mod/feedback/tests/behat/feedback_no_calendar_capabilities.feature b/mod/feedback/tests/behat/feedback_no_calendar_capabilities.feature new file mode 100644 index 00000000000..bf348ad2c7a --- /dev/null +++ b/mod/feedback/tests/behat/feedback_no_calendar_capabilities.feature @@ -0,0 +1,48 @@ +@mod @mod_feedback +Feature: Feedback with no calendar capabilites + In order to allow work effectively + As a teacher + I need to be able to create feedbacks even when I cannot edit calendar events + + Background: + Given the following "courses" exist: + | fullname | shortname | category | groupmode | + | Course 1 | C1 | 0 | 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 a feedback + Given I log in as "admin" + And I am on "Course 1" course homepage with editing mode on + When I add a "Feedback" to section "1" and I fill the form with: + | Name | Test feedback name | + | Description | Test feedback description | + | id_timeopen_enabled | 1 | + | id_timeopen_day | 1 | + | id_timeopen_month | 1 | + | id_timeopen_year | 2017 | + | id_timeclose_enabled | 1 | + | id_timeclose_day | 1 | + | id_timeclose_month | 2 | + | id_timeclose_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 feedback name" + And I navigate to "Edit settings" in current page administration + And I set the following fields to these values: + | id_timeopen_year | 2018 | + | id_timeclose_year | 2018 | + And I press "Save and return to course" + Then I should see "Test feedback name" diff --git a/mod/feedback/tests/lib_test.php b/mod/feedback/tests/lib_test.php index 37cbf30e7b2..0990f403be6 100644 --- a/mod/feedback/tests/lib_test.php +++ b/mod/feedback/tests/lib_test.php @@ -852,4 +852,27 @@ class mod_feedback_lib_testcase extends advanced_testcase { // was successfully modified. $this->assertNotEmpty($moduleupdatedevents); } + + /** + * A user who does not have capabilities to add events to the calendar should be able to create an feedback. + */ + public function test_creation_with_no_calendar_capabilities() { + $this->resetAfterTest(); + $course = self::getDataGenerator()->create_course(); + $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_feedback'); + // Create an instance as a user without the calendar capabilities. + $this->setUser($user); + $time = time(); + $params = array( + 'course' => $course->id, + 'timeopen' => $time + 200, + 'timeclose' => $time + 2000, + ); + $generator->create_instance($params); + } } diff --git a/mod/lesson/tests/behat/lesson_no_calendar_capabilities.feature b/mod/lesson/tests/behat/lesson_no_calendar_capabilities.feature new file mode 100644 index 00000000000..80e5cf8f381 --- /dev/null +++ b/mod/lesson/tests/behat/lesson_no_calendar_capabilities.feature @@ -0,0 +1,48 @@ +@mod @mod_lesson +Feature: Lesson with no calendar capabilites + In order to allow work effectively + As a teacher + I need to be able to create lessons even when I cannot edit calendar events + + Background: + Given the following "courses" exist: + | fullname | shortname | category | groupmode | + | Course 1 | C1 | 0 | 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 a lesson + Given I log in as "admin" + And I am on "Course 1" course homepage with editing mode on + When I add a "Lesson" to section "1" and I fill the form with: + | Name | Test lesson name | + | Description | Test lesson description | + | id_available_enabled | 1 | + | id_available_day | 1 | + | id_available_month | 1 | + | id_available_year | 2017 | + | id_deadline_enabled | 1 | + | id_deadline_day | 1 | + | id_deadline_month | 2 | + | id_deadline_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 lesson name" + And I navigate to "Edit settings" in current page administration + And I set the following fields to these values: + | id_available_year | 2018 | + | id_deadline_year | 2018 | + And I press "Save and return to course" + Then I should see "Test lesson name" diff --git a/mod/lesson/tests/lib_test.php b/mod/lesson/tests/lib_test.php index 5cd91a22856..0d1005c97c2 100644 --- a/mod/lesson/tests/lib_test.php +++ b/mod/lesson/tests/lib_test.php @@ -441,4 +441,27 @@ class mod_lesson_lib_testcase extends advanced_testcase { $this->assertEquals(mod_lesson_get_completion_active_rule_descriptions($moddefaults), $activeruledescriptions); $this->assertEquals(mod_lesson_get_completion_active_rule_descriptions(new stdClass()), []); } + + /** + * A user who does not have capabilities to add events to the calendar should be able to create an lesson. + */ + public function test_creation_with_no_calendar_capabilities() { + $this->resetAfterTest(); + $course = self::getDataGenerator()->create_course(); + $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_lesson'); + // Create an instance as a user without the calendar capabilities. + $this->setUser($user); + $time = time(); + $params = array( + 'course' => $course->id, + 'available' => $time + 200, + 'deadline' => $time + 2000, + ); + $generator->create_instance($params); + } } diff --git a/mod/quiz/tests/behat/quiz_no_calendar_capabilities.feature b/mod/quiz/tests/behat/quiz_no_calendar_capabilities.feature new file mode 100644 index 00000000000..52b1f216b70 --- /dev/null +++ b/mod/quiz/tests/behat/quiz_no_calendar_capabilities.feature @@ -0,0 +1,48 @@ +@mod @mod_quiz +Feature: Quiz with no calendar capabilites + In order to allow work effectively + As a teacher + I need to be able to create quiz even when I cannot edit calendar events + + Background: + Given the following "courses" exist: + | fullname | shortname | category | groupmode | + | Course 1 | C1 | 0 | 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 a quiz + Given I log in as "admin" + And I am on "Course 1" course homepage with editing mode on + When I add a "Quiz" to section "1" and I fill the form with: + | Name | Test quiz name | + | Description | Test quiz description | + | id_timeopen_enabled | 1 | + | id_timeopen_day | 1 | + | id_timeopen_month | 1 | + | id_timeopen_year | 2017 | + | id_timeclose_enabled | 1 | + | id_timeclose_day | 1 | + | id_timeclose_month | 2 | + | id_timeclose_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 quiz name" + And I navigate to "Edit settings" in current page administration + And I set the following fields to these values: + | id_timeopen_year | 2018 | + | id_timeclose_year | 2018 | + And I press "Save and return to course" + Then I should see "Test quiz name" diff --git a/mod/quiz/tests/lib_test.php b/mod/quiz/tests/lib_test.php index 8a54c36eb93..65d8b56b111 100644 --- a/mod/quiz/tests/lib_test.php +++ b/mod/quiz/tests/lib_test.php @@ -736,4 +736,27 @@ class mod_quiz_lib_testcase extends advanced_testcase { $this->assertEquals(mod_quiz_get_completion_active_rule_descriptions($moddefaults), $activeruledescriptions); $this->assertEquals(mod_quiz_get_completion_active_rule_descriptions(new stdClass()), []); } + + /** + * A user who does not have capabilities to add events to the calendar should be able to create a quiz. + */ + public function test_creation_with_no_calendar_capabilities() { + $this->resetAfterTest(); + $course = self::getDataGenerator()->create_course(); + $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_quiz'); + // Create an instance as a user without the calendar capabilities. + $this->setUser($user); + $time = time(); + $params = array( + 'course' => $course->id, + 'timeopen' => $time + 200, + 'timeclose' => $time + 2000, + ); + $generator->create_instance($params); + } } diff --git a/mod/scorm/tests/behat/scorm_no_calendar_capabilities.feature b/mod/scorm/tests/behat/scorm_no_calendar_capabilities.feature new file mode 100644 index 00000000000..77cd7a036c5 --- /dev/null +++ b/mod/scorm/tests/behat/scorm_no_calendar_capabilities.feature @@ -0,0 +1,52 @@ +@mod @mod_scorm +Feature: Scorm with no calendar capabilites + In order to allow work effectively + As a teacher + I need to be able to create SCORM activities even when I cannot edit calendar events + + Background: + Given the following "courses" exist: + | fullname | shortname | category | groupmode | + | Course 1 | C1 | 0 | 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 + + @javascript @_file_upload @_switch_iframe + Scenario: Editing a chat + Given I log in as "admin" + And I am on "Course 1" course homepage with editing mode on + When I add a "SCORM package" to section "1" + And I set the following fields to these values: + | Name | Test scorm name | + | Description | Test scorm description | + | id_timeopen_enabled | 1 | + | id_timeopen_day | 1 | + | id_timeopen_month | 1 | + | id_timeopen_year | 2017 | + | id_timeclose_enabled | 1 | + | id_timeclose_day | 1 | + | id_timeclose_month | 2 | + | id_timeclose_year | 2017 | + And I upload "mod/scorm/tests/packages/singlesco_scorm12.zip" file to "Package file" filemanager + And I click on "Save and display" "button" + 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 scorm name" + And I navigate to "Edit settings" in current page administration + And I set the following fields to these values: + | id_timeopen_year | 2018 | + | id_timeclose_year | 2018 | + And I press "Save and return to course" + Then I should see "Test scorm name" diff --git a/mod/scorm/tests/lib_test.php b/mod/scorm/tests/lib_test.php index 9440e24d63d..094027b9e11 100644 --- a/mod/scorm/tests/lib_test.php +++ b/mod/scorm/tests/lib_test.php @@ -433,4 +433,27 @@ class mod_scorm_lib_testcase extends externallib_advanced_testcase { $this->assertEquals(mod_scorm_get_completion_active_rule_descriptions($moddefaults), $activeruledescriptions); $this->assertEquals(mod_scorm_get_completion_active_rule_descriptions(new stdClass()), []); } + + /** + * A user who does not have capabilities to add events to the calendar should be able to create a SCORM. + */ + public function test_creation_with_no_calendar_capabilities() { + $this->resetAfterTest(); + $course = self::getDataGenerator()->create_course(); + $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_scorm'); + // Create an instance as a user without the calendar capabilities. + $this->setUser($user); + $time = time(); + $params = array( + 'course' => $course->id, + 'timeopen' => $time + 200, + 'timeclose' => $time + 2000, + ); + $generator->create_instance($params); + } }