Merge branch 'MDL-68612-master-integration' of git://github.com/mickhawkins/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 | startdate        |
10       | Course 1 | C1        |     1     | ##5 months ago## |
11       | Course 2 | C2        |     0     | ##4 months ago## |
12       | Course 3 | C3        |     0     | ##3 months ago## |
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@moodle.com  | SID4     | AT      | SCITY4 | 0           |
19       | teacher1 | Teacher   | 1        | teacher1@example.org | 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 "last access times" exist:
36       | user     | course | lastaccess      |
37       | student1 | C1     | ##yesterday##   |
38       | student1 | C2     | ##2 weeks ago## |
39       | student2 | C1     | ##4 days ago##  |
40       | student3 | C1     | ##2 weeks ago## |
41       | student4 | C1     | ##3 weeks ago## |
42     And the following "groups" exist:
43       | name    | course | idnumber |
44       | Group 1 | C1     | G1       |
45       | Group 2 | C1     | G2       |
46       | Group A | C3     | GA       |
47       | Group B | C3     | GB       |
48     And the following "group members" exist:
49       | user     | group |
50       | student2 | G1    |
51       | student2 | G2    |
52       | student3 | G2    |
53       | student1 | GA    |
54       | student2 | GA    |
55       | student2 | GB    |
57   @javascript
58   Scenario: No filters applied
59     Given I log in as "teacher1"
60     And I am on "Course 1" course homepage
61     And I navigate to course participants
62     Then I should see "Student 1" in the "participants" "table"
63     And I should see "Student 2" in the "participants" "table"
64     And I should see "Student 3" in the "participants" "table"
65     And I should see "Teacher 1" in the "participants" "table"
67   @javascript
68   Scenario Outline: Filter users for a course with a single value
69     Given I log in as "teacher1"
70     And I am on "Course 1" course homepage
71     And I navigate to course participants
72     And I set the field "Match" in the "Filter 1" "fieldset" to "<matchtype>"
73     And I set the field "type" in the "Filter 1" "fieldset" to "<filtertype>"
74     And I click on ".form-autocomplete-downarrow" "css_element" in the "Filter 1" "fieldset"
75     And I click on "<filtervalue>" "list_item"
76     When I click on "Apply filters" "button"
77     Then I should see "<expected1>" in the "participants" "table"
78     And I should see "<expected2>" in the "participants" "table"
79     And I should see "<expected3>" in the "participants" "table"
80     And I should not see "<notexpected1>" in the "participants" "table"
81     And I should not see "<notexpected2>" in the "participants" "table"
82     # Note the 'XX-IGNORE-XX' elements are for when there is less than 2 'not expected' items.
84     Examples:
85       | matchtype | filtertype             | filtervalue | expected1 | expected2 | expected3 | notexpected1 | notexpected2 |
86       | Any       | Groups                 | No group    | Student 1 | Student 4 | Teacher 1 | Student 2    | Student 3    |
87       | All       | Groups                 | No group    | Student 1 | Student 4 | Teacher 1 | Student 2    | Student 3    |
88       | None      | Groups                 | No group    | Student 2 | Student 3 |           | Student 1    | Teacher 1    |
89       | Any       | Role                   | Student     | Student 1 | Student 2 | Student 3 | Teacher 1    | XX-IGNORE-XX |
90       | All       | Role                   | Student     | Student 1 | Student 2 | Student 3 | Teacher 1    | XX-IGNORE-XX |
91       | None      | Role                   | Student     | Teacher 1 |           |           | Student 1    | Student 2    |
92       | Any       | Status                 | Active      | Student 1 | Student 3 | Teacher 1 | Student 2    | Student 4    |
93       | All       | Status                 | Active      | Student 1 | Student 3 | Teacher 1 | Student 2    | Student 4    |
94       | None      | Status                 | Active      | Student 2 | Student 4 |           | Student 1    | Student 3    |
95       | Any       | Inactive for more than | 1 week      | Student 3 | Student 4 |           | Student 1    | Student 2    |
96       | All       | Inactive for more than | 1 week      | Student 3 | Student 4 |           | Student 1    | Student 2    |
97       | None      | Inactive for more than | 1 week      | Student 1 | Student 2 | Teacher 1 | Student 3    | XX-IGNORE-XX |
99   @javascript
100   Scenario Outline: Filter users for a course with multiple values for a single filter
101     Given I log in as "teacher1"
102     And I am on "Course 1" course homepage
103     And I navigate to course participants
104     And I set the field "Match" in the "Filter 1" "fieldset" to "<matchtype>"
105     And I set the field "type" in the "Filter 1" "fieldset" to "<filtertype>"
106     And I click on ".form-autocomplete-downarrow" "css_element" in the "Filter 1" "fieldset"
107     And I click on "<filtervalue1>" "list_item"
108     And I click on "<filtervalue2>" "list_item"
109     When I click on "Apply filters" "button"
110     Then I should see "<expected1>" in the "participants" "table"
111     And I should see "<expected2>" in the "participants" "table"
112     And I should see "<expected3>" in the "participants" "table"
113     And I should not see "<notexpected1>" in the "participants" "table"
114     And I should not see "<notexpected2>" in the "participants" "table"
115     # Note the 'XX-IGNORE-XX' elements are for when there is less than 2 'not expected' items.
117     Examples:
118       | matchtype | filtertype | filtervalue1 | filtervalue2 | expected1 | expected2 | expected3 | notexpected1 | notexpected2 |
119       | Any       | Groups     | Group 1      | Group 2      | Student 2 | Student 3 |           | Student 1    | XX-IGNORE-XX |
120       | All       | Groups     | Group 1      | Group 2      | Student 2 |           |           | Student 1    | Student 3    |
121       | None      | Groups     | Group 1      | Group 2      | Student 1 | Teacher 1 |           | Student 2    | Student 3    |
123   @javascript
124   Scenario Outline: Filter users which are group members in several courses
125     Given I log in as "teacher1"
126     And I am on "Course 3" course homepage
127     And I navigate to course participants
128     And I set the field "type" in the "Filter 1" "fieldset" to "<filtertype>"
129     And I click on ".form-autocomplete-downarrow" "css_element" in the "Filter 1" "fieldset"
130     And I click on "<filtervalue>" "list_item"
131     When I click on "Apply filters" "button"
132     Then I should see "<expected1>" in the "participants" "table"
133     And I should see "<expected2>" in the "participants" "table"
134     And I should not see "<notexpected1>" in the "participants" "table"
135     And I should not see "<notexpected2>" in the "participants" "table"
136     # Note the 'XX-IGNORE-XX' elements are for when there is less than 2 'not expected' items.
138     Examples:
139       | filtertype | filtervalue | expected1 | expected2 | notexpected1 | notexpected2 |
140       | Groups     | No group    | Student 3 |           | Student 1    | Student 2    |
141       | Groups     | Group A     | Student 1 | Student 2 | Student 3    | XX-IGNORE-XX |
142       | Groups     | Group B     | Student 2 |           | Student 1    | Student 3    |
144   @javascript
145   Scenario: In separate groups mode, a student in a single group can only view and filter by users in their own group
146     Given I log in as "teacher1"
147     And I am on "Course 1" course homepage
148     And I navigate to course participants
149     # Unsuspend student 2 for to improve coverage of this test.
150     And I click on "Edit enrolment" "icon" in the "Student 2" "table_row"
151     And I set the field "Status" to "Active"
152     And I click on "Save changes" "button"
153     And I log out
154     When I log in as "student3"
155     And I am on "Course 1" course homepage
156     And I navigate to course participants
157     # Default view should have groups filter pre-set.
158     Then I should see "Student 2" in the "participants" "table"
159     And I should see "Student 3" in the "participants" "table"
160     And I should not see "Student 1" in the "participants" "table"
161     And I should see "Group 2" in the "Filter 1" "fieldset"
162     And I should not see "Group 1" in the "Filter 1" "fieldset"
163     And I should see "Student 2" in the "participants" "table"
164     And I should see "Student 3" in the "participants" "table"
165     And I should not see "Student 1" in the "participants" "table"
166     # Testing result of removing groups filter row.
167     And I click on "Remove filter row" "button" in the "Filter 1" "fieldset"
168     And I should see "Student 2" in the "participants" "table"
169     And I should see "Student 3" in the "participants" "table"
170     And I should not see "Student 1" in the "participants" "table"
171     # Testing result of applying groups filter manually.
172     And I set the field "Match" in the "Filter 1" "fieldset" to "Any"
173     And I set the field "type" in the "Filter 1" "fieldset" to "Groups"
174     And I click on ".form-autocomplete-downarrow" "css_element" in the "Filter 1" "fieldset"
175     And I should see "Group 2" in the ".form-autocomplete-suggestions" "css_element"
176     And I should not see "Group 1" in the ".form-autocomplete-suggestions" "css_element"
177     And I click on "Group 2" "list_item"
178     And I click on "Apply filters" "button"
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 not see "Student 1" in the "participants" "table"
182     # Testing result of removing groups filter by clearing all filters.
183     And I click on "Clear filters" "button"
184     And I should see "Student 2" in the "participants" "table"
185     And I should see "Student 3" in the "participants" "table"
186     And I should not see "Student 1" in the "participants" "table"
188   @javascript
189   Scenario: In separate groups mode, a student in multiple groups can only view and filter by users in their own groups
190     Given I log in as "teacher1"
191     And I am on "Course 1" course homepage
192     And I navigate to course participants
193     # Unsuspend student 2 for to improve coverage of this test.
194     And I click on "Edit enrolment" "icon" in the "Student 2" "table_row"
195     And I set the field "Status" to "Active"
196     And I click on "Save changes" "button"
197     And I log out
198     When I log in as "student2"
199     And I am on "Course 1" course homepage
200     And I navigate to course participants
201     # Default view should have groups filter pre-set.
202     Then I should see "Student 2" in the "participants" "table"
203     And I should see "Student 3" in the "participants" "table"
204     And I should not see "Student 1" in the "participants" "table"
205     And I should see "Group 1" in the "Filter 1" "fieldset"
206     And I should see "Group 2" in the "Filter 1" "fieldset"
207     And I should see "Student 2" in the "participants" "table"
208     And I should see "Student 3" in the "participants" "table"
209     And I should not see "Student 1" in the "participants" "table"
210     # Testing result of removing groups filter row.
211     And I click on "Remove filter row" "button" in the "Filter 1" "fieldset"
212     And I should see "Student 2" in the "participants" "table"
213     And I should see "Student 3" in the "participants" "table"
214     And I should not see "Student 1" in the "participants" "table"
215     # Testing result of applying groups filter manually.
216     And I set the field "Match" in the "Filter 1" "fieldset" to "Any"
217     And I set the field "type" in the "Filter 1" "fieldset" to "Groups"
218     And I click on ".form-autocomplete-downarrow" "css_element" in the "Filter 1" "fieldset"
219     And I should see "Group 1" in the ".form-autocomplete-suggestions" "css_element"
220     And I should see "Group 2" in the ".form-autocomplete-suggestions" "css_element"
221     And I click on "Group 1" "list_item"
222     And I click on "Apply filters" "button"
223     And I should see "Student 2" in the "participants" "table"
224     And I should not see "Student 1" in the "participants" "table"
225     And I should not see "Student 3" in the "participants" "table"
226     # Testing result of removing groups filter by clearing all filters.
227     And I click on "Clear filters" "button"
228     And I should see "Student 2" in the "participants" "table"
229     And I should see "Student 3" in the "participants" "table"
230     And I should not see "Student 1" in the "participants" "table"
232   @javascript
233   Scenario: Filter users who have no role in a course
234     Given I log in as "teacher1"
235     And I am on "Course 1" course homepage
236     And I navigate to course participants
237     And I click on "Student 1's role assignments" "link"
238     And I click on ".form-autocomplete-selection [aria-selected=true]" "css_element"
239     And I press key "27" in the field "Student 1's role assignments"
240     And I click on "Save changes" "link"
241     And I set the field "type" in the "Filter 1" "fieldset" to "Roles"
242     And I click on ".form-autocomplete-downarrow" "css_element" in the "Filter 1" "fieldset"
243     And I click on "No roles" "list_item"
244     When I click on "Apply filters" "button"
245     Then I should see "Student 1" in the "participants" "table"
246     And I should not see "Student 2" in the "participants" "table"
247     And I should not see "Student 3" in the "participants" "table"
248     And I should not see "Student 4" in the "participants" "table"
249     And I should not see "Teacher 1" in the "participants" "table"
251   @javascript
252   Scenario: Multiple filters applied
253     Given I log in as "teacher1"
254     And I am on "Course 1" course homepage
255     And I navigate to course participants
256     And I set the field "Match" in the "Filter 1" "fieldset" to "All"
257     And I set the field "type" in the "Filter 1" "fieldset" to "Roles"
258     And I click on ".form-autocomplete-downarrow" "css_element" in the "Filter 1" "fieldset"
259     And I click on "Student" "list_item"
260     And I click on "Add condition" "button"
261     # Set filterset to match all.
262     And I set the field "Match" to "All"
263     And I set the field "Match" in the "Filter 2" "fieldset" to "Any"
264     And I set the field "type" in the "Filter 2" "fieldset" to "Status"
265     And I click on ".form-autocomplete-downarrow" "css_element" in the "Filter 2" "fieldset"
266     And I click on "Active" "list_item"
267     When I click on "Apply filters" "button"
268     Then I should see "Student 1" in the "participants" "table"
269     And I should see "Student 3" in the "participants" "table"
270     And I should not see "Student 2" in the "participants" "table"
271     And I should not see "Student 4" in the "participants" "table"
272     And I should not see "Teacher 1" in the "participants" "table"
273     # Add more filters.
274     And I click on "Add condition" "button"
275     And I set the field "Match" in the "Filter 3" "fieldset" to "Any"
276     And I set the field "type" in the "Filter 3" "fieldset" to "Enrolment methods"
277     And I click on ".form-autocomplete-downarrow" "css_element" in the "Filter 3" "fieldset"
278     And I click on "Manual enrolments" "list_item"
279     And I click on "Add condition" "button"
280     And I set the field "Match" in the "Filter 4" "fieldset" to "All"
281     And I set the field "type" in the "Filter 4" "fieldset" to "Groups"
282     And I click on ".form-autocomplete-downarrow" "css_element" in the "Filter 4" "fieldset"
283     And I click on "Group 2" "list_item"
284     And I click on "Apply filters" "button"
285     And I should see "Student 3" in the "participants" "table"
286     But I should not see "Teacher 1" in the "participants" "table"
287     And I should not see "Student 1" in the "participants" "table"
288     And I should not see "Student 2" in the "participants" "table"
289     And I should not see "Student 4" in the "participants" "table"
290     # Change the active status filter to inactive.
291     And I click on "Remove \"Active\" from filter" "button" in the "Filter 2" "fieldset"
292     And I click on ".form-autocomplete-downarrow" "css_element" in the "Filter 2" "fieldset"
293     And I click on "Inactive" "list_item"
294     And I click on "Apply filters" "button"
295     Then I should see "Student 2" in the "participants" "table"
296     But I should not see "Student 4" in the "participants" "table"
297     And I should not see "Student 1" in the "participants" "table"
298     And I should not see "Student 3" in the "participants" "table"
299     And I should not see "Teacher 1" in the "participants" "table"
300     # Set both statuses (match any).
301     And I click on ".form-autocomplete-downarrow" "css_element" in the "Filter 2" "fieldset"
302     And I click on "Active" "list_item"
303     And I click on "Apply filters" "button"
304     And I should see "Student 2" in the "participants" "table"
305     And I should see "Student 3" in the "participants" "table"
306     And I should not see "Student 1" in the "participants" "table"
307     And I should not see "Student 4" in the "participants" "table"
308     # Switch to match all.
309     And I set the field "Match" in the "Filter 2" "fieldset" to "All"
310     And I click on "Apply filters" "button"
311     And I should see "Nothing to display"
313   @javascript
314   Scenario: Filter match by one or more keywords and modified match types
315     Given I log in as "teacher1"
316     And I am on "Course 1" course homepage
317     And I navigate to course participants
318     And I set the field "Match" in the "Filter 1" "fieldset" to "Any"
319     And I set the field "type" in the "Filter 1" "fieldset" to "Keyword"
320     And I set the field "Type..." to "1@example"
321     And I press key "13" in the field "Type..."
322     When I click on "Apply filters" "button"
323     Then I should see "Student 1" in the "participants" "table"
324     And I should see "Teacher 1" in the "participants" "table"
325     And I should not see "Student 2" in the "participants" "table"
326     And I should not see "Student 3" in the "participants" "table"
327     And I should not see "Student 4" in the "participants" "table"
328     And I set the field "Match" in the "Filter 1" "fieldset" to "All"
329     And I click on "Apply filters" "button"
330     And I should see "Student 1" in the "participants" "table"
331     And I should see "Teacher 1" in the "participants" "table"
332     And I should not see "Student 2" in the "participants" "table"
333     And I should not see "Student 3" in the "participants" "table"
334     And I should not see "Student 4" in the "participants" "table"
335     And I set the field "Match" in the "Filter 1" "fieldset" to "None"
336     And I click on "Apply filters" "button"
337     And I should see "Student 2" in the "participants" "table"
338     And I should see "Student 3" in the "participants" "table"
339     And I should see "Student 4" in the "participants" "table"
340     And I should not see "Student 1" in the "participants" "table"
341     And I should not see "Teacher 1" in the "participants" "table"
342     # Add a second keyword filter value
343     And I set the field "Type..." to "moodle"
344     And I press key "13" in the field "Type..."
345     And I click on "Apply filters" "button"
346     And I should see "Student 2" in the "participants" "table"
347     And I should see "Student 3" in the "participants" "table"
348     And I should not see "Student 1" in the "participants" "table"
349     And I should not see "Teacher 1" in the "participants" "table"
350     And I should not see "Student 4" in the "participants" "table"
351     And I set the field "Match" in the "Filter 1" "fieldset" to "Any"
352     And I click on "Apply filters" "button"
353     And I should see "Student 1" in the "participants" "table"
354     And I should see "Teacher 1" in the "participants" "table"
355     And I should see "Student 4" in the "participants" "table"
356     And I should not see "Student 2" in the "participants" "table"
357     And I should not see "Student 3" in the "participants" "table"
358     And I set the field "Match" in the "Filter 1" "fieldset" to "All"
359     And I click on "Apply filters" "button"
360     And I should see "Nothing to display"
362   @javascript
363   Scenario: Reorder users without losing filter
364     Given I log in as "teacher1"
365     And I am on "Course 1" course homepage
366     And I navigate to course participants
367     And I set the field "type" in the "Filter 1" "fieldset" to "Roles"
368     And I click on ".form-autocomplete-downarrow" "css_element" in the "Filter 1" "fieldset"
369     And I click on "Student" "list_item"
370     And I click on "Apply filters" "button"
371     And I should see "Student 1" in the "participants" "table"
372     And I should see "Student 2" in the "participants" "table"
373     And I should see "Student 3" in the "participants" "table"
374     And I should see "Student 4" in the "participants" "table"
375     And I should not see "Teacher 1" in the "participants" "table"
376     When I click on "Surname" "link"
377     Then I should see "Student 1" in the "participants" "table"
378     And I should see "Student 2" in the "participants" "table"
379     And I should see "Student 3" in the "participants" "table"
380     And I should see "Student 4" in the "participants" "table"
381     And I should not see "Teacher 1" in the "participants" "table"
383   @javascript
384   Scenario: Only possible to add filter rows for the number of filters available
385     Given I log in as "teacher1"
386     And I am on "Course 1" course homepage
387     And I navigate to course participants
388     And I set the field "type" in the "Filter 1" "fieldset" to "Keyword"
389     And I click on "Add condition" "button"
390     And I set the field "type" in the "Filter 2" "fieldset" to "Status"
391     And I click on "Add condition" "button"
392     And I set the field "type" in the "Filter 3" "fieldset" to "Roles"
393     And I click on "Add condition" "button"
394     And I set the field "type" in the "Filter 4" "fieldset" to "Enrolment methods"
395     And I click on "Add condition" "button"
396     And I set the field "type" in the "Filter 5" "fieldset" to "Groups"
397     And I click on "Add condition" "button"
398     And I set the field "type" in the "Filter 6" "fieldset" to "Inactive for more than"
399     And the "Add condition" "button" should be disabled
401   @javascript
402   Scenario: Rendering filter options for teachers in a course that don't support groups
403     Given I log in as "teacher1"
404     And I am on "Course 2" course homepage
405     When I navigate to course participants
406     Then I should see "Roles" in the "type" "field"
407     And I should see "Enrolment methods" in the "type" "field"
408     But I should not see "Groups" in the "type" "field"
410   @javascript
411   Scenario: Rendering filter options for students who have limited privileges
412     Given I log in as "student1"
413     And I am on "Course 2" course homepage
414     When I navigate to course participants
415     Then I should see "Roles" in the "type" "field"
416     But I should not see "Status" in the "type" "field"
417     And I should not see "Enrolment methods" in the "type" "field"
419   @javascript
420   Scenario: Filter by user identity fields
421     Given I log in as "teacher1"
422     And the following config values are set as admin:
423         | showuseridentity | idnumber,email,city,country |
424     And I am on "Course 1" course homepage
425     And I navigate to course participants
426     And I set the field "type" in the "Filter 1" "fieldset" to "Keyword"
427     # Search by email (only).
428     And I set the field "Type..." to "student1@example.com"
429     And I press key "13" in the field "Type..."
430     When I click on "Apply filters" "button"
431     Then I should see "Student 1" in the "participants" "table"
432     And I should not see "Student 2" in the "participants" "table"
433     And I should not see "Teacher 1" in the "participants" "table"
434     # Search by idnumber (only).
435     And I click on "Remove \"student1@example.com\" from filter" "button" in the "Filter 1" "fieldset"
436     And I set the field "Type..." to "SID"
437     And I press key "13" in the field "Type..."
438     And I click on "Apply filters" "button"
439     And I should see "Student 1" in the "participants" "table"
440     And I should see "Student 2" in the "participants" "table"
441     And I should see "Student 3" in the "participants" "table"
442     And I should see "Student 4" in the "participants" "table"
443     And I should not see "Teacher 1" in the "participants" "table"
444     # Search by city (only).
445     And I click on "Remove \"SID\" from filter" "button" in the "Filter 1" "fieldset"
446     And I set the field "Type..." to "SCITY"
447     And I press key "13" in the field "Type..."
448     And I click on "Apply filters" "button"
449     And I should see "Student 1" in the "participants" "table"
450     And I should see "Student 2" in the "participants" "table"
451     And I should see "Student 3" in the "participants" "table"
452     And I should see "Student 4" in the "participants" "table"
453     And I should not see "Teacher 1" in the "participants" "table"
454     # Search by country text (only) - should not match.
455     And I click on "Remove \"SCITY\" from filter" "button" in the "Filter 1" "fieldset"
456     And I set the field "Type..." to "GB"
457     And I press key "13" in the field "Type..."
458     And I click on "Apply filters" "button"
459     And I should see "Nothing to display"
460     # Check no match.
461     And I click on "Remove \"GB\" from filter" "button" in the "Filter 1" "fieldset"
462     And I set the field "Type..." to "NOTHING"
463     And I press key "13" in the field "Type..."
464     And I click on "Apply filters" "button"
465     And I should see "Nothing to display"
467   @javascript
468   Scenario: Filter by user identity fields when cannot see the field data
469     Given I log in as "admin"
470     And I set the following system permissions of "Teacher" role:
471       | moodle/site:viewuseridentity | Prevent |
472     And the following config values are set as admin:
473       | showuseridentity | idnumber,email,city,country |
474     And I log out
475     And I log in as "teacher1"
476     And I am on "Course 1" course homepage
477     And I navigate to course participants
478     # Search by email (only) - should only see visible email + own.
479     And I set the field "type" in the "Filter 1" "fieldset" to "Keyword"
480     And I set the field "Type..." to "@example."
481     And I press key "13" in the field "Type..."
482     When I click on "Apply filters" "button"
483     Then I should not see "Student 1" in the "participants" "table"
484     And I should see "Student 2" in the "participants" "table"
485     And I should not see "Student 3" in the "participants" "table"
486     And I should not see "Student 4" in the "participants" "table"
487     And I should see "Teacher 1" in the "participants" "table"
488     # Search for other fields - should only see own results.
489     And I click on "Remove \"@example.\" from filter" "button" in the "Filter 1" "fieldset"
490     And I set the field "Type..." to "SID"
491     And I press key "13" in the field "Type..."
492     And I click on "Apply filters" "button"
493     And I should see "Nothing to display"
494     And I click on "Remove \"SID\" from filter" "button" in the "Filter 1" "fieldset"
495     And I set the field "Type..." to "TID"
496     And I press key "13" in the field "Type..."
497     And I click on "Apply filters" "button"
498     And I should see "Teacher 1" in the "participants" "table"
499     And I should not see "Student 1" in the "participants" "table"
500     And I click on "Remove \"TID\" from filter" "button" in the "Filter 1" "fieldset"
501     And I set the field "Type..." to "CITY"
502     And I press key "13" in the field "Type..."
503     And I click on "Apply filters" "button"
504     And I should see "Teacher 1" in the "participants" "table"
505     And I should not see "Student 1" in the "participants" "table"
506     # Check no match.
507     And I click on "Remove \"CITY\" from filter" "button" in the "Filter 1" "fieldset"
508     And I set the field "Type..." to "NOTHING"
509     And I press key "13" in the field "Type..."
510     And I click on "Apply filters" "button"
511     And I should see "Nothing to display"
513   @javascript
514   Scenario: Individual filters can be removed, which will automatically refresh the participants list
515     Given I log in as "teacher1"
516     And I am on "Course 1" course homepage
517     And I navigate to course participants
518     And I set the field "Match" in the "Filter 1" "fieldset" to "All"
519     And I set the field "type" in the "Filter 1" "fieldset" to "Roles"
520     And I click on ".form-autocomplete-downarrow" "css_element" in the "Filter 1" "fieldset"
521     And I click on "Student" "list_item"
522     And I click on "Add condition" "button"
523     # Set filterset to match all.
524     And I set the field "Match" to "All"
525     And I set the field "Match" in the "Filter 2" "fieldset" to "Any"
526     And I set the field "type" in the "Filter 2" "fieldset" to "Keyword"
527     And I set the field "Type..." to "@example"
528     And I press key "13" in the field "Type..."
529     And I click on "Apply filters" "button"
530     And I should see "Student 1" in the "participants" "table"
531     And I should see "Student 2" in the "participants" "table"
532     And I should see "Student 3" in the "participants" "table"
533     And I should not see "Student 4" in the "participants" "table"
534     And I should not see "Teacher 1" in the "participants" "table"
535     When I click on "Remove filter row" "button" in the "Filter 1" "fieldset"
536     Then I should see "Student 1" in the "participants" "table"
537     And I should see "Student 2" in the "participants" "table"
538     And I should see "Student 3" in the "participants" "table"
539     And I should see "Teacher 1" in the "participants" "table"
540     And I should not see "Student 4" in the "participants" "table"
542   @javascript
543   Scenario: All filters can be cleared at once
544     Given I log in as "teacher1"
545     And I am on "Course 1" course homepage
546     And I navigate to course participants
547     And I set the field "Match" in the "Filter 1" "fieldset" to "All"
548     And I set the field "type" in the "Filter 1" "fieldset" to "Roles"
549     And I click on ".form-autocomplete-downarrow" "css_element" in the "Filter 1" "fieldset"
550     And I click on "Student" "list_item"
551     And I click on "Add condition" "button"
552     # Set filterset to match all.
553     And I set the field "Match" to "All"
554     And I set the field "Match" in the "Filter 2" "fieldset" to "Any"
555     And I set the field "type" in the "Filter 2" "fieldset" to "Keyword"
556     And I set the field "Type..." to "@example"
557     And I press key "13" in the field "Type..."
558     And I click on "Apply filters" "button"
559     And I should see "Student 1" in the "participants" "table"
560     And I should see "Student 2" in the "participants" "table"
561     And I should see "Student 3" in the "participants" "table"
562     And I should not see "Student 4" in the "participants" "table"
563     And I should not see "Teacher 1" in the "participants" "table"
564     When I click on "Clear filters" "button"
565     Then I should see "Student 1" in the "participants" "table"
566     And I should see "Student 2" in the "participants" "table"
567     And I should see "Student 3" in the "participants" "table"
568     And I should see "Student 4" in the "participants" "table"
569     And I should see "Teacher 1" in the "participants" "table"
571   @javascript
572   Scenario: Filterset match type is reset when reducing to a single filter
573     Given I log in as "teacher1"
574     And I am on "Course 1" course homepage
575     And I navigate to course participants
576     And I set the field "Match" in the "Filter 1" "fieldset" to "Any"
577     And I set the field "type" in the "Filter 1" "fieldset" to "Keyword"
578     And I set the field "Type..." to "@example.com"
579     And I press key "13" in the field "Type..."
580     And I click on "Add condition" "button"
581     # Set filterset to match none.
582     And I set the field "Match" to "None"
583     And I set the field "Match" in the "Filter 2" "fieldset" to "All"
584     And I set the field "type" in the "Filter 2" "fieldset" to "Roles"
585     And I click on ".form-autocomplete-downarrow" "css_element" in the "Filter 2" "fieldset"
586     And I click on "Student" "list_item"
587     # Match none of student role and @example.com keyword.
588     And I click on "Apply filters" "button"
589     And I should see "Teacher 1" in the "participants" "table"
590     And I should not see "Student 1" in the "participants" "table"
591     And I should not see "Student 2" in the "participants" "table"
592     And I should not see "Student 3" in the "participants" "table"
593     And I should not see "Student 4" in the "participants" "table"
594     When I click on "Remove filter row" "button" in the "Filter 2" "fieldset"
595     # Filterset match type and role filter are removed, leaving keyword filter only.
596     Then I should see "Student 1" in the "participants" "table"
597     And I should see "Student 2" in the "participants" "table"
598     And I should see "Student 3" in the "participants" "table"
599     And I should not see "Student 4" in the "participants" "table"
600     And I should not see "Teacher 1" in the "participants" "table"
601     And I click on "Add condition" "button"
602     # Re-add a second filter and ensure the default (any) filterset match type is set.
603     And I set the field "Match" in the "Filter 2" "fieldset" to "All"
604     And I set the field "type" in the "Filter 2" "fieldset" to "Role"
605     And I click on ".form-autocomplete-downarrow" "css_element" in the "Filter 2" "fieldset"
606     And I click on "Student" "list_item"
607     And I click on "Apply filters" "button"
608     And I should see "Student 1" in the "participants" "table"
609     And I should see "Student 2" in the "participants" "table"
610     And I should see "Student 3" in the "participants" "table"
611     And I should see "Student 4" in the "participants" "table"
612     And I should not see "Teacher 1" in the "participants" "table"