MDL-68745 lib: Improved docblock descriptions for alpha PARAM types
[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       | student5 | Trendy    | Learnson | trendy@learnson.com  | SID5     | AU      | SCITY5 | 0           |
20       | teacher1 | Teacher   | 1        | teacher1@example.com | 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 "groups" exist:
38       | name    | course | idnumber |
39       | Group 1 | C1     | G1       |
40       | Group 2 | C1     | G2       |
41       | Group A | C3     | GA       |
42       | Group B | C3     | GB       |
43     And the following "group members" exist:
44       | user     | group |
45       | student2 | G1    |
46       | student2 | G2    |
47       | student3 | G2    |
48       | student1 | GA    |
49       | student2 | GA    |
50       | student2 | GB    |
52   @javascript
53   Scenario: No filters applied
54     Given I log in as "teacher1"
55     And I am on "Course 1" course homepage
56     And I navigate to course participants
57     Then I should see "Student 1" in the "participants" "table"
58     And I should see "Student 2" in the "participants" "table"
59     And I should see "Student 3" in the "participants" "table"
60     And I should see "Teacher 1" in the "participants" "table"
62   @javascript
63   Scenario Outline: Filter users for a course
64     Given I log in as "teacher1"
65     And I am on "Course 1" course homepage
66     And I navigate to course participants
67     When I open the autocomplete suggestions list
68     And I click on "<filter1>" item in the autocomplete list
69     Then I should see "<expected1>" in the "participants" "table"
70     And I should see "<expected2>" in the "participants" "table"
71     And I should see "<expected3>" in the "participants" "table"
72     And I should not see "<notexpected1>" in the "participants" "table"
73     And I should not see "<notexpected2>" in the "participants" "table"
74     # Note the 'XX-IGNORE-XX' elements are for when there is less than 2 'not expected' items.
76     Examples:
77       | filter1                         | expected1 | expected2 | expected3 | notexpected1 | notexpected2 |
78       | Group: No group                 | Student 1 | Student 4 | Teacher 1 | Student 2    | Student 3    |
79       | Group: Group 1                  | Student 2 |           |           | Student 1    | Student 3    |
80       | Group: Group 2                  | Student 2 | Student 3 |           | Student 1    | XX-IGNORE-XX |
81       | Role: Teacher                   | Teacher 1 |           |           | Student 1    | Student 2    |
82       | Status: Active                  | Teacher 1 | Student 1 | Student 3 | Student 2    | Student 4    |
83       | Status: Inactive                | Student 2 | Student 4 |           | Teacher 1    | Student 1    |
85   @javascript
86   Scenario Outline: Filter users which are group members in several courses
87     Given I log in as "teacher1"
88     And I am on "Course 3" course homepage
89     And I navigate to course participants
90     When I open the autocomplete suggestions list
91     And I click on "<filter1>" item in the autocomplete list
92     Then I should see "<expected1>" in the "participants" "table"
93     And I should see "<expected2>" in the "participants" "table"
94     And I should see "<expected3>" in the "participants" "table"
95     And I should not see "<notexpected1>" in the "participants" "table"
96     And I should not see "<notexpected2>" in the "participants" "table"
97     # Note the 'XX-IGNORE-XX' elements are for when there is less than 2 'not expected' items.
99     Examples:
100       | filter1                         | expected1 | expected2 | expected3 | notexpected1 | notexpected2 |
101       | Group: No group                 | Student 3 |           |           | Student 1    | Student 2    |
102       | Group: Group A                  | Student 1 | Student 2 |           | Student 3    | XX-IGNORE-XX |
103       | Group: Group B                  | Student 2 |           |           | Student 1    | Student 3    |
105   @javascript
106   Scenario: Filter users who have no role in a course
107     Given I log in as "teacher1"
108     And I am on "Course 1" course homepage
109     And I navigate to course participants
110     And I click on "Student 1's role assignments" "link"
111     And I click on ".form-autocomplete-selection [aria-selected=true]" "css_element"
112     And I press key "27" in the field "Student 1's role assignments"
113     And I click on "Save changes" "link"
114     When I open the autocomplete suggestions list
115     And I click on "Role: No roles" item in the autocomplete list
116     Then I should see "Student 1" in the "participants" "table"
117     And I should not see "Student 2" in the "participants" "table"
118     And I should not see "Student 3" in the "participants" "table"
119     And I should not see "Student 4" in the "participants" "table"
120     And I should not see "Teacher 1" in the "participants" "table"
122   @javascript
123   Scenario: Multiple filters applied
124     Given I log in as "teacher1"
125     And I am on "Course 1" course homepage
126     And I navigate to course participants
127     When I open the autocomplete suggestions list
128     And I click on "Role: Student" item in the autocomplete list
129     And I open the autocomplete suggestions list
130     And I click on "Status: Active" item in the autocomplete list
131     Then I should see "Student 1" in the "participants" "table"
132     And I should see "Student 3" in the "participants" "table"
133     And I should not see "Student 2" in the "participants" "table"
134     And I should not see "Student 4" in the "participants" "table"
135     And I should not see "Teacher 1" in the "participants" "table"
136     # Add more filters.
137     And I open the autocomplete suggestions list
138     And I click on "Enrolment methods: Manual enrolments" item in the autocomplete list
139     And I open the autocomplete suggestions list
140     And I click on "Group: Group 2" item in the autocomplete list
141     And I should see "Student 3" in the "participants" "table"
142     But I should not see "Teacher 1" in the "participants" "table"
143     And I should not see "Student 1" in the "participants" "table"
144     And I should not see "Student 2" in the "participants" "table"
145     And I should not see "Student 4" in the "participants" "table"
146     # Deselect the active status filter.
147     And I click on "Status: Active" "text" in the ".form-autocomplete-selection" "css_element"
148     # Apply Status: Inactive filter.
149     And I open the autocomplete suggestions list
150     And I click on "Status: Inactive" item in the autocomplete list
151     Then I should see "Student 2" in the "participants" "table"
152     But I should not see "Student 4" in the "participants" "table"
153     And I should not see "Student 1" in the "participants" "table"
154     And I should not see "Student 3" in the "participants" "table"
155     And I should not see "Teacher 1" in the "participants" "table"
157   @javascript
158   Scenario: Filter by keyword
159     Given I log in as "teacher1"
160     And I am on "Course 1" course homepage
161     And I navigate to course participants
162     # Note: This is the literal string "student", not the Role student.
163     When I set the field "Filters" to "student"
164     And I press key "13" in the field "Filters"
165     Then I should see "Student 1" in the "participants" "table"
166     And I should see "Student 2" in the "participants" "table"
167     And I should see "Student 3" in the "participants" "table"
168     And I should see "Student 4" in the "participants" "table"
169     And I should not see "Teacher 1" in the "participants" "table"
171   @javascript
172   Scenario: Reorder users without losing filter
173     Given I log in as "teacher1"
174     And I am on "Course 1" course homepage
175     And I navigate to course participants
176     And I open the autocomplete suggestions list
177     And I click on "Role: Student" item in the autocomplete list
178     When I click on "Surname" "link"
179     Then I should see "Role: Student"
180     And I should see "Student 1" in the "participants" "table"
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 see "Student 4" in the "participants" "table"
184     And I should not see "Teacher 1" in the "participants" "table"
186   @javascript
187   Scenario: Rendering filter options for teachers in a course that don't support groups
188     Given I log in as "teacher1"
189     And I am on "Course 2" course homepage
190     And I navigate to course participants
191     When I open the autocomplete suggestions list
192     Then I should see "Role:" in the ".form-autocomplete-suggestions" "css_element"
193     And I should see "Enrolment methods:" in the ".form-autocomplete-suggestions" "css_element"
194     But I should not see "Group:" in the ".form-autocomplete-suggestions" "css_element"
196   @javascript
197   Scenario: Rendering filter options for students who have limited privileges
198     Given I log in as "student1"
199     And I am on "Course 2" course homepage
200     And I navigate to course participants
201     When I open the autocomplete suggestions list
202     Then I should see "Role:" in the ".form-autocomplete-suggestions" "css_element"
203     But I should not see "Status:" in the ".form-autocomplete-suggestions" "css_element"
204     And I should not see "Enrolment methods:" in the ".form-autocomplete-suggestions" "css_element"
206   @javascript
207   Scenario: Filter by user identity fields
208     Given I log in as "teacher1"
209     And the following config values are set as admin:
210         | showuseridentity | idnumber,email,city,country |
211     And I am on "Course 1" course homepage
212     And I navigate to course participants
213     # Search by email (only).
214     When I set the field "Filters" to "student1@example.com"
215     And I press key "13" in the field "Filters"
216     Then I should see "Student 1" in the "participants" "table"
217     And I should not see "Student 2" in the "participants" "table"
218     And I should not see "Teacher 1" in the "participants" "table"
219     # Search by idnumber (only).
220     And I click on "student1@example.com" "text" in the ".form-autocomplete-selection" "css_element"
221     And I set the field "Filters" to "SID"
222     And I press key "13" in the field "Filters"
223     And I should see "Student 1" in the "participants" "table"
224     And I should see "Student 2" in the "participants" "table"
225     And I should see "Student 3" in the "participants" "table"
226     And I should see "Student 4" in the "participants" "table"
227     And I should not see "Teacher 1" in the "participants" "table"
228     # Search by city (only).
229     And I click on "SID" "text" in the ".form-autocomplete-selection" "css_element"
230     And I set the field "Filters" to "SCITY"
231     And I press key "13" in the field "Filters"
232     And I should see "Student 1" in the "participants" "table"
233     And I should see "Student 2" in the "participants" "table"
234     And I should see "Student 3" in the "participants" "table"
235     And I should see "Student 4" in the "participants" "table"
236     And I should not see "Teacher 1" in the "participants" "table"
237     # Search by country text (only) - should not match.
238     And I click on "SCITY" "text" in the ".form-autocomplete-selection" "css_element"
239     And I set the field "Filters" to "GB"
240     And I press key "13" in the field "Filters"
241     And I should see "Nothing to display"
242     # Check no match.
243     And I click on "GB" "text" in the ".form-autocomplete-selection" "css_element"
244     And I set the field "Filters" to "NOTHING"
245     And I press key "13" in the field "Filters"
246     And I should see "Nothing to display"
248   @javascript
249   Scenario: Filter by user identity fields when cannot see the field data
250     Given I log in as "admin"
251     And I set the following system permissions of "Teacher" role:
252       | moodle/site:viewuseridentity | Prevent |
253     And the following config values are set as admin:
254       | showuseridentity | idnumber,email,city,country |
255     And I log out
256     And I log in as "teacher1"
257     And I am on "Course 1" course homepage
258     And I navigate to course participants
259     # Search by email (only) - should only see visible email + own.
260     When I set the field "Filters" to "@example.com"
261     And I press key "13" in the field "Filters"
262     Then I should not see "Student 1" in the "participants" "table"
263     And I should see "Student 2" in the "participants" "table"
264     And I should not see "Student 3" in the "participants" "table"
265     And I should not see "Student 4" in the "participants" "table"
266     And I should see "Teacher 1" in the "participants" "table"
267     # Search for other fields - should only see own results.
268     And I click on "@example.com" "text" in the ".form-autocomplete-selection" "css_element"
269     And I set the field "Filters" to "SID"
270     And I press key "13" in the field "Filters"
271     And I should see "Nothing to display"
272     And I click on "SID" "text" in the ".form-autocomplete-selection" "css_element"
273     And I set the field "Filters" to "TID"
274     And I press key "13" in the field "Filters"
275     And I should see "Teacher 1" in the "participants" "table"
276     And I set the field "Filters" to "CITY"
277     And I press key "13" in the field "Filters"
278     And I should see "Teacher 1" in the "participants" "table"
279     And I should not see "Student 1" in the "participants" "table"
280     # Check no match.
281     And I set the field "Filters" to "NOTHING"
282     And I press key "13" in the field "Filters"
283     And I should see "Nothing to display"
285   @javascript
286   Scenario: Filter users by first initial
287     Given I log in as "teacher1"
288     And I am on "Course 2" course homepage
289     And I navigate to course participants
290     And I should see "Student 1" in the "participants" "table"
291     And I should see "Student 2" in the "participants" "table"
292     And I should see "Student 3" in the "participants" "table"
293     And I should see "Trendy Learnson" in the "participants" "table"
294     And I should see "Teacher 1" in the "participants" "table"
295     When I click on "T" "link" in the ".firstinitial" "css_element"
296     Then I should see "Trendy Learnson" in the "participants" "table"
297     And I should see "Teacher 1" in the "participants" "table"
298     And I should not see "Student 1" in the "participants" "table"
299     And I should not see "Student 2" in the "participants" "table"
300     And I should not see "Student 3" in the "participants" "table"
302   @javascript
303   Scenario: Filter users by last initial
304     Given I log in as "teacher1"
305     And I am on "Course 2" course homepage
306     And I navigate to course participants
307     And I should see "Student 1" in the "participants" "table"
308     And I should see "Student 2" in the "participants" "table"
309     And I should see "Student 3" in the "participants" "table"
310     And I should see "Trendy Learnson" in the "participants" "table"
311     And I should see "Teacher 1" in the "participants" "table"
312     When I click on "L" "link" in the ".lastinitial" "css_element"
313     Then I should see "Trendy Learnson" in the "participants" "table"
314     And I should not see "Student 1" in the "participants" "table"
315     And I should not see "Student 2" in the "participants" "table"
316     And I should not see "Student 3" in the "participants" "table"
317     And I should not see "Teacher 1" in the "participants" "table"
319   @javascript
320   Scenario: Filter users by first and last initials
321     Given I log in as "teacher1"
322     And I am on "Course 2" course homepage
323     And I navigate to course participants
324     And I should see "Student 1" in the "participants" "table"
325     And I should see "Student 2" in the "participants" "table"
326     And I should see "Student 3" in the "participants" "table"
327     And I should see "Trendy Learnson" in the "participants" "table"
328     And I should see "Teacher 1" in the "participants" "table"
329     When I click on "T" "link" in the ".firstinitial" "css_element"
330     And I click on "L" "link" in the ".lastinitial" "css_element"
331     Then I should see "Trendy Learnson" in the "participants" "table"
332     And I should not see "Student 1" in the "participants" "table"
333     And I should not see "Student 2" in the "participants" "table"
334     And I should not see "Student 3" in the "participants" "table"
335     And I should not see "Teacher 1" in the "participants" "table"