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