MDL-52292 block testing generators: improve the API
[moodle.git] / admin / tool / behat / tests / behat / data_generators.feature
1 @tool @tool_behat
2 Feature: Set up contextual data for tests
3   In order to write tests quickly
4   As a developer
5   I need to fill the database with fixtures
7   Scenario: Add a bunch of users
8     Given the following "users" exist:
9       | username  | password  | firstname | lastname |
10       | testuser  | testuser  |  |  |
11       | testuser2 | testuser2 | TestFirstname | TestLastname |
12     And I log in as "testuser"
13     And I log out
14     When I log in as "testuser2"
15     Then I should see "TestFirstname"
17   @javascript
18   Scenario: Add a bunch of courses and categories
19     Given the following "categories" exist:
20       | name | category | idnumber |
21       | Cat 1 | 0 | CAT1 |
22       | Cat 2 | CAT1 | CAT2 |
23       | Cat 3 | CAT1 | CAT3 |
24     And the following "courses" exist:
25       | fullname | shortname | category |
26       | Course 1 | COURSE1 | CAT3 |
27       | Course 2 | COURSE2 | CAT3 |
28       | Course 3 | COURSE3 | 0 |
29     When I log in as "admin"
30     And I am on site homepage
31     Then I should see "Course 1"
32     And I should see "Course 2"
33     And I should see "Course 3"
34     And I go to the courses management page
35     And I follow "Cat 1"
36     And I should see "Cat 2"
37     And I should see "Cat 3"
38     And I follow "Cat 3"
39     And I should see "Course 1"
40     And I should see "Course 2"
41     And I follow "Cat 2"
42     And I should see "No courses in this category"
43     And I follow "Miscellaneous"
44     And I should see "Course 3"
46   @javascript
47   Scenario: Add a bunch of groups and groupings
48     Given the following "courses" exist:
49       | fullname | shortname |
50       | Course 1 | C1 |
51     And the following "groups" exist:
52       | name | course | idnumber |
53       | Group 1 | C1 | G1 |
54       | Group 2 | C1 | G2 |
55     And the following "groupings" exist:
56       | name | course | idnumber |
57       | Grouping 1 | C1 | GG1 |
58       | Grouping 2 | C1 | GG2 |
59     When I log in as "admin"
60     And I am on site homepage
61     And I follow "Course 1"
62     And I expand "Users" node
63     And I follow "Groups"
64     Then I should see "Group 1"
65     And I should see "Group 2"
66     And I follow "Groupings"
67     And I should see "Grouping 1"
68     And I should see "Grouping 2"
70   @javascript
71   Scenario: Role overrides
72     Given the following "users" exist:
73       | username | firstname | lastname | email |
74       | teacher1 | Teacher | 1 | teacher1@example.com |
75       | student1 | Student | 1 | student1@example.com |
76     And the following "categories" exist:
77       | name | category | idnumber |
78       | Cat 1 | 0 | CAT1 |
79     And the following "courses" exist:
80       | fullname | shortname |
81       | Course 1 | C1 |
82     And the following "course enrolments" exist:
83       | user | course | role |
84       | student1 | C1 | student |
85       | teacher1 | C1 | editingteacher |
86     And the following "permission overrides" exist:
87       | capability | permission | role | contextlevel | reference |
88       | mod/forum:editanypost | Allow | student | Course | C1 |
89       | mod/forum:replynews | Prevent | editingteacher | Course | C1 |
90     When I log in as "admin"
91     And I am on site homepage
92     And I follow "Course 1"
93     And I expand "Users" node
94     And I follow "Permissions"
95     And I set the field "Advanced role override" to "Student (1)"
96     Then "mod/forum:editanypost" capability has "Allow" permission
97     And I press "Cancel"
98     And I set the field "Advanced role override" to "Teacher (1)"
99     And "mod/forum:replynews" capability has "Prevent" permission
100     And I press "Cancel"
102   Scenario: Add course enrolments
103     Given the following "users" exist:
104       | username | firstname | lastname | email |
105       | student1 | Student | 1 | student1@example.com |
106     And the following "courses" exist:
107       | fullname | shortname | format |
108       | Course 1 | C1 | topics |
109     And the following "course enrolments" exist:
110       | user | course | role |
111       | student1 | C1 | student |
112     When I log in as "student1"
113     And I follow "Course 1"
114     Then I should see "Topic 1"
116   Scenario: Add role assigns
117     Given the following "roles" exist:
118       | name                   | shortname | description      | archetype      |
119       | Custom editing teacher | custom1   | My custom role 1 | editingteacher |
120       | Custom student         | custom2   |                  |                |
121     And the following "users" exist:
122       | username | firstname | lastname | email |
123       | user1 | User | 1 | user1@example.com |
124       | user2 | User | 2 | user2@example.com |
125       | user3 | User | 3 | user3@example.com |
126       | user4 | User | 4 | user4@example.com |
127       | user5 | User | 5 | user5@example.com |
128     And the following "categories" exist:
129       | name | category | idnumber |
130       | Cat 1 | 0 | CAT1 |
131     And the following "courses" exist:
132       | fullname | shortname | category |
133       | Course 1 | C1 | CAT1 |
134     And the following "course enrolments" exist:
135       | user | course | role |
136       | user4 | C1 | custom1 |
137     And the following "role assigns" exist:
138       | user  | role           | contextlevel | reference |
139       | user1 | manager        | System       |           |
140       | user2 | editingteacher | Category     | CAT1      |
141       | user3 | editingteacher | Course       | C1        |
142       | user5 | custom2        | System       |           |
143     When I log in as "user1"
144     And I am on site homepage
145     Then I should see "Front page settings"
146     And I log out
147     And I log in as "user2"
148     And I am on site homepage
149     And I follow "Course 1"
150     And I should see "Turn editing on"
151     And I log out
152     And I log in as "user3"
153     And I am on site homepage
154     And I follow "Course 1"
155     And I should see "Turn editing on"
156     And I log out
157     And I log in as "user4"
158     And I am on site homepage
159     And I follow "Course 1"
160     And I should see "Turn editing on"
161     And I log out
162     And I log in as "user5"
163     And I should see "You are logged in as"
164     And I am on site homepage
165     And I follow "Course 1"
166     And I should see "You can not enrol yourself in this course."
168   Scenario: Add modules
169     Given the following "courses" exist:
170       | fullname | shortname |
171       | Course 1 | C1 |
172     And the following "activities" exist:
173       | activity   | name                   | intro                         | course | idnumber    |
174       | assign     | Test assignment name   | Test assignment description   | C1     | assign1     |
175       | assignment | Test assignment22 name | Test assignment22 description | C1     | assignment1 |
176       | book       | Test book name         | Test book description         | C1     | book1       |
177       | chat       | Test chat name         | Test chat description         | C1     | chat1       |
178       | choice     | Test choice name       | Test choice description       | C1     | choice1     |
179       | data       | Test database name     | Test database description     | C1     | data1       |
180       | feedback   | Test feedback name     | Test feedback description     | C1     | feedback1   |
181       | folder     | Test folder name       | Test folder description       | C1     | folder1     |
182       | forum      | Test forum name        | Test forum description        | C1     | forum1      |
183       | glossary   | Test glossary name     | Test glossary description     | C1     | glossary1   |
184       | imscp      | Test imscp name        | Test imscp description        | C1     | imscp1      |
185       | label      | Test label name        | Test label description        | C1     | label1      |
186       | lesson     | Test lesson name       | Test lesson description       | C1     | lesson1     |
187       | lti        | Test lti name          | Test lti description          | C1     | lti1        |
188       | page       | Test page name         | Test page description         | C1     | page1       |
189       | quiz       | Test quiz name         | Test quiz description         | C1     | quiz1       |
190       | resource   | Test resource name     | Test resource description     | C1     | resource1   |
191       | scorm      | Test scorm name        | Test scorm description        | C1     | scorm1      |
192       | survey     | Test survey name       | Test survey description       | C1     | survey1     |
193       | url        | Test url name          | Test url description          | C1     | url1        |
194       | wiki       | Test wiki name         | Test wiki description         | C1     | wiki1       |
195       | workshop   | Test workshop name     | Test workshop description     | C1     | workshop1   |
196     And the following "scales" exist:
197       | name | scale |
198       | Test Scale 1 | Disappointing, Good, Very good, Excellent |
199     And the following "activities" exist:
200       | activity   | name                            | intro                         | course | idnumber    | grade |
201       | assign     | Test assignment name with scale | Test assignment description   | C1     | assign1     | Test Scale 1 |
202     When I log in as "admin"
203     And I am on site homepage
204     And I follow "Course 1"
205     Then I should see "Test assignment name"
206     # Assignment 2.2 module type is disabled by default
207     # And I should see "Test assignment22 name"
208     And I should see "Test book name"
209     And I should see "Test chat name"
210     And I should see "Test choice name"
211     And I should see "Test database name"
212     # Feedback module type is disabled by default
213     # And I should see "Test feedback name"
214     And I should see "Test folder name"
215     And I should see "Test forum name"
216     And I should see "Test glossary name"
217     And I should see "Test imscp name"
218     # We don't see label name, we see only description:
219     And I should see "Test label description"
220     And I should see "Test lesson name"
221     And I should see "Test lti name"
222     And I should see "Test page name"
223     And I should see "Test quiz name"
224     And I should see "Test resource name"
225     And I should see "Test scorm name"
226     And I should see "Test survey name"
227     And I should see "Test url name"
228     And I should see "Test wiki name"
229     And I should see "Test workshop name"
230     And I follow "Test assignment name"
231     And I should see "Test assignment description"
232     And I follow "C1"
233     And I follow "Test assignment name with scale"
234     And I follow "Edit settings"
235     And the field "Type" matches value "Scale"
237   @javascript
238   Scenario: Add relations between users and groups
239     Given the following "users" exist:
240       | username | firstname | lastname | email |
241       | student1 | Student | 1 | student1@example.com |
242       | student2 | Student | 2 | student2@example.com |
243     And the following "courses" exist:
244       | fullname | shortname |
245       | Course 1 | C1 |
246     And the following "groups" exist:
247       | name | course | idnumber |
248       | Group 1 | C1 | G1 |
249       | Group 2 | C1 | G2 |
250     And the following "groupings" exist:
251       | name | course | idnumber |
252       | Grouping 1 | C1 | GG1 |
253     And the following "course enrolments" exist:
254       | user | course | role |
255       | student1 | C1 | student |
256       | student2 | C1 | student |
257     And the following "group members" exist:
258       | user | group |
259       | student1 | G1 |
260       | student2 | G2 |
261     And the following "grouping groups" exist:
262       | grouping | group |
263       | GG1 | G1 |
264     When I log in as "admin"
265     And I am on site homepage
266     And I follow "Course 1"
267     And I expand "Users" node
268     And I follow "Groups"
269     Then the "groups" select box should contain "Group 1 (1)"
270     And the "groups" select box should contain "Group 2 (1)"
271     And I set the field "groups" to "Group 1 (1)"
272     And the "members" select box should contain "Student 1"
273     And I set the field "groups" to "Group 2 (1)"
274     And the "members" select box should contain "Student 2"
276   Scenario: Add cohorts and cohort members with data generator
277     Given the following "categories" exist:
278       | name  | category | idnumber |
279       | Cat 1 | 0        | CAT1     |
280     And the following "users" exist:
281       | username | firstname | lastname | email |
282       | student1 | Student | 1 | student1@example.com |
283       | student2 | Student | 2 | student2@example.com |
284     And the following "cohorts" exist:
285       | name            | idnumber |
286       | System cohort A | CHSA     |
287     And the following "cohorts" exist:
288       | name                 | idnumber | contextlevel | reference |
289       | System cohort B      | CHSB     | System       |           |
290       | Cohort in category   | CHC      | Category     | CAT1      |
291       | Empty cohort         | CHE      | Category     | CAT1      |
292     And the following "cohort members" exist:
293       | user     | cohort |
294       | student1 | CHSA   |
295       | student2 | CHSB   |
296       | student1 | CHSB   |
297       | student1 | CHC    |
298     When I log in as "admin"
299     And I navigate to "Cohorts" node in "Site administration > Users > Accounts"
300     Then the following should exist in the "cohorts" table:
301       | Name            | Cohort size |
302       | System cohort A | 1           |
303       | System cohort B | 2           |
304     And I should not see "Cohort in category"
305     And I follow "Courses"
306     And I follow "Cat 1"
307     And I follow "Cohorts"
308     And I should not see "System cohort"
309     And the following should exist in the "cohorts" table:
310       | Name               | Cohort size |
311       | Cohort in category | 1           |
312       | Empty cohort       | 0           |
314   Scenario: Add grade categories with data generator
315     Given the following "courses" exist:
316       | fullname | shortname |
317       | Course 1 | C1 |
318     And the following "grade categories" exist:
319       | fullname | course |
320       | Grade category 1 | C1 |
321     And the following "grade categories" exist:
322       | fullname | course | gradecategory |
323       | Grade sub category 2 | C1 | Grade category 1 |
324     When I log in as "admin"
325     And I am on site homepage
326     And I follow "Courses"
327     And I follow "Course 1"
328     And I navigate to "Grades" node in "Course administration"
329     Then I should see "Grade category 1"
330     And I should see "Grade sub category 2"
332   Scenario: Add a bunch of grade items
333     Given the following "courses" exist:
334       | fullname | shortname |
335       | Course 1 | C1 |
336     And the following "grade categories" exist:
337       | fullname | course |
338       | Grade category 1 | C1 |
339     And the following "grade categories" exist:
340       | fullname | course | gradecategory |
341       | Grade sub category 2 | C1 | Grade category 1 |
342     And the following "grade items" exist:
343       | itemname    | course |
344       | Test Grade Item 1 | C1 |
345     And the following "grade items" exist:
346       | itemname    | course | gradecategory |
347       | Test Grade Item 2 | C1 | Grade category 1 |
348       | Test Grade Item 3 | C1 | Grade sub category 2 |
349     When I log in as "admin"
350     And I am on site homepage
351     And I follow "Course 1"
352     And I navigate to "Grades" node in "Course administration"
353     And I expand "Setup" node
354     And I follow "Gradebook setup"
355     Then I should see "Test Grade Item 1"
356     And I follow "Edit   Test Grade Item 1"
357     And I expand all fieldsets
358     And I should see "Course 1"
359     And I press "Cancel"
360     And I should see "Grade category 1"
361     And I should see "Test Grade Item 2"
362     And I follow "Edit   Test Grade Item 2"
363     And I expand all fieldsets
364     And I should see "Grade category 1"
365     And I press "Cancel"
366     And I should see "Grade sub category 2"
367     And I should see "Test Grade Item 3"
368     And I follow "Edit   Test Grade Item 3"
369     And I expand all fieldsets
370     And I should see "Grade sub category 2"
371     And I press "Cancel"
373   Scenario: Add a bunch of scales
374     Given the following "courses" exist:
375       | fullname | shortname |
376       | Course 1 | C1 |
377     And the following "scales" exist:
378       | name | scale |
379       | Test Scale 1 | Disappointing, Good, Very good, Excellent |
380     When I log in as "admin"
381     And I am on site homepage
382     And I follow "Course 1"
383     And I navigate to "Grades" node in "Course administration"
384     And I follow "Scales"
385     Then I should see "Test Scale 1"
386     And I should see "Disappointing,  Good,  Very good,  Excellent"
388   Scenario: Add a bunch of outcomes
389     Given the following "courses" exist:
390       | fullname | shortname |
391       | Course 1 | C1        |
392     And the following "scales" exist:
393       | name | scale |
394       | Test Scale 1 | Disappointing, Good, Very good, Excellent |
395     And the following "grade outcomes" exist:
396       | fullname        | shortname | scale        |
397       | Grade outcome 1 | OT1       | Test Scale 1 |
398     And the following "grade outcomes" exist:
399       | fullname        | shortname | course | scale        |
400       | Grade outcome 2 | OT2       | C1     | Test Scale 1 |
401     And the following config values are set as admin:
402       | enableoutcomes | 1 |
403     When I log in as "admin"
404     And I am on site homepage
405     And I follow "Course 1"
406     And I follow "Outcomes"
407     Then I should see "Grade outcome 1" in the "#addoutcomes" "css_element"
408     And I should see "Grade outcome 2" in the "#removeoutcomes" "css_element"
409     And I follow "Edit outcomes"
410     And the following should exist in the "generaltable" table:
411       | Full name       | Short name | Scale        |
412       | Grade outcome 2 | OT2        | Test Scale 1 |
414   Scenario: Add a bunch of outcome grade items
415     Given the following "courses" exist:
416       | fullname | shortname |
417       | Course 1 | C1        |
418     And the following "scales" exist:
419       | name         | scale                                     |
420       | Test Scale 1 | Disappointing, Good, Very good, Excellent |
421     And the following "grade outcomes" exist:
422       | fullname        | shortname | course | scale        |
423       | Grade outcome 1 | OT1       | C1     | Test Scale 1 |
424     And the following "grade categories" exist:
425       | fullname         | course |
426       | Grade category 1 | C1     |
427     And the following "grade items" exist:
428       | itemname                  | course | outcome | gradecategory    |
429       | Test Outcome Grade Item 1 | C1     | OT1     | Grade category 1 |
430     And the following config values are set as admin:
431       | enableoutcomes | 1 |
432     When I log in as "admin"
433     And I am on site homepage
434     And I follow "Course 1"
435     And I navigate to "Grades" node in "Course administration"
436     And I expand "Setup" node
437     And I follow "Gradebook setup"
438     Then I should see "Test Outcome Grade Item 1"
439     And I follow "Edit   Test Outcome Grade Item 1"
440     And the field "Outcome" matches value "Grade outcome 1"
441     And I expand all fieldsets
442     And "//div[contains(@class, 'fitem')]/div[contains(@class, 'fitemtitle')]/div[contains(@class, fstaticlabel) and contains(., 'Grade category')]/../../div[contains(@class, 'felement') and contains(., 'Grade category 1')]" "xpath_element" should exist
443     And I press "Cancel"
445   Scenario: Add a block
446     Given the following "courses" exist:
447       | fullname | shortname |
448       | Course 1 | C1        |
449     And the following "blocks" exist:
450       | blockname    | contextlevel | reference | pagetypepattern | defaultregion |
451       | online_users | Course       | C1        | course-view-*   | site-pre      |
452     When I log in as "admin"
453     And I am on site homepage
454     And I follow "Course 1"
455     Then I should see "Online users"