MDL-53279 grades: Recalculate only required items
[moodle.git] / grade / report / grader / tests / behat / ajax_grader.feature
1 @gradereport @gradereport_grader
2 Feature: Using the AJAX grading feature of Grader report to update grades and feedback
3   In order to use AJAX grading
4   As a teacher
5   I need to be able to update and verify grades
8   Background:
9     Given the following "courses" exist:
10       | fullname | shortname | category | groupmode |
11       | Course 1 | C1 | 0 | 1 |
12     And the following "users" exist:
13       | username | firstname | lastname | email | idnumber |
14       | teacher1 | Teacher | 1 | teacher1@example.com | t1 |
15       | student1 | Student | 1 | student1@example.com | s1 |
16       | student2 | Student | 2 | student2@example.com | s2 |
17       | student3 | Student | 3 | student3@example.com | s3 |
18     And the following "course enrolments" exist:
19       | user | course | role |
20       | teacher1 | C1 | editingteacher |
21       | student1 | C1 | student |
22       | student2 | C1 | student |
23       | student3 | C1 | student |
24     And the following "scales" exist:
25       | name       | scale                                  |
26       | Test Scale | Disappointing,Good,Very good,Excellent |
27     And the following "grade categories" exist:
28       | fullname  | course |
29       | Grade Cat | C1     |
30     And the following "grade categories" exist:
31       | fullname  | course | gradecategory |
32       | Grade Sub Cat  | C1 | Grade Cat |
33     And the following "grade items" exist:
34       | itemname | course | locked | gradetype | gradecategory |
35       | Item 1  | C1 | 0 | value | Grade Cat |
36       | Item VU | C1 | 0 | value | Grade Cat |
37       | Item VL | C1 | 1 | value | Grade Cat |
38       | Item TU | C1 | 0 | text  | Grade Cat |
39       | Item TL | C1 | 1 | text  | Grade Cat |
40       | Item 3  | C1 | 0 | value | Grade Cat |
41       | Calc Item  | C1 | 0 | value | Grade Cat     |
42       | Item VUSub | C1 | 0 | value | Grade Sub Cat |
43     And the following "grade items" exist:
44       | itemname   | course | locked | gradetype | scale | gradecategory |
45       | Item SU    | C1 | 0 | scale | Test Scale | Grade Cat |
46       | Item SL    | C1 | 1 | scale | Test Scale | Grade Cat |
47     And the following config values are set as admin:
48       | grade_report_showaverages | 0 |
49       | grade_report_enableajax | 1 |
52   @javascript
53   Scenario: Use the grader report without editing, with AJAX on and quick feedback off
54     When the following config values are set as admin:
55       | grade_overridecat | 1 |
56       | grade_report_showquickfeedback | 0 |
57     And I log in as "teacher1"
58     And I follow "Course 1"
59     And I navigate to "Grades" node in "Course administration"
60     And I click on student "Student 2" for grade item "Item VU"
61     Then I should see a grade field for "Student 2" and grade item "Item VU"
62     And I should not see a feedback field for "Student 2" and grade item "Item VU"
63     And I set the field "ajaxgrade" to "33"
64     And I press key "13" in the field "ajaxgrade"
65     And I should not see a grade field for "Student 2" and grade item "Item VU"
66     And I should not see a feedback field for "Student 2" and grade item "Item VU"
67     And I click on student "Student 3" for grade item "Item VU"
68     And I set the field "ajaxgrade" to "50"
69     And I press key "13" in the field "ajaxgrade"
70     And I click on student "Student 3" for grade item "Item 1"
71     And I set the field "ajaxgrade" to "80"
72     And I press key "13" in the field "ajaxgrade"
73     And I click on student "Student 3" for grade item "Item SU"
74     And I set the field "ajaxgrade" to "Very good"
75     And I press key "13" in the field "ajaxgrade"
76     And the following should exist in the "user-grades" table:
77       | -1-                | -6-      | -7-      | -13-      | -16-         |
78       | Student 2          | -        | 33.00    | -         | 33.00        |
79       | Student 3          | 80.00    | 50.00    | Very good | 133.00       |
80     And I click on student "Student 3" for grade item "Item VL"
81     And I should not see a grade field for "Student 3" and grade item "Item VL"
82     And I should not see a feedback field for "Student 3" and grade item "Item VL"
83     And I click on student "Student 3" for grade item "Item SL"
84     And I should not see a grade field for "Student 3" and grade item "Item SL"
85     And I should not see a feedback field for "Student 3" and grade item "Item SL"
86     And I click on student "Student 3" for grade item "Item TU"
87     And I should not see a grade field for "Student 3" and grade item "Item TU"
88     And I should not see a feedback field for "Student 3" and grade item "Item TU"
89     And I click on student "Student 1" for grade item "Course total"
90     And I should see a grade field for "Student 1" and grade item "Course total"
91     And I should not see a feedback field for "Student 1" and grade item "Course total"
92     And I set the field "ajaxgrade" to "90"
93     And I press key "13" in the field "ajaxgrade"
94     And the following should exist in the "user-grades" table:
95       | -1-                | -16-      |
96       | Student 1          | 90.00     |
97     And I navigate to "Grader report" node in "Grade administration"
98     And the following should exist in the "user-grades" table:
99       | -1-                | -6-   | -7-   | -13-      | -16-      |
100       | Student 1          | -     | -     | -         | 90.00     |
101       | Student 2          | -     | 33.00 | -         | 33.00     |
102       | Student 3          | 80.00 | 50.00 | Very good | 133.00    |
104   @javascript
105   Scenario: Use the grader report without editing, with AJAX and quick feedback on
106     When the following config values are set as admin:
107       | grade_overridecat | 1 |
108       | grade_report_showquickfeedback | 1 |
109     And I log in as "teacher1"
110     And I follow "Course 1"
111     And I navigate to "Grades" node in "Course administration"
112     And I click on student "Student 2" for grade item "Item VU"
113     Then I should see a grade field for "Student 2" and grade item "Item VU"
114     And I should see a feedback field for "Student 2" and grade item "Item VU"
115     And I set the field "ajaxgrade" to "33"
116     And I set the field "ajaxfeedback" to "Student 2 VU feedback"
117     And I press key "13" in the field "ajaxfeedback"
118     And I click on student "Student 3" for grade item "Item VL"
119     And I should not see a grade field for "Student 3" and grade item "Item VL"
120     And I should not see a feedback field for "Student 3" and grade item "Item VL"
121     And I click on student "Student 3" for grade item "Item TU"
122     And I should not see a grade field for "Student 3" and grade item "Item TU"
123     And I should see a feedback field for "Student 3" and grade item "Item TU"
124     And I set the field "ajaxfeedback" to "Student 3 TU feedback"
125     And I press key "13" in the field "ajaxfeedback"
126     And I click on student "Student 2" for grade item "Item SU"
127     And I set the field "ajaxgrade" to "Very good"
128     And I set the field "ajaxfeedback" to "Student 2 SU feedback"
129     And I press key "13" in the field "ajaxfeedback"
130     And I navigate to "Grader report" node in "Grade administration"
131     And the following should exist in the "user-grades" table:
132       | -1-       | -7-   | -13-      | -16-  |
133       | Student 2 | 33.00 | Very good | 36.00 |
134     And I click on student "Student 3" for grade item "Item TU"
135     And the field "ajaxfeedback" matches value "Student 3 TU feedback"
136     And I click on student "Student 2" for grade item "Item SU"
137     And the field "ajaxfeedback" matches value "Student 2 SU feedback"
139   @javascript
140   Scenario: Use the grader report without editing, with AJAX and quick feedback on, without category override
141     When the following config values are set as admin:
142       | grade_overridecat | 0 |
143       | grade_report_showquickfeedback | 1 |
144     And I log in as "teacher1"
145     And I follow "Course 1"
146     And I navigate to "Grades" node in "Course administration"
147     And I click on student "Student 2" for grade item "Item VU"
148     Then I should see a grade field for "Student 2" and grade item "Item VU"
149     And I should see a feedback field for "Student 2" and grade item "Item VU"
150     And I set the field "ajaxgrade" to "33"
151     And I press key "13" in the field "ajaxgrade"
152     And I click on student "Student 2" for grade item "Course total"
153     And I should not see a grade field for "Student 3" and grade item "Course total"
154     And I should not see a feedback field for "Student 3" and grade item "Course total"
155     And the following should exist in the "user-grades" table:
156       | -1-         | -7-      | -16-    |
157       | Student 2   | 33.00    | 33.00   |
159   @javascript
160   Scenario: Use the grader report with editing, with AJAX and quick feedback on, with category override
161     When the following config values are set as admin:
162       | grade_overridecat | 1 |
163       | grade_report_showquickfeedback | 1 |
164     And I log in as "teacher1"
165     And I follow "Course 1"
166     And I navigate to "Grades" node in "Course administration"
167     And I turn editing mode on
168     Then I should not see a grade field for "Student 2" and grade item "Item VL"
169     And I should not see a feedback field for "Student 2" and grade item "Item VL"
170     And I should not see a grade field for "Student 2" and grade item "Item TU"
171     And I should see a feedback field for "Student 2" and grade item "Item TU"
172     And I should see a grade field for "Student 2" and grade item "Course total"
173     And I should see a feedback field for "Student 2" and grade item "Course total"
174     And I give the grade "20.00" to the user "Student 2" for the grade item "Item VU"
175     And I click away from student "Student 2" and grade item "Item VU" value
176     And I give the grade "30.00" to the user "Student 2" for the grade item "Item 1"
177     And I give the feedback "Some feedback" to the user "Student 2" for the grade item "Item 1"
178     And I click away from student "Student 2" and grade item "Item 1" feedback
179     And I give the grade "Very good" to the user "Student 2" for the grade item "Item SU"
180     And I click away from student "Student 2" and grade item "Item SU" value
181     And the grade for "Student 2" in grade item "Grade Cat" should match "53.00"
182     And the grade for "Student 2" in grade item "Course total" should match "53.00"
183     And I turn editing mode off
184     And the following should exist in the "user-grades" table:
185       | -1-        | -6-      | -7-     | -13-      | -15-     | -16-    |
186       | Student 2  | 30.00    | 20.00   | Very good | 53.00    | 53.00   |
187     And I click on student "Student 2" for grade item "Item 1"
188     And the field "ajaxfeedback" matches value "Some feedback"
190   @javascript
191   Scenario: Use the grader report with editing, with AJAX and quick feedback on, without category override
192     When the following config values are set as admin:
193       | grade_overridecat | 0 |
194       | grade_report_showquickfeedback | 1 |
195     And I log in as "teacher1"
196     And I follow "Course 1"
197     And I navigate to "Grades" node in "Course administration"
198     And I turn editing mode on
199     And I change window size to "large"
200     And I set "=[[i1]] + [[i3]] + [[gsc]]" calculation for grade item "Calc Item" with idnumbers:
201       | Item 1        | i1  |
202       | Item 3        | i3  |
203       | Grade Sub Cat | gsc |
204     Then I should not see a grade field for "Student 2" and grade item "Course total"
205     And I should not see a feedback field for "Student 2" and grade item "Course total"
206     And I give the grade "20.00" to the user "Student 2" for the grade item "Item VU"
207     And I click away from student "Student 2" and grade item "Item VU" value
208     And the following should exist in the "user-grades" table:
209       | -1-        | -15-   | -16-  |
210       | Student 2  | 20.00  | 20.00 |
211     And I give the grade "30.00" to the user "Student 2" for the grade item "Item 1"
212     And I click away from student "Student 2" and grade item "Item 1" value
213     And the following should exist in the "user-grades" table:
214       | -1-        | -15-  | -16-  |
215       | Student 2  | 80.00 | 80.00 |
216     And the field "Student 2 Calc Item grade" matches value "30.00"
217     And I give the grade "5.00" to the user "Student 2" for the grade item "Item 3"
218     And I click away from student "Student 2" and grade item "Item 3" value
219     And the following should exist in the "user-grades" table:
220       | -1-        | -15-  | -16- |
221       | Student 2  | 90.00 | 90.00 |
222     And the field "Student 2 Calc Item grade" matches value "35.00"
223     And I give the grade "10.00" to the user "Student 2" for the grade item "Item VUSub"
224     And I click away from student "Student 2" and grade item "Item VUSub" value
225     And the following should exist in the "user-grades" table:
226       | -1-        | -5-   | -15-   | -16-   |
227       | Student 2  | 10.00 | 110.00 | 110.00 |
228     And the field "Student 2 Calc Item grade" matches value "45.00"
229     And I give the feedback "Some feedback" to the user "Student 2" for the grade item "Item 1"
230     And I click away from student "Student 2" and grade item "Item 1" feedback
231     And I turn editing mode off
232     And the following should exist in the "user-grades" table:
233       | -1-        | -4-   | -6-   | -7-   | -11- | -12-  | -15-   | -16-   |
234       | Student 2  | 10.00 | 30.00 | 20.00 | 5.00 | 45.00 | 110.00 | 110.00 |
235     And I click on student "Student 2" for grade item "Item 1"
236     And the field "ajaxfeedback" matches value "Some feedback"