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