Merge branch 'MDL-68286-master' of git://github.com/andrewnicols/moodle
[moodle.git] / badges / tests / behat / award_badge.feature
1 @core @core_badges @_file_upload
2 Feature: Award badges
3   In order to award badges to users for their achievements
4   As an admin
5   I need to add criteria to badges in the system
7   @javascript
8   Scenario: Award badge on other badges as criteria
9     Given the following "users" exist:
10       | username | firstname | lastname | email |
11       | teacher1 | Teacher | 1 | teacher1@example.com |
12       | student1 | Student | 1 | student1@example.com |
13     And the following "courses" exist:
14       | fullname | shortname | category | groupmode |
15       | Course 1 | C1 | 0 | 1 |
16     And the following "course enrolments" exist:
17       | user | course | role |
18       | teacher1 | C1 | editingteacher |
19       | student1 | C1 | student |
20     And I log in as "teacher1"
21     And I am on "Course 1" course homepage
22     # Create course badge 1.
23     And I navigate to "Badges > Add a new badge" in current page administration
24     And I follow "Add a new badge"
25     And I set the following fields to these values:
26       | Name | Course Badge 1 |
27       | Description | Course badge 1 description |
28       | issuername | Tester of course badge |
29     And I upload "badges/tests/behat/badge.png" file to "Image" filemanager
30     And I press "Create badge"
31     And I set the field "type" to "Manual issue by role"
32     And I expand all fieldsets
33     # Set to ANY of the roles awards badge.
34     And I set the field "Teacher" to "1"
35     And I set the field "Any of the selected roles awards the badge" to "1"
36     And I press "Save"
37     And I press "Enable access"
38     And I press "Continue"
39     # Badge #2
40     And I am on "Course 1" course homepage
41     And I navigate to "Badges > Add a new badge" in current page administration
42     And I follow "Add a new badge"
43     And I set the following fields to these values:
44       | Name | Course Badge 2 |
45       | Description | Course badge 2 description |
46       | issuername | Tester of course badge |
47     And I upload "badges/tests/behat/badge.png" file to "Image" filemanager
48     And I press "Create badge"
49     # Set "course badge 1" as criteria
50     And I set the field "type" to "Awarded badges"
51     And I set the field "id_badge_badges" to "Course Badge 1"
52     And I press "Save"
53     And I press "Enable access"
54     And I press "Continue"
55     And I follow "Manage badges"
56     And I follow "Course Badge 1"
57     And I follow "Recipients (0)"
58     And I press "Award badge"
59     # Award course badge 1 to student 1.
60     And I set the field "potentialrecipients[]" to "Student 1 (student1@example.com)"
61     When I press "Award badge"
62     And I follow "Course Badge 1"
63     And I follow "Recipients (1)"
64     Then I should see "Recipients (1)"
65     And I log out
66     # Student 1 should have both badges.
67     And I log in as "student1"
68     And I follow "Profile" in the user menu
69     When I click on "Course 1" "link" in the "region-main" "region"
70     Then I should see "Course Badge 1"
71     And I should see "Course Badge 2"
72     # Student 1 should have both badges also in the Badges navigation section.
73     When I follow "Badges"
74     Then I should see "Course Badge 1"
75     And I should see "Course Badge 2"
76     And I should not see "Manage badges"
77     And I should not see "Add a new badge"
78     And I log out
79     # Teacher 1 should have access to manage/create badges in the Badges navigation section.
80     When I log in as "teacher1"
81     And I am on "Course 1" course homepage
82     And I follow "Badges"
83     Then I should see "Course Badge 1"
84     And I should see "Course Badge 2"
85     And I should see "Manage badges"
86     And I should see "Add a new badge"
87     # Teacher 1 should NOT have access to manage/create site badges in the Site badges section.
88     When I am on homepage
89     And I press "Customise this page"
90    # TODO MDL-57120 site "Badges" link not accessible without navigation block.
91     And I add the "Navigation" block if not present
92     And I click on "Site pages" "list_item" in the "Navigation" "block"
93     And I click on "Site badges" "link" in the "Navigation" "block"
94     Then I should see "There are no badges available."
95     And I should not see "Manage badges"
96     And I should not see "Add a new badge"
98   @javascript
99   Scenario: Award profile badge
100     Given I log in as "admin"
101     And I navigate to "Badges > Add a new badge" in site administration
102     And I set the following fields to these values:
103       | Name | Profile Badge |
104       | Description | Test badge description |
105       | issuername | Test Badge Site |
106       | issuercontact | testuser@example.com |
107     And I upload "badges/tests/behat/badge.png" file to "Image" filemanager
108     And I press "Create badge"
109     And I set the field "type" to "Profile completion"
110     And I expand all fieldsets
111     And I set the field "First name" to "1"
112     And I set the field "Email address" to "1"
113     And I set the field "Phone" to "1"
114     And I set the field "id_description" to "Criterion description"
115     When I press "Save"
116     Then I should see "Profile completion"
117     And I should see "First name"
118     And I should see "Email address"
119     And I should see "Phone"
120     And I should see "Criterion description"
121     And I should not see "Criteria for this badge have not been set up yet."
122     And I press "Enable access"
123     And I press "Continue"
124     And I open my profile in edit mode
125     And I expand all fieldsets
126     And I set the field "Phone" to "123456789"
127     And I press "Update profile"
128     And I follow "Profile" in the user menu
129     Then I should see "Profile Badge"
130     And I should not see "There are no badges available."
132   @javascript
133   Scenario: Award site badge
134     Given the following "users" exist:
135       | username | firstname | lastname | email |
136       | teacher | teacher | 1 | teacher1@example.com |
137       | student | student | 1 | student1@example.com |
138     And I log in as "admin"
139     And I navigate to "Badges > Add a new badge" in site administration
140     And I set the following fields to these values:
141       | Name | Site Badge |
142       | Description | Site badge description |
143       | issuername | Tester of site badge |
144     And I upload "badges/tests/behat/badge.png" file to "Image" filemanager
145     And I press "Create badge"
146     And I set the field "type" to "Manual issue by role"
147     And I set the field "Teacher" to "1"
148     And I press "Save"
149     And I press "Enable access"
150     And I press "Continue"
151     And I follow "Recipients (0)"
152     And I press "Award badge"
153     And I set the field "potentialrecipients[]" to "teacher 1 (teacher1@example.com)"
154     And I press "Award badge"
155     And I set the field "potentialrecipients[]" to "student 1 (student1@example.com)"
156     And I press "Award badge"
157     When I follow "Site Badge"
158     Then I should see "Recipients (2)"
159     And I log out
160     And I log in as "student"
161     And I follow "Profile" in the user menu
162     Then I should see "Site Badge"
164   @javascript
165   Scenario: Award course badge
166     Given the following "users" exist:
167       | username | firstname | lastname | email |
168       | teacher1 | Teacher | 1 | teacher1@example.com |
169       | student1 | Student | 1 | student1@example.com |
170       | student2 | Student | 2 | student2@example.com |
171     And the following "courses" exist:
172       | fullname | shortname | category | groupmode |
173       | Course 1 | C1 | 0 | 1 |
174     And the following "course enrolments" exist:
175       | user | course | role |
176       | teacher1 | C1 | editingteacher |
177       | student1 | C1 | student |
178       | student2 | C1 | student |
179     And I log in as "teacher1"
180     And I am on "Course 1" course homepage
181     And I navigate to "Badges > Add a new badge" in current page administration
182     And I follow "Add a new badge"
183     And I set the following fields to these values:
184       | Name | Course Badge |
185       | Description | Course badge description |
186       | issuername | Tester of course badge |
187     And I upload "badges/tests/behat/badge.png" file to "Image" filemanager
188     And I press "Create badge"
189     And I set the field "type" to "Manual issue by role"
190     And I set the field "Teacher" to "1"
191     And I press "Save"
192     And I press "Enable access"
193     And I press "Continue"
194     And I follow "Recipients (0)"
195     And I press "Award badge"
196     And I set the field "potentialrecipients[]" to "Student 2 (student2@example.com)"
197     And I press "Award badge"
198     And I set the field "potentialrecipients[]" to "Student 1 (student1@example.com)"
199     When I press "Award badge"
200     And I follow "Course Badge"
201     Then I should see "Recipients (2)"
202     And I log out
203     And I log in as "student1"
204     And I follow "Profile" in the user menu
205     And I click on "Course 1" "link" in the "region-main" "region"
206     And I should see "Course Badge"
208   @javascript
209   Scenario: Award badge on activity completion
210     Given the following "courses" exist:
211       | fullname | shortname | category |
212       | Course 1 | C1 | 0 |
213     And the following "users" exist:
214       | username | firstname | lastname | email |
215       | teacher1 | Teacher | Frist | teacher1@example.com |
216       | student1 | Student | First | student1@example.com |
217     And the following "course enrolments" exist:
218       | user | course | role |
219       | teacher1 | C1 | editingteacher |
220       | student1 | C1 | student |
221     And I log in as "teacher1"
222     And I am on "Course 1" course homepage
223     And I navigate to "Edit settings" in current page administration
224     And I set the following fields to these values:
225       | Enable completion tracking | Yes |
226     And I press "Save and display"
227     And I turn editing mode on
228     And I add a "Assignment" to section "1" and I fill the form with:
229       | Assignment name | Test assignment name |
230       | Description | Submit your online text |
231       | id_completion | 1                     |
232     And I am on "Course 1" course homepage
233     And I navigate to "Badges > Add a new badge" in current page administration
234     And I follow "Add a new badge"
235     And I set the following fields to these values:
236       | Name | Course Badge |
237       | Description | Course badge description |
238       | issuername | Tester of course badge |
239     And I upload "badges/tests/behat/badge.png" file to "Image" filemanager
240     And I press "Create badge"
241     And I set the field "type" to "Activity completion"
242     And I set the field "Test assignment name" to "1"
243     And I press "Save"
244     And I press "Enable access"
245     When I press "Continue"
246     And I log out
247     And I log in as "student1"
248     And I follow "Profile" in the user menu
249     And I click on "Course 1" "link" in the "region-main" "region"
250     Then I should not see "badges"
251     And I am on "Course 1" course homepage
252     And I click on "Not completed: Test assignment name" "icon"
253     And I follow "Profile" in the user menu
254     And I click on "Course 1" "link" in the "region-main" "region"
255     Then I should see "Course Badge"
257   @javascript
258   Scenario: Award badge on course completion
259     Given the following "courses" exist:
260       | fullname | shortname | category |
261       | Course 1 | C1 | 0 |
262     And the following "users" exist:
263       | username | firstname | lastname | email |
264       | teacher1 | Teacher | Frist | teacher1@example.com |
265       | student1 | Student | First | student1@example.com |
266     And the following "course enrolments" exist:
267       | user | course | role |
268       | teacher1 | C1 | editingteacher |
269       | student1 | C1 | student |
270     And I log in as "teacher1"
271     And I am on "Course 1" course homepage
272     And I navigate to "Edit settings" in current page administration
273     And I set the following fields to these values:
274       | Enable completion tracking | Yes |
275     And I press "Save and display"
276     And I turn editing mode on
277     And I add a "Assignment" to section "1" and I fill the form with:
278       | Assignment name | Test assignment name |
279       | Description | Submit your online text |
280       | assignsubmission_onlinetext_enabled | 1 |
281       | id_completion | 1                     |
282     And I navigate to "Course completion" in current page administration
283     And I set the field "id_overall_aggregation" to "2"
284     And I click on "Condition: Activity completion" "link"
285     And I set the field "Assignment - Test assignment name" to "1"
286     And I press "Save changes"
287     And I am on "Course 1" course homepage
288     And I navigate to "Badges > Add a new badge" in current page administration
289     And I follow "Add a new badge"
290     And I set the following fields to these values:
291       | Name | Course Badge |
292       | Description | Course badge description |
293       | issuername | Tester of course badge |
294     And I upload "badges/tests/behat/badge.png" file to "Image" filemanager
295     And I press "Create badge"
296     And I set the field "type" to "Course completion"
297     And I set the field with xpath ".//*[contains(., 'Minimum grade required')]/ancestor::*[contains(concat(' ', @class, ' '), ' fitem ')]//input[1]" to "0"
298     And I press "Save"
299     And I press "Enable access"
300     When I press "Continue"
301     And I log out
302     And I log in as "student1"
303     And I follow "Profile" in the user menu
304     And I click on "Course 1" "link" in the "region-main" "region"
305     Then I should not see "badges"
306     And I am on "Course 1" course homepage
307     And I click on "Not completed: Test assignment name" "icon"
308     And I log out
309     # Completion cron won't mark the whole course completed unless the
310     # individual criteria was marked completed more than a second ago. So
311     # run it twice, first to mark the criteria and second for the course.
312     And I run the scheduled task "core\task\completion_regular_task"
313     And I wait "1" seconds
314     And I run the scheduled task "core\task\completion_regular_task"
315     # The student should now see their badge.
316     And I log in as "student1"
317     And I follow "Profile" in the user menu
318     Then I should see "Course Badge"
320   @javascript
321   Scenario: All of the selected roles can award badges
322     Given the following "users" exist:
323       | username | firstname | lastname | email |
324       | teacher1 | Teacher | 1 | teacher1@example.com |
325       | student1 | Student | 1 | student1@example.com |
326       | student2 | Student | 2 | student2@example.com |
327     And the following "courses" exist:
328       | fullname | shortname | category | groupmode |
329       | Course 1 | C1 | 0 | 1 |
330     And the following "course enrolments" exist:
331       | user | course | role |
332       | teacher1 | C1 | editingteacher |
333       | student1 | C1 | student |
334       | student2 | C1 | student |
335     And I log in as "teacher1"
336     And I am on "Course 1" course homepage
337     # Create course badge 1.
338     And I navigate to "Badges > Add a new badge" in current page administration
339     And I follow "Add a new badge"
340     And I set the following fields to these values:
341       | Name | Course Badge 1 |
342       | Description | Course badge description |
343       | issuername | Tester of course badge |
344     And I upload "badges/tests/behat/badge.png" file to "Image" filemanager
345     And I press "Create badge"
346     And I set the field "type" to "Manual issue by role"
347     And I expand all fieldsets
348     # Set to ANY of the roles awards badge.
349     And I set the field "Teacher" to "1"
350     And I set the field "Any of the selected roles awards the badge" to "1"
351     And I press "Save"
352     And I press "Enable access"
353     And I press "Continue"
354     And I follow "Recipients (0)"
355     And I press "Award badge"
356     # Award course badge 1 to student 1.
357     And I set the field "potentialrecipients[]" to "Student 1 (student1@example.com)"
358     When I press "Award badge"
359     And I follow "Course Badge 1"
360     And I follow "Recipients (1)"
361     Then I should see "Recipients (1)"
362     # Add course badge 2.
363     And I am on "Course 1" course homepage
364     And I navigate to "Badges > Add a new badge" in current page administration
365     And I follow "Add a new badge"
366     And I set the following fields to these values:
367       | Name | Course Badge 2 |
368       | Description | Course badge description |
369       | issuername | Tester of course badge |
370     And I upload "badges/tests/behat/badge.png" file to "Image" filemanager
371     And I press "Create badge"
372     And I set the field "type" to "Manual issue by role"
373     And I expand all fieldsets
374     # Set to ALL of the selected roles award badge.
375     And I set the field "Teacher" to "1"
376     And I set the field "All of the selected roles award the badge" to "1"
377     And I press "Save"
378     And I press "Enable access"
379     And I press "Continue"
380     And I follow "Recipients (0)"
381     And I press "Award badge"
382     # Award course badge 2 to student 2.
383     And I set the field "potentialrecipients[]" to "Student 2 (student2@example.com)"
384     When I press "Award badge"
385     And I follow "Course Badge 2"
386     And I follow "Recipients (1)"
387     Then I should see "Recipients (1)"
388     And I log out
389     And I trigger cron
390     # Student 1 should have just course badge 1.
391     And I log in as "student1"
392     And I follow "Profile" in the user menu
393     When I click on "Course 1" "link" in the "region-main" "region"
394     Then I should see "Course Badge 1"
395     And I should not see "Course Badge 2"
396     And I log out
397     # Student 2 should have just course badge 2.
398     And I log in as "student2"
399     And I follow "Profile" in the user menu
400     When I click on "Course 1" "link" in the "region-main" "region"
401     Then I should see "Course Badge 2"
402     Then I should not see "Course Badge 1"
404   @javascript
405   Scenario: Revoke badge
406     Given the following "users" exist:
407       | username | firstname | lastname | email |
408       | teacher1 | Teacher | 1 | teacher1@example.com |
409       | student1 | Student | 1 | student1@example.com |
410       | student2 | Student | 2 | student2@example.com |
411     And the following "courses" exist:
412       | fullname | shortname | category | groupmode |
413       | Course 1 | C1 | 0 | 1 |
414     And the following "course enrolments" exist:
415       | user | course | role |
416       | teacher1 | C1 | editingteacher |
417       | student1 | C1 | student |
418       | student2 | C1 | student |
419     And I log in as "teacher1"
420     And I am on "Course 1" course homepage
421     And I navigate to "Badges > Add a new badge" in current page administration
422     And I follow "Add a new badge"
423     And I set the following fields to these values:
424       | Name | Course Badge |
425       | Description | Course badge description |
426       | issuername | Tester of course badge |
427     And I upload "badges/tests/behat/badge.png" file to "Image" filemanager
428     And I press "Create badge"
429     And I set the field "type" to "Manual issue by role"
430     And I set the field "Teacher" to "1"
431     And I press "Save"
432     And I press "Enable access"
433     And I press "Continue"
434     And I follow "Recipients (0)"
435     And I press "Award badge"
436     And I set the field "potentialrecipients[]" to "Student 2 (student2@example.com)"
437     And I press "Award badge"
438     And I set the field "potentialrecipients[]" to "Student 1 (student1@example.com)"
439     When I press "Award badge"
440     And I follow "Course Badge"
441     Then I should see "Recipients (2)"
442     And I follow "Recipients (2)"
443     And I press "Award badge"
444     And I set the field "existingrecipients[]" to "Student 2 (student2@example.com)"
445     And I press "Revoke badge"
446     And I set the field "existingrecipients[]" to "Student 1 (student1@example.com)"
447     When I press "Revoke badge"
448     And I follow "Course Badge"
449     Then I should see "Recipients (0)"