MDL-47676 core_grades: Behat test for negative weights.
[moodle.git] / grade / tests / behat / grade_natural_normalisation.feature
1 @core @core_grades
2 Feature: We can use natural aggregation and weights will be normalised to a total of one hundred
3   In order to override weights
4   As a teacher
5   I need to add assessments to the gradebook.
7   Background:
8     Given the following "courses" exist:
9       | fullname | shortname | category | groupmode |
10       | Course 1 | C1 | 0 | 1 |
11     And the following "users" exist:
12       | username | firstname | lastname | email | idnumber |
13       | teacher1 | Teacher | 1 | teacher1@asd.com | t1 |
14       | student1 | Student | 1 | student1@asd.com | s1 |
15     And the following "course enrolments" exist:
16       | user | course | role |
17       | teacher1 | C1 | editingteacher |
18       | student1 | C1 | student |
19     And the following "grade categories" exist:
20       | fullname | course |
21       | Sub category 1 | C1 |
22     And the following "activities" exist:
23       | activity | course | idnumber | name | intro | grade |
24       | assign | C1 | a1 | Test assignment one | Submit something! | 300 |
25       | assign | C1 | a2 | Test assignment two | Submit something! | 100 |
26       | assign | C1 | a3 | Test assignment three | Submit something! | 150 |
27       | assign | C1 | a4 | Test assignment four | Submit nothing! | 150 |
28     And the following "activities" exist:
29       | activity | course | idnumber | name | intro | gradecategory | grade |
30       | assign | C1 | a5 | Test assignment five | Submit something! | Sub category 1 | 20 |
31       | assign | C1 | a6 | Test assignment six | Submit something! | Sub category 1 | 10 |
32       | assign | C1 | a7 | Test assignment seven | Submit nothing! | Sub category 1 | 15 |
33     And I log in as "teacher1"
34     And I follow "Course 1"
35     And I follow "Grades"
36     And I set the field "Grade report" to "Categories and items"
38   @javascript
39   Scenario: Setting all weights in a category to exactly one hundred in total.
41     And the field "Weight of Test assignment five" matches value "44.444"
42     And the field "Weight of Test assignment six" matches value "22.222"
43     And the field "Weight of Test assignment seven" matches value "33.333"
44     When I set the field "Override weight of Test assignment five" to "1"
45     And I set the field "Override weight of Test assignment six" to "1"
46     And I set the field "Override weight of Test assignment seven" to "1"
47     And I set the field "Weight of Test assignment five" to "30"
48     And I set the field "Weight of Test assignment six" to "50"
49     And I set the field "Weight of Test assignment seven" to "20"
50     And I press "Save changes"
52     Then I should not see "Your weights have been adjusted to total 100."
53     And the field "Weight of Test assignment five" matches value "30.0"
54     And the field "Weight of Test assignment six" matches value "50.0"
55     And the field "Weight of Test assignment seven" matches value "20.0"
57   @javascript
58   Scenario: Setting all weights in a category to less than one hundred is normalised.
60     When I set the field "Override weight of Test assignment five" to "1"
61     And I set the field "Override weight of Test assignment six" to "1"
62     And I set the field "Override weight of Test assignment seven" to "1"
63     And I set the field "Weight of Test assignment five" to "1"
64     And I set the field "Weight of Test assignment six" to "1"
65     And I set the field "Weight of Test assignment seven" to "2"
66     And I press "Save changes"
68     Then I should see "Your weights have been adjusted to total 100."
69     And the field "Weight of Test assignment five" matches value "25.0"
70     And the field "Weight of Test assignment six" matches value "25.0"
71     And the field "Weight of Test assignment seven" matches value "50.0"
73   @javascript
74   Scenario: Set one of the grade item weights to a figure over one hundred.
76     When I set the field "Override weight of Test assignment five" to "1"
77     And I set the field "Weight of Test assignment five" to "120"
78     And I press "Save changes"
80     Then I should see "Your weights have been adjusted to total 100."
81     And the field "Weight of Test assignment five" matches value "100.0"
82     And the field "Weight of Test assignment six" matches value "0.0"
83     And the field "Weight of Test assignment seven" matches value "0.0"
85   @javascript
86   Scenario: Setting several but not all grade item weights to over one hundred each.
88     When I set the field "Override weight of Test assignment five" to "1"
89     And I set the field "Override weight of Test assignment six" to "1"
90     And I set the field "Weight of Test assignment five" to "150"
91     And I set the field "Weight of Test assignment six" to "150"
92     And I press "Save changes"
94     Then I should see "Your weights have been adjusted to total 100."
95     And the field "Weight of Test assignment five" matches value "50.000"
96     And the field "Weight of Test assignment six" matches value "50.000"
97     And the field "Weight of Test assignment seven" matches value "0.0"
99   @javascript
100   Scenario: Grade items weights are normalised when all grade item weights are overridden (sum exactly 100). Extra credit is set to zero.
102     When I follow "Edit  assign Test assignment seven"
103     And I set the field "Extra credit" to "1"
104     And I press "Save changes"
105     And the field "Weight of Test assignment five" matches value "66.667"
106     And the field "Weight of Test assignment six" matches value "33.333"
107     And the field "Weight of Test assignment seven" matches value "50.0"
108     And I set the field "Override weight of Test assignment five" to "1"
109     And I set the field "Override weight of Test assignment six" to "1"
110     And I set the field "Weight of Test assignment five" to "60"
111     And I set the field "Weight of Test assignment six" to "40"
112     And I press "Save changes"
114     Then I should see "Your weights have been adjusted to total 100."
115     And the field "Weight of Test assignment five" matches value "60.000"
116     And the field "Weight of Test assignment six" matches value "40.000"
117     And the field "Weight of Test assignment seven" matches value "0.0"
118     And I follow "Reset weights of Sub category 1"
119     And the field "Weight of Test assignment five" matches value "66.667"
120     And the field "Weight of Test assignment six" matches value "33.333"
121     And the field "Weight of Test assignment seven" matches value "50.0"
123   @javascript
124   Scenario: Grade items weights are normalised when all grade item weights are overridden (sum over 100). Extra credit is set to zero.
126     When I follow "Edit  assign Test assignment seven"
127     And I set the field "Extra credit" to "1"
128     And I press "Save changes"
129     And I set the field "Override weight of Test assignment five" to "1"
130     And I set the field "Override weight of Test assignment six" to "1"
131     And I set the field "Weight of Test assignment five" to "60"
132     And I set the field "Weight of Test assignment six" to "50"
133     And I press "Save changes"
135     Then I should see "Your weights have been adjusted to total 100."
136     And the field "Weight of Test assignment five" matches value "54.545"
137     And the field "Weight of Test assignment six" matches value "45.455"
138     And the field "Weight of Test assignment seven" matches value "0.0"
139     And I follow "Reset weights of Sub category 1"
140     And the field "Weight of Test assignment five" matches value "66.667"
141     And the field "Weight of Test assignment six" matches value "33.333"
142     And the field "Weight of Test assignment seven" matches value "50.0"
144   @javascript
145   Scenario: Grade items weights are normalised when all grade item weights are overridden (sum under 100). Extra credit is set to zero.
147     When I follow "Edit  assign Test assignment seven"
148     And I set the field "Extra credit" to "1"
149     And I press "Save changes"
150     And I set the field "Override weight of Test assignment five" to "1"
151     And I set the field "Override weight of Test assignment six" to "1"
152     And I set the field "Weight of Test assignment five" to "40"
153     And I set the field "Weight of Test assignment six" to "30"
154     And I press "Save changes"
156     Then I should see "Your weights have been adjusted to total 100."
157     And the field "Weight of Test assignment five" matches value "57.143"
158     And the field "Weight of Test assignment six" matches value "42.857"
159     And the field "Weight of Test assignment seven" matches value "0.0"
160     And I follow "Reset weights of Sub category 1"
161     And the field "Weight of Test assignment five" matches value "66.667"
162     And the field "Weight of Test assignment six" matches value "33.333"
163     And the field "Weight of Test assignment seven" matches value "50.0"
165   @javascript
166   Scenario: Grade items weights are normalised when not all grade item weights are overridden. Extra credit is set respectful to non-overridden items.
168     When I follow "Edit  assign Test assignment seven"
169     And I set the field "Extra credit" to "1"
170     And I press "Save changes"
171     And I set the field "Override weight of Test assignment five" to "1"
172     And I set the field "Weight of Test assignment five" to "40"
173     And I press "Save changes"
175     Then I should see "Your weights have been adjusted to total 100."
176     And the field "Weight of Test assignment five" matches value "40.00"
177     And the field "Weight of Test assignment six" matches value "60.000"
178     And the field "Weight of Test assignment seven" matches value "90.0"
179     And I follow "Reset weights of Sub category 1"
180     And the field "Weight of Test assignment five" matches value "66.667"
181     And the field "Weight of Test assignment six" matches value "33.333"
182     And the field "Weight of Test assignment seven" matches value "50.0"
184   @javascript
185   Scenario: The extra credit grade item weight is overridden to a figure over one hundred and then
186   the grade item is set to normal.
188     When I follow "Edit  assign Test assignment seven"
189     And I set the field "Extra credit" to "1"
190     And I press "Save changes"
191     And I set the field "Override weight of Test assignment seven" to "1"
192     And I set the field "Weight of Test assignment seven" to "105"
193     And I press "Save changes"
194     Then I should not see "Your weights have been adjusted to total 100."
195     And the field "Weight of Test assignment five" matches value "66.667"
196     And the field "Weight of Test assignment six" matches value "33.333"
197     And the field "Weight of Test assignment seven" matches value "105.0"
198     And I follow "Edit  assign Test assignment seven"
199     And I set the field "Extra credit" to "0"
200     And I press "Save changes"
201     And I should see "Your weights have been adjusted to total 100."
203     And the field "Weight of Test assignment five" matches value "0.0"
204     And the field "Weight of Test assignment six" matches value "0.0"
205     And the field "Weight of Test assignment seven" matches value "100.0"
207   @javascript
208   Scenario: The extra credit grade item weight is overridden to a figure over one hundred and then
209   the grade category is reset.
211     When I follow "Edit  assign Test assignment seven"
212     And I set the field "Extra credit" to "1"
213     And I press "Save changes"
214     And I set the field "Override weight of Test assignment seven" to "1"
215     And I set the field "Weight of Test assignment seven" to "105"
216     And I press "Save changes"
218     And I follow "Reset weights of Sub category 1"
219     And the field "Weight of Test assignment five" matches value "66.667"
220     And the field "Weight of Test assignment six" matches value "33.333"
221     And the field "Weight of Test assignment seven" matches value "50.0"
223   @javascript
224   Scenario: Two out of three grade items weights are overridden and one is not.
225   The overridden grade item weights total over one hundred.
227     Given I set the field "Override weight of Test assignment six" to "1"
228     And I set the field "Override weight of Test assignment seven" to "1"
229     And I set the field "Weight of Test assignment six" to "55"
230     And I set the field "Weight of Test assignment seven" to "65"
231     And I press "Save changes"
232     And I should see "Your weights have been adjusted to total 100."
234     Then the field "Weight of Test assignment five" matches value "0.0"
235     And the field "Weight of Test assignment six" matches value "45.833"
236     And the field "Weight of Test assignment seven" matches value "54.167"
238   @javascript
239   Scenario: With one grade item set as extra credit, when I reset the weights for a category they return to the natural weights.
241   When I follow "Edit  assign Test assignment five"
242   And I set the field "Extra credit" to "1"
243   And I press "Save changes"
244   And I set the field "Override weight of Test assignment six" to "1"
245   And I set the field "Override weight of Test assignment seven" to "1"
246   And I set the field "Weight of Test assignment six" to "55"
247   And I set the field "Weight of Test assignment seven" to "40"
248   And I press "Save changes"
249   And I follow "Reset weights of Sub category 1"
250   Then the field "Weight of Test assignment five" matches value "80.0"
251   And the field "Weight of Test assignment six" matches value "40.0"
252   And the field "Weight of Test assignment seven" matches value "60.0"
254   @javascript
255   Scenario: Overriding a grade item with a negative value results in the value being changed to zero.
257   When I set the field "Override weight of Test assignment five" to "1"
258   And I set the field "Weight of Test assignment five" to "-15"
259   And I press "Save changes"
260   Then the field "Weight of Test assignment five" matches value "0.0"
261   And the field "Weight of Test assignment six" matches value "40.0"
262   And the field "Weight of Test assignment seven" matches value "60.0"
263   And I set the field "Override weight of Test assignment six" to "1"
264   And I set the field "Weight of Test assignment six" to "-25"
265   And I press "Save changes"
266   And the field "Weight of Test assignment six" matches value "0.0"
267   And the field "Weight of Test assignment seven" matches value "100.0"
268   And I follow "Reset weights of Sub category 1"
269   And I set the field "Override weight of Test assignment five" to "1"
270   And I set the field "Override weight of Test assignment six" to "1"
271   And I set the field "Weight of Test assignment five" to "-10"
272   And I set the field "Weight of Test assignment six" to "120"
273   And I press "Save changes"
274   And the field "Weight of Test assignment five" matches value "0.0"
275   And the field "Weight of Test assignment six" matches value "100.0"
276   And the field "Weight of Test assignment seven" matches value "0.0"