MDL-59614 course: Behat tests for activity navigation
authorJun Pataleta <jun@moodle.com>
Mon, 31 Jul 2017 11:05:11 +0000 (19:05 +0800)
committerJun Pataleta <jun@moodle.com>
Mon, 7 Aug 2017 05:29:31 +0000 (13:29 +0800)
Part of MDL-59313.

course/tests/behat/activity_navigation.feature [new file with mode: 0644]
course/tests/behat/activity_navigation_with_restrictions.feature [new file with mode: 0644]

diff --git a/course/tests/behat/activity_navigation.feature b/course/tests/behat/activity_navigation.feature
new file mode 100644 (file)
index 0000000..dff4435
--- /dev/null
@@ -0,0 +1,289 @@
+@core @core_course
+Feature: Activity navigation
+  In order to quickly switch between activities
+  As a user
+  I need to use the activity navigation controls in activities
+
+  Background:
+    Given the following "users" exist:
+      | username  | firstname  | lastname  | email                 |
+      | teacher1  | Teacher    | 1         | teacher1@example.com  |
+      | student1  | Student    | 1         | student1@example.com  |
+    And the following "courses" exist:
+      | fullname | shortname | format |
+      | Course 1 | C1        | topics |
+      | Course 2 | C2        | topics |
+    And the following "course enrolments" exist:
+      | user      | course  | role            |
+      | student1  | C1      | student         |
+      | teacher1  | C1      | editingteacher  |
+      | student1  | C2      | student         |
+    And the following "activities" exist:
+      | activity   | name         | intro                       | course | idnumber  | section |
+      | assign     | Assignment 1 | Test assignment description | C1     | assign1   | 0       |
+      | book       | Book 1       | Test book description       | C1     | book1     | 0       |
+      | chat       | Chat 1       | Test chat description       | C1     | chat1     | 0       |
+      | choice     | Choice 1     | Test choice description     | C1     | choice1   | 1       |
+      | data       | Database 1   | Test database description   | C1     | data1     | 1       |
+      | feedback   | Feedback 1   | Test feedback description   | C1     | feedback1 | 1       |
+      | folder     | Folder 1     | Test folder description     | C1     | folder1   | 2       |
+      | forum      | Forum 1      | Test forum description      | C1     | forum1    | 2       |
+      | glossary   | Glossary 1   | Test glossary description   | C1     | glossary1 | 2       |
+      | imscp      | Imscp 1      | Test imscp description      | C1     | imscp1    | 3       |
+      | label      | Label 1      | Test label description      | C1     | label1    | 3       |
+      | lesson     | Lesson 1     | Test lesson description     | C1     | lesson1   | 3       |
+      | lti        | Lti 1        | Test lti description        | C1     | lti1      | 4       |
+      | page       | Page 1       | Test page description       | C1     | page1     | 4       |
+      | quiz       | Quiz 1       | Test quiz description       | C1     | quiz1     | 4       |
+      | resource   | Resource 1   | Test resource description   | C1     | resource1 | 5       |
+      | scorm      | Scorm 1      | Test scorm description      | C1     | scorm1    | 5       |
+      | survey     | Survey 1     | Test survey description     | C1     | survey1   | 5       |
+      | url        | Url 1        | Test url description        | C1     | url1      | 6       |
+      | wiki       | Wiki 1       | Test wiki description       | C1     | wiki1     | 6       |
+      | workshop   | Workshop 1   | Test workshop description   | C1     | workshop1 | 6       |
+      | assign     | Assignment 1 | Test assignment description | C2     | assign21  | 0       |
+    And I log in as "admin"
+    And I set the following administration settings values:
+      | allowstealth | 1 |
+    And I am on "Course 1" course homepage with editing mode on
+    # Stealth activity.
+    And I click on "Hide" "link" in the "Forum 1" activity
+    And I click on "Make available" "link" in the "Forum 1" activity
+    # Hidden activity.
+    And I click on "Hide" "link" in the "Glossary 1" activity
+    # Hidden section.
+    And I hide section "5"
+    # Set up book.
+    And I follow "Book 1"
+    And I should see "Add new chapter"
+    And I set the following fields to these values:
+      | Chapter title | Chapter 1                             |
+      | Content       | In the beginning... blah, blah, blah. |
+    And I press "Save changes"
+    And I log out
+
+  Scenario: Step through activities in the course as a teacher.
+    Given I log in as "teacher1"
+    And I am on "Course 1" course homepage
+    When I follow "Assignment 1"
+    # The first activity won't have the previous activity link.
+    Then "#prev-activity-link" "css_element" should not exist
+    And I should see "Book 1" in the "#next-activity-link" "css_element"
+    And I follow "Book 1"
+    And I should see "Assignment" in the "#prev-activity-link" "css_element"
+    And I should see "Chat 1" in the "#next-activity-link" "css_element"
+    And I follow "Chat 1"
+    And I should see "Book 1" in the "#prev-activity-link" "css_element"
+    And I should see "Choice 1" in the "#next-activity-link" "css_element"
+    And I follow "Choice 1"
+    And I should see "Chat 1" in the "#prev-activity-link" "css_element"
+    And I should see "Database 1" in the "#next-activity-link" "css_element"
+    And I follow "Database 1"
+    And I should see "Choice 1" in the "#prev-activity-link" "css_element"
+    And I should see "Feedback 1" in the "#next-activity-link" "css_element"
+    And I follow "Feedback 1"
+    And I should see "Database 1" in the "#prev-activity-link" "css_element"
+    # The next link will be Folder 1 because Forum 1 is in stealth mode.
+    And I should see "Folder 1" in the "#next-activity-link" "css_element"
+    And I follow "Folder 1"
+    And I should see "Feedback 1" in the "#prev-activity-link" "css_element"
+    # Hidden activity will have a '(hidden)' text within the activity link.
+    And I should see "Glossary 1 (hidden)" in the "#next-activity-link" "css_element"
+    And I follow "Glossary 1 (hidden)"
+    And I should see "Folder 1" in the "#prev-activity-link" "css_element"
+    And I should see "Imscp 1" in the "#next-activity-link" "css_element"
+    And I follow "Imscp 1"
+    And I should see "Glossary 1" in the "#prev-activity-link" "css_element"
+    # The next link will be Lesson 1 because Label 1 doesn't have a view URL.
+    And I should see "Lesson 1" in the "#next-activity-link" "css_element"
+    And I follow "Lesson 1"
+    And I should see "Imscp 1" in the "#prev-activity-link" "css_element"
+    And I should see "Lti 1" in the "#next-activity-link" "css_element"
+    And I follow "Lti 1"
+    And I should see "Lesson 1" in the "#prev-activity-link" "css_element"
+    And I should see "Page 1" in the "#next-activity-link" "css_element"
+    And I follow "Page 1"
+    And I should see "Lti 1" in the "#prev-activity-link" "css_element"
+    And I should see "Quiz 1" in the "#next-activity-link" "css_element"
+    And I follow "Quiz 1"
+    And I should see "Page 1" in the "#prev-activity-link" "css_element"
+    # Hidden sections will have the activities render with the '(hidden)' text.
+    And I should see "Resource 1 (hidden)" in the "#next-activity-link" "css_element"
+    And I follow "Resource 1 (hidden)"
+    And I should see "Quiz 1" in the "#prev-activity-link" "css_element"
+    And I should see "Scorm 1 (hidden)" in the "#next-activity-link" "css_element"
+    And I follow "Scorm 1 (hidden)"
+    And I should see "Resource 1 (hidden)" in the "#prev-activity-link" "css_element"
+    And I should see "Survey 1 (hidden)" in the "#next-activity-link" "css_element"
+    And I follow "Survey 1 (hidden)"
+    And I should see "Scorm 1 (hidden)" in the "#prev-activity-link" "css_element"
+    And I should see "Url 1" in the "#next-activity-link" "css_element"
+    And I follow "Url 1"
+    And I should see "Survey 1 (hidden)" in the "#prev-activity-link" "css_element"
+    And I should see "Wiki 1" in the "#next-activity-link" "css_element"
+    And I follow "Wiki 1"
+    And I should see "Url 1" in the "#prev-activity-link" "css_element"
+    And I should see "Workshop 1" in the "#next-activity-link" "css_element"
+    And I follow "Workshop 1"
+    And I should see "Wiki 1" in the "#prev-activity-link" "css_element"
+    # The last activity won't have the next activity link.
+    And "#next-activity-link" "css_element" should not exist
+
+  Scenario: Step through activities in the course as a student.
+    Given I log in as "student1"
+    And I am on "Course 1" course homepage
+    When I follow "Assignment 1"
+    # The first activity won't have the previous activity link.
+    Then "#prev-activity-link" "css_element" should not exist
+    And I should see "Book 1" in the "#next-activity-link" "css_element"
+    And I follow "Book 1"
+    And I should see "Assignment" in the "#prev-activity-link" "css_element"
+    And I should see "Chat 1" in the "#next-activity-link" "css_element"
+    And I follow "Chat 1"
+    And I should see "Book 1" in the "#prev-activity-link" "css_element"
+    And I should see "Choice 1" in the "#next-activity-link" "css_element"
+    And I follow "Choice 1"
+    And I should see "Chat 1" in the "#prev-activity-link" "css_element"
+    And I should see "Database 1" in the "#next-activity-link" "css_element"
+    And I follow "Database 1"
+    And I should see "Choice 1" in the "#prev-activity-link" "css_element"
+    And I should see "Feedback 1" in the "#next-activity-link" "css_element"
+    And I follow "Feedback 1"
+    And I should see "Database 1" in the "#prev-activity-link" "css_element"
+    # The next link will be Folder 1 because Forum 1 is in stealth mode.
+    And I should see "Folder 1" in the "#next-activity-link" "css_element"
+    And I follow "Folder 1"
+    And I should see "Feedback 1" in the "#prev-activity-link" "css_element"
+    # The next link will be Imscp 1 because hidden activities are not shown to students.
+    And I should see "Imscp 1" in the "#next-activity-link" "css_element"
+    And I follow "Imscp 1"
+    And I should see "Folder 1" in the "#prev-activity-link" "css_element"
+    # The next link will be Lesson 1 because Label 1 doesn't have a view URL.
+    And I should see "Lesson 1" in the "#next-activity-link" "css_element"
+    And I follow "Lesson 1"
+    And I should see "Imscp 1" in the "#prev-activity-link" "css_element"
+    And I should see "Lti 1" in the "#next-activity-link" "css_element"
+    And I follow "Lti 1"
+    And I should see "Lesson 1" in the "#prev-activity-link" "css_element"
+    And I should see "Page 1" in the "#next-activity-link" "css_element"
+    And I follow "Page 1"
+    And I should see "Lti 1" in the "#prev-activity-link" "css_element"
+    And I should see "Quiz 1" in the "#next-activity-link" "css_element"
+    And I follow "Quiz 1"
+    And I should see "Page 1" in the "#prev-activity-link" "css_element"
+    # Hidden sections will have the activities hidden so the links won't be available to students.
+    And I should see "Url 1" in the "#next-activity-link" "css_element"
+    And I follow "Url 1"
+    And I should see "Quiz 1" in the "#prev-activity-link" "css_element"
+    And I should see "Wiki 1" in the "#next-activity-link" "css_element"
+    And I follow "Wiki 1"
+    And I should see "Url 1" in the "#prev-activity-link" "css_element"
+    And I should see "Workshop 1" in the "#next-activity-link" "css_element"
+    And I follow "Workshop 1"
+    And I should see "Wiki 1" in the "#prev-activity-link" "css_element"
+    # The last activity won't have the next activity link.
+    And "#next-activity-link" "css_element" should not exist
+
+  Scenario: Jump to another activity as a teacher
+    Given I log in as "teacher1"
+    When I am on "Course 1" course homepage
+    And I follow "Assignment 1"
+    Then "Jump to..." "field" should exist
+    # The current activity will not be listed.
+    And the "Jump to..." select box should not contain "Assignment 1"
+    # Stealth activities will not be listed.
+    And the "Jump to..." select box should not contain "Forum 1"
+    # Resources without view URL (e.g. labels) will not be listed.
+    And the "Jump to..." select box should not contain "Label 1"
+    # Check drop down menu contents.
+    And the "Jump to..." select box should contain "Book 1"
+    And the "Jump to..." select box should contain "Chat 1"
+    And the "Jump to..." select box should contain "Choice 1"
+    And the "Jump to..." select box should contain "Database 1"
+    And the "Jump to..." select box should contain "Feedback 1"
+    And the "Jump to..." select box should contain "Folder 1"
+    And the "Jump to..." select box should contain "Imscp 1"
+    And the "Jump to..." select box should contain "Lesson 1"
+    And the "Jump to..." select box should contain "Lti 1"
+    And the "Jump to..." select box should contain "Page 1"
+    And the "Jump to..." select box should contain "Quiz 1"
+    And the "Jump to..." select box should contain "Url 1"
+    And the "Jump to..." select box should contain "Wiki 1"
+    And the "Jump to..." select box should contain "Workshop 1"
+    # Hidden activities will be rendered with a '(hidden)' text.
+    And the "Jump to..." select box should contain "Glossary 1 (hidden)"
+    # Activities in hidden sections will be rendered with a '(hidden)' text.
+    And the "Jump to..." select box should contain "Resource 1 (hidden)"
+    And the "Jump to..." select box should contain "Scorm 1 (hidden)"
+    And the "Jump to..." select box should contain "Survey 1 (hidden)"
+    # Jump to an activity somewhere in the middle.
+    When I select "Page 1" from the "Jump to..." singleselect
+    Then I should see "Page 1"
+    And I should see "Lti 1" in the "#prev-activity-link" "css_element"
+    And I should see "Quiz 1" in the "#next-activity-link" "css_element"
+    # Jump to the first activity.
+    And I select "Assignment 1" from the "Jump to..." singleselect
+    And I should see "Book 1" in the "#next-activity-link" "css_element"
+    But "#prev-activity-link" "css_element" should not exist
+    # Jump to the last activity.
+    And I select "Workshop 1" from the "Jump to..." singleselect
+    And I should see "Wiki 1" in the "#prev-activity-link" "css_element"
+    But "#next-activity-link" "css_element" should not exist
+    # Jump to a hidden activity.
+    And I select "Glossary 1" from the "Jump to..." singleselect
+    And I should see "Folder 1" in the "#prev-activity-link" "css_element"
+    And I should see "Imscp 1" in the "#next-activity-link" "css_element"
+
+  Scenario: Jump to another activity as a student
+    Given I log in as "student1"
+    And I am on "Course 1" course homepage
+    And I follow "Assignment 1"
+    And "Jump to..." "field" should exist
+    # The current activity will not be listed.
+    And the "Jump to..." select box should not contain "Assignment 1"
+    # Stealth activities will not be listed for students.
+    And the "Jump to..." select box should not contain "Forum 1"
+    # Resources without view URL (e.g. labels) will not be listed.
+    And the "Jump to..." select box should not contain "Label 1"
+    # Hidden activities will not be listed for students.
+    And the "Jump to..." select box should not contain "Glossary 1"
+    # Activities in hidden sections will not be listed for students.
+    And the "Jump to..." select box should not contain "Resource 1"
+    And the "Jump to..." select box should not contain "Scorm 1"
+    And the "Jump to..." select box should not contain "Survey 1"
+    # Only activities visible to students will be listed.
+    And the "Jump to..." select box should contain "Book 1"
+    And the "Jump to..." select box should contain "Chat 1"
+    And the "Jump to..." select box should contain "Choice 1"
+    And the "Jump to..." select box should contain "Database 1"
+    And the "Jump to..." select box should contain "Feedback 1"
+    And the "Jump to..." select box should contain "Folder 1"
+    And the "Jump to..." select box should contain "Imscp 1"
+    And the "Jump to..." select box should contain "Lesson 1"
+    And the "Jump to..." select box should contain "Lti 1"
+    And the "Jump to..." select box should contain "Page 1"
+    And the "Jump to..." select box should contain "Quiz 1"
+    And the "Jump to..." select box should contain "Url 1"
+    And the "Jump to..." select box should contain "Wiki 1"
+    And the "Jump to..." select box should contain "Workshop 1"
+    # Jump to an activity somewhere in the middle.
+    When I select "Page 1" from the "Jump to..." singleselect
+    Then I should see "Page 1"
+    And I should see "Lti 1" in the "#prev-activity-link" "css_element"
+    And I should see "Quiz 1" in the "#next-activity-link" "css_element"
+    # Jump to the first activity.
+    And I select "Assignment 1" from the "Jump to..." singleselect
+    And I should see "Book 1" in the "#next-activity-link" "css_element"
+    But "#prev-activity-link" "css_element" should not exist
+    # Jump to the last activity.
+    And I select "Workshop 1" from the "Jump to..." singleselect
+    And I should see "Wiki 1" in the "#prev-activity-link" "css_element"
+    But "#next-activity-link" "css_element" should not exist
+
+  Scenario: Open an activity in a course that only has a single activity
+    Given I log in as "student1"
+    And I am on "Course 2" course homepage
+    And I follow "Assignment 1"
+    Then "#prev-activity-link" "css_element" should not exist
+    And "#next-activity-link" "css_element" should not exist
+    And "Jump to..." "field" should not exist
diff --git a/course/tests/behat/activity_navigation_with_restrictions.feature b/course/tests/behat/activity_navigation_with_restrictions.feature
new file mode 100644 (file)
index 0000000..e8b44ef
--- /dev/null
@@ -0,0 +1,62 @@
+@core @core_course
+Feature: Activity navigation involving activities with access restrictions
+  In order to quickly switch to another activity that has access restrictions
+  As a student
+  I need to be able to use the activity navigation feature to access the activity after satisfying its access conditions
+
+  Background:
+    Given the following "users" exist:
+      | username  | firstname  | lastname  | email                 |
+      | teacher1  | Teacher    | 1         | teacher1@example.com  |
+      | student1  | Student    | 1         | student1@example.com  |
+    And the following "courses" exist:
+      | fullname | shortname | format | enablecompletion |
+      | Course 1 | C1        | topics | 1                |
+    And the following "course enrolments" exist:
+      | user      | course  | role            |
+      | student1  | C1      | student         |
+      | teacher1  | C1      | editingteacher  |
+    And the following "activities" exist:
+      | activity  | name    | intro                   | course | idnumber | section |
+      | page      | Page 1  | Test page description 1 | C1     | page1    | 0       |
+      | page      | Page 2  | Test page description 2 | C1     | page2    | 0       |
+      | page      | Page 3  | Test page description 3 | C1     | page3    | 0       |
+      | page      | Page 4  | Test page description 4 | C1     | page4    | 0       |
+    And I log in as "teacher1"
+    And I am on "Course 1" course homepage with editing mode on
+    # Set completion for Page 2.
+    And I open "Page 2" actions menu
+    And I click on "Edit settings" "link" in the "Page 2" activity
+    And I expand all fieldsets
+    And I set the field "Completion tracking" to "Show activity as complete when conditions are met"
+    And I set the following fields to these values:
+      | Completion tracking | Show activity as complete when conditions are met |
+      | Require view        | 1                                                 |
+    And I press "Save and return to course"
+    # Require Page 2 to be completed first before Page 3 can be accessed.
+    And I open "Page 3" actions menu
+    And I click on "Edit settings" "link" in the "Page 3" activity
+    And I expand all fieldsets
+    And I click on "Add restriction..." "button"
+    And I click on "Activity completion" "button" in the "Add restriction..." "dialogue"
+    And I set the field "Activity or resource" to "Page 2"
+    And I press "Save and return to course"
+    And I log out
+
+  @javascript
+  Scenario: Activity navigation involving activities with access restrictions
+    Given I log in as "student1"
+    And I am on "Course 1" course homepage
+    When I follow "Page 1"
+    Then I should see "Page 2" in the "#next-activity-link" "css_element"
+    # Activity that has access restriction should not show up in the dropdown.
+    And the "Jump to..." select box should not contain "Page 3"
+    And I select "Page 4" from the "Jump to..." singleselect
+    # Page 2 should be shown in the previous link since Page 3 is not yet available.
+    And I should see "Page 2" in the "#prev-activity-link" "css_element"
+    And the "Jump to..." select box should not contain "Page 3"
+    # Navigate to Page 2.
+    And I follow "Page 2"
+    # Since Page 2 has now been viewed and deemed completed, Page 3 can now be accessed.
+    And I should see "Page 3" in the "#next-activity-link" "css_element"
+    And the "Jump to..." select box should contain "Page 3"