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