Merge branch 'MDL-68320-master' of git://github.com/lameze/moodle
[moodle.git] / user / tests / behat / filter_participants.feature
1 @core @core_user
2 Feature: Course participants can be filtered
3   In order to filter the list of course participants
4   As a user
5   I need to visit the course participants page and apply the appropriate filters
7   Background:
8     Given the following "courses" exist:
9       | fullname | shortname | groupmode |
10       | Course 1 | C1        |     1     |
11       | Course 2 | C2        |     0     |
12       | Course 3 | C3        |     0     |
13     And the following "users" exist:
14       | username | firstname | lastname | email                | idnumber | country | city   | maildisplay |
15       | student1 | Student   | 1        | student1@example.com | SID1     |         | SCITY1 | 0           |
16       | student2 | Student   | 2        | student2@example.com | SID2     | GB      | SCITY2 | 1           |
17       | student3 | Student   | 3        | student3@example.com | SID3     | AU      | SCITY3 | 0           |
18       | student4 | Student   | 4        | student4@example.com | SID4     | AT      | SCITY4 | 0           |
19       | teacher1 | Teacher   | 1        | teacher1@example.com | TID1     | US      | TCITY1 | 0           |
20     And the following "course enrolments" exist:
21       | user     | course | role           | status | timeend       |
22       | student1 | C1     | student        |    0   |               |
23       | student2 | C1     | student        |    1   |               |
24       | student3 | C1     | student        |    0   |               |
25       | student4 | C1     | student        |    0   | ##yesterday## |
26       | student1 | C2     | student        |    0   |               |
27       | student2 | C2     | student        |    0   |               |
28       | student3 | C2     | student        |    0   |               |
29       | student1 | C3     | student        |    0   |               |
30       | student2 | C3     | student        |    0   |               |
31       | student3 | C3     | student        |    0   |               |
32       | teacher1 | C1     | editingteacher |    0   |               |
33       | teacher1 | C2     | editingteacher |    0   |               |
34       | teacher1 | C3     | editingteacher |    0   |               |
35     And the following "groups" exist:
36       | name    | course | idnumber |
37       | Group 1 | C1     | G1       |
38       | Group 2 | C1     | G2       |
39       | Group A | C3     | GA       |
40       | Group B | C3     | GB       |
41     And the following "group members" exist:
42       | user     | group |
43       | student2 | G1    |
44       | student2 | G2    |
45       | student3 | G2    |
46       | student1 | GA    |
47       | student2 | GA    |
48       | student2 | GB    |
50   @javascript
51   Scenario: No filters applied
52     Given I log in as "teacher1"
53     And I am on "Course 1" course homepage
54     And I navigate to course participants
55     Then I should see "Student 1" in the "participants" "table"
56     And I should see "Student 2" in the "participants" "table"
57     And I should see "Student 3" in the "participants" "table"
58     And I should see "Teacher 1" in the "participants" "table"
60   @javascript
61   Scenario Outline: Filter users for a course
62     Given I log in as "teacher1"
63     And I am on "Course 1" course homepage
64     And I navigate to course participants
65     When I open the autocomplete suggestions list
66     And I click on "<filter1>" item in the autocomplete list
67     Then I should see "<expected1>" in the "participants" "table"
68     And I should see "<expected2>" in the "participants" "table"
69     And I should see "<expected3>" in the "participants" "table"
70     And I should not see "<notexpected1>" in the "participants" "table"
71     And I should not see "<notexpected2>" in the "participants" "table"
72     # Note the 'XX-IGNORE-XX' elements are for when there is less than 2 'not expected' items.
74     Examples:
75       | filter1                         | expected1 | expected2 | expected3 | notexpected1 | notexpected2 |
76       | Group: No group                 | Student 1 | Student 4 | Teacher 1 | Student 2    | Student 3    |
77       | Group: Group 1                  | Student 2 |           |           | Student 1    | Student 3    |
78       | Group: Group 2                  | Student 2 | Student 3 |           | Student 1    | XX-IGNORE-XX |
79       | Role: Teacher                   | Teacher 1 |           |           | Student 1    | Student 2    |
80       | Status: Active                  | Teacher 1 | Student 1 | Student 3 | Student 2    | Student 4    |
81       | Status: Inactive                | Student 2 | Student 4 |           | Teacher 1    | Student 1    |
83   @javascript
84   Scenario Outline: Filter users which are group members in several courses
85     Given I log in as "teacher1"
86     And I am on "Course 3" course homepage
87     And I navigate to course participants
88     When I open the autocomplete suggestions list
89     And I click on "<filter1>" item in the autocomplete list
90     Then I should see "<expected1>" in the "participants" "table"
91     And I should see "<expected2>" in the "participants" "table"
92     And I should see "<expected3>" in the "participants" "table"
93     And I should not see "<notexpected1>" in the "participants" "table"
94     And I should not see "<notexpected2>" in the "participants" "table"
95     # Note the 'XX-IGNORE-XX' elements are for when there is less than 2 'not expected' items.
97     Examples:
98       | filter1                         | expected1 | expected2 | expected3 | notexpected1 | notexpected2 |
99       | Group: No group                 | Student 3 |           |           | Student 1    | Student 2    |
100       | Group: Group A                  | Student 1 | Student 2 |           | Student 3    | XX-IGNORE-XX |
101       | Group: Group B                  | Student 2 |           |           | Student 1    | Student 3    |
103   @javascript
104   Scenario: Filter users who have no role in a course
105     Given I log in as "teacher1"
106     And I am on "Course 1" course homepage
107     And I navigate to course participants
108     And I click on "Student 1's role assignments" "link"
109     And I click on ".form-autocomplete-selection [aria-selected=true]" "css_element"
110     And I press key "27" in the field "Student 1's role assignments"
111     And I click on "Save changes" "link"
112     When I open the autocomplete suggestions list
113     And I click on "Role: No roles" item in the autocomplete list
114     Then I should see "Student 1" in the "participants" "table"
115     And I should not see "Student 2" in the "participants" "table"
116     And I should not see "Student 3" in the "participants" "table"
117     And I should not see "Student 4" in the "participants" "table"
118     And I should not see "Teacher 1" in the "participants" "table"
120   @javascript
121   Scenario: Multiple filters applied
122     Given I log in as "teacher1"
123     And I am on "Course 1" course homepage
124     And I navigate to course participants
125     When I open the autocomplete suggestions list
126     And I click on "Role: Student" item in the autocomplete list
127     And I open the autocomplete suggestions list
128     And I click on "Status: Active" item in the autocomplete list
129     Then I should see "Student 1" in the "participants" "table"
130     And I should see "Student 3" in the "participants" "table"
131     And I should not see "Student 2" in the "participants" "table"
132     And I should not see "Student 4" in the "participants" "table"
133     And I should not see "Teacher 1" in the "participants" "table"
134     # Add more filters.
135     And I open the autocomplete suggestions list
136     And I click on "Enrolment methods: Manual enrolments" item in the autocomplete list
137     And I open the autocomplete suggestions list
138     And I click on "Group: Group 2" item in the autocomplete list
139     And I should see "Student 3" in the "participants" "table"
140     But I should not see "Teacher 1" in the "participants" "table"
141     And I should not see "Student 1" in the "participants" "table"
142     And I should not see "Student 2" in the "participants" "table"
143     And I should not see "Student 4" in the "participants" "table"
144     # Deselect the active status filter.
145     And I click on "Status: Active" "text" in the ".form-autocomplete-selection" "css_element"
146     # Apply Status: Inactive filter.
147     And I open the autocomplete suggestions list
148     And I click on "Status: Inactive" item in the autocomplete list
149     Then I should see "Student 2" in the "participants" "table"
150     But I should not see "Student 4" in the "participants" "table"
151     And I should not see "Student 1" in the "participants" "table"
152     And I should not see "Student 3" in the "participants" "table"
153     And I should not see "Teacher 1" in the "participants" "table"
155   @javascript
156   Scenario: Filter by keyword
157     Given I log in as "teacher1"
158     And I am on "Course 1" course homepage
159     And I navigate to course participants
160     # Note: This is the literal string "student", not the Role student.
161     When I set the field "Filters" to "student"
162     And I press key "13" in the field "Filters"
163     Then I should see "Student 1" in the "participants" "table"
164     And I should see "Student 2" in the "participants" "table"
165     And I should see "Student 3" in the "participants" "table"
166     And I should see "Student 4" in the "participants" "table"
167     And I should not see "Teacher 1" in the "participants" "table"
169   @javascript
170   Scenario: Reorder users without losing filter
171     Given I log in as "teacher1"
172     And I am on "Course 1" course homepage
173     And I navigate to course participants
174     And I open the autocomplete suggestions list
175     And I click on "Role: Student" item in the autocomplete list
176     When I click on "Surname" "link"
177     Then I should see "Role: Student"
178     And I should see "Student 1" in the "participants" "table"
179     And I should see "Student 2" in the "participants" "table"
180     And I should see "Student 3" in the "participants" "table"
181     And I should see "Student 4" in the "participants" "table"
182     And I should not see "Teacher 1" in the "participants" "table"
184   @javascript
185   Scenario: Rendering filter options for teachers in a course that don't support groups
186     Given I log in as "teacher1"
187     And I am on "Course 2" course homepage
188     And I navigate to course participants
189     When I open the autocomplete suggestions list
190     Then I should see "Role:" in the ".form-autocomplete-suggestions" "css_element"
191     And I should see "Enrolment methods:" in the ".form-autocomplete-suggestions" "css_element"
192     But I should not see "Group:" in the ".form-autocomplete-suggestions" "css_element"
194   @javascript
195   Scenario: Rendering filter options for students who have limited privileges
196     Given I log in as "student1"
197     And I am on "Course 2" course homepage
198     And I navigate to course participants
199     When I open the autocomplete suggestions list
200     Then I should see "Role:" in the ".form-autocomplete-suggestions" "css_element"
201     But I should not see "Status:" in the ".form-autocomplete-suggestions" "css_element"
202     And I should not see "Enrolment methods:" in the ".form-autocomplete-suggestions" "css_element"
204   @javascript
205   Scenario: Filter by user identity fields
206     Given I log in as "teacher1"
207     And the following config values are set as admin:
208         | showuseridentity | idnumber,email,city,country |
209     And I am on "Course 1" course homepage
210     And I navigate to course participants
211     # Search by email (only).
212     When I set the field "Filters" to "student1@example.com"
213     And I press key "13" in the field "Filters"
214     Then I should see "Student 1" in the "participants" "table"
215     And I should not see "Student 2" in the "participants" "table"
216     And I should not see "Teacher 1" in the "participants" "table"
217     # Search by idnumber (only).
218     And I click on "student1@example.com" "text" in the ".form-autocomplete-selection" "css_element"
219     And I set the field "Filters" to "SID"
220     And I press key "13" in the field "Filters"
221     And I should see "Student 1" in the "participants" "table"
222     And I should see "Student 2" in the "participants" "table"
223     And I should see "Student 3" in the "participants" "table"
224     And I should see "Student 4" in the "participants" "table"
225     And I should not see "Teacher 1" in the "participants" "table"
226     # Search by city (only).
227     And I click on "SID" "text" in the ".form-autocomplete-selection" "css_element"
228     And I set the field "Filters" to "SCITY"
229     And I press key "13" in the field "Filters"
230     And I should see "Student 1" in the "participants" "table"
231     And I should see "Student 2" in the "participants" "table"
232     And I should see "Student 3" in the "participants" "table"
233     And I should see "Student 4" in the "participants" "table"
234     And I should not see "Teacher 1" in the "participants" "table"
235     # Search by country text (only) - should not match.
236     And I click on "SCITY" "text" in the ".form-autocomplete-selection" "css_element"
237     And I set the field "Filters" to "GB"
238     And I press key "13" in the field "Filters"
239     And I should see "Nothing to display"
240     # Check no match.
241     And I click on "GB" "text" in the ".form-autocomplete-selection" "css_element"
242     And I set the field "Filters" to "NOTHING"
243     And I press key "13" in the field "Filters"
244     And I should see "Nothing to display"
246   @javascript
247   Scenario: Filter by user identity fields when cannot see the field data
248     Given I log in as "admin"
249     And I set the following system permissions of "Teacher" role:
250       | moodle/site:viewuseridentity | Prevent |
251     And the following config values are set as admin:
252       | showuseridentity | idnumber,email,city,country |
253     And I log out
254     And I log in as "teacher1"
255     And I am on "Course 1" course homepage
256     And I navigate to course participants
257     # Search by email (only) - should only see visible email + own.
258     When I set the field "Filters" to "@example.com"
259     And I press key "13" in the field "Filters"
260     Then I should not see "Student 1" in the "participants" "table"
261     And I should see "Student 2" in the "participants" "table"
262     And I should not see "Student 3" in the "participants" "table"
263     And I should not see "Student 4" in the "participants" "table"
264     And I should see "Teacher 1" in the "participants" "table"
265     # Search for other fields - should only see own results.
266     And I click on "@example.com" "text" in the ".form-autocomplete-selection" "css_element"
267     And I set the field "Filters" to "SID"
268     And I press key "13" in the field "Filters"
269     And I should see "Nothing to display"
270     And I click on "SID" "text" in the ".form-autocomplete-selection" "css_element"
271     And I set the field "Filters" to "TID"
272     And I press key "13" in the field "Filters"
273     And I should see "Teacher 1" in the "participants" "table"
274     And I set the field "Filters" to "CITY"
275     And I press key "13" in the field "Filters"
276     And I should see "Teacher 1" in the "participants" "table"
277     And I should not see "Student 1" in the "participants" "table"
278     # Check no match.
279     And I set the field "Filters" to "NOTHING"
280     And I press key "13" in the field "Filters"
281     And I should see "Nothing to display"