1@core @core_calendar
2Feature: Perform basic calendar functionality
3  In order to ensure the calendar works as expected
4  As an admin
5  I need to create calendar data
6
7  Background:
8    Given the following "users" exist:
9      | username | firstname | lastname | email |
10      | student1 | Student | 1 | student1@example.com |
11      | student2 | Student | 2 | student2@example.com |
12      | student3 | Student | 3 | student3@example.com |
13      | teacher1 | Teacher | 1 | teacher1@example.com |
14    And the following "courses" exist:
15      | fullname | shortname | format |
16      | Course 1 | C1 | topics |
17      | Course 2 | C2 | topics |
18      | Course 3 | C3 | topics |
19    And the following "course enrolments" exist:
20      | user | course | role |
21      | student1 | C1 | student |
22      | student3 | C1 | student |
23      | teacher1 | C1 | teacher |
24    And the following "groups" exist:
25      | name | course | idnumber |
26      | Group 1 | C1 | G1 |
27    And the following "group members" exist:
28      | user | group |
29      | student1 | G1 |
30      | teacher1 | G1 |
31    And I log in as "admin"
32    And I am on "Course 1" course homepage with editing mode on
33    And I add the "Calendar" block
34    And I log out
35
36  @javascript
37  Scenario: Create a site event
38    Given I log in as "admin"
39    And I create a calendar event with form data:
40      | Type of event | site |
41      | Event title | Really awesome event! |
42      | Description | Come join this awesome event, sucka! |
43    And I log out
44    And I log in as "student1"
45    And I am on "Course 1" course homepage
46    And I follow "This month"
47    And I should see "Really awesome event!"
48    And I log out
49    And I log in as "student2"
50    And I follow "This month"
51    And I should see "Really awesome event!"
52
53  @javascript
54  Scenario: Create a course event
55    Given I log in as "teacher1"
56    And I create a calendar event with form data:
57      | Type of event | course |
58      | Course        | Course 1 |
59      | Event title | Really awesome event! |
60      | Description | Come join this awesome event, sucka! |
61    And I log out
62    And I log in as "student1"
63    When I am on "Course 1" course homepage
64    And I follow "This month"
65    And I click on "Really awesome event!" "link"
66    And "Course 1" "link" should exist in the "Really awesome event!" "dialogue"
67    And I click on "Close" "button"
68    And I log out
69    And I log in as "student2"
70    And I follow "This month"
71    Then I should not see "Really awesome event!"
72
73  @javascript
74  Scenario: Create a group event
75    Given I log in as "teacher1"
76    And I am on "Course 1" course homepage
77    And I create a calendar event with form data:
78      | Type of event | group |
79      | Group         | Group 1 |
80      | Event title | Really awesome event! |
81      | Description | Come join this awesome event |
82    And I log out
83    And I log in as "student1"
84    When I am on "Course 1" course homepage
85    And I follow "This month"
86    Then I follow "Really awesome event!"
87
88  @javascript
89  Scenario: Create a user event
90    Given I log in as "teacher1"
91    And I create a calendar event with form data:
92      | Type of event | user |
93      | Event title | Really awesome event! |
94      | Description | Come join this awesome event, sucka! |
95    And I log out
96    And I log in as "student1"
97    When I am on "Course 1" course homepage
98    And I follow "This month"
99    Then I should not see "Really awesome event!"
100
101  @javascript
102  Scenario: Delete an event
103    Given I log in as "teacher1"
104    And I create a calendar event with form data:
105      | Type of event | user |
106      | Event title | Really awesome event! |
107      | Description | Come join this awesome event, sucka! |
108    And I am on "Course 1" course homepage
109    When I follow "This month"
110    And I click on "Really awesome event!" "link"
111    And I click on "Delete" "button" in the "Really awesome event!" "dialogue"
112    And I click on "Delete event" "button"
113    And I wait to be redirected
114    Then I should not see "Really awesome event!"
115
116  @javascript
117  Scenario: Edit an event
118    Given I log in as "teacher1"
119    And I create a calendar event with form data:
120      | Type of event | user |
121      | Event title | Really awesome event! |
122      | Description | Come join this awesome event, sucka! |
123      | Location | Cube office |
124    And I am on "Course 1" course homepage
125    When I follow "This month"
126    And I click on "Really awesome event!" "link"
127    And ".location-content" "css_element" should exist
128    And I should see "Cube office"
129    And I click on "Edit" "button"
130    And I set the following fields to these values:
131      | Event title | Mediocre event :( |
132      | Description | Wait, this event isn't that great. |
133      | Location | |
134    And I press "Save"
135    And I should see "Mediocre event"
136    And I click on "Mediocre event :(" "link"
137    Then I should see "Mediocre event"
138    And ".location-content" "css_element" should not exist
139
140  @javascript
141  Scenario: Module events editing
142    Given I log in as "admin"
143    And I am on "Course 1" course homepage with editing mode on
144    And the following "activities" exist:
145      | activity | course | idnumber | name        | intro                   | timeopen      | timeclose     |
146      | choice   | C1     | choice1  | Test choice | Test choice description | ##today## | ##today##  |
147    When I follow "This month"
148    Then I should see "Test choice opens"
149    And I should see "Test choice closes"
150    When I click on "Test choice opens" "link"
151    Then "Delete" "button" should not exist in the "Test choice opens" "dialogue"
152    And "Edit" "button" should not exist in the "Test choice opens" "dialogue"
153    And I should see "Course event"
154    When I click on "Go to activity" "link"
155    And I wait to be redirected
156    Then I should see "Test choice"
157    And I am on "Course 1" course homepage
158    And I follow "This month"
159    When I click on "Test choice closes" "link"
160    Then "Delete" "button" should not exist in the "Test choice closes" "dialogue"
161    And "Edit" "button" should not exist in the "Test choice closes" "dialogue"
162    And I should see "Course event"
163    When I click on "Go to activity" "link"
164    And I wait to be redirected
165    Then I should see "Test choice"
166
167  @javascript
168  Scenario: Attempt to create event without fill required fields should display validation errors
169    Given I log in as "teacher1"
170    And I am on "Course 1" course homepage
171    And I follow "This month"
172    And I click on "New event" "button"
173    When I click on "Save" "button"
174    Then I should see "Required" in the "Event title" "form_row"
175    And I am on homepage
176    And I follow "This month"
177    And I click on "New event" "button"
178    And I set the field "Event title" to "Really awesome event!"
179    And I set the field "Type of event" to "Course"
180    When I click on "Save" "button"
181    And I should see "Select a course" in the "Course" "form_row"
182
183  @javascript
184  Scenario: Default event type selection in the event form
185    Given I log in as "teacher1"
186    When I am viewing site calendar
187    And I click on "New event" "button"
188    Then the field "Type of event" matches value "User"
189    And I am on "Course 1" course homepage
190    And I follow "This month"
191    When I click on "New event" "button"
192    Then the field "Type of event" matches value "Course"
193
194  @javascript
195  Scenario: Admin can only see all courses if calendar_adminseesall setting is enabled.
196    Given I log in as "admin"
197    And I am on "Course 1" course homepage
198    And I enrol "admin" user as "Teacher"
199    And I am viewing site calendar
200    And I click on "New event" "button"
201    And I set the field "Type of event" to "Course"
202    When I expand the "Course" autocomplete
203    Then "Course 1" "autocomplete_suggestions" should exist
204    And "Course 2" "autocomplete_suggestions" should not exist
205    And "Course 3" "autocomplete_suggestions" should not exist
206    And I click on "Close" "button"
207    And I am on site homepage
208    And I navigate to "Appearance > Calendar" in site administration
209    And I set the field "Admins see all" to "1"
210    And I press "Save changes"
211    And I am viewing site calendar
212    And I click on "New event" "button"
213    And I set the field "Type of event" to "Course"
214    When I expand the "Course" autocomplete
215    Then "Course 1" "autocomplete_suggestions" should exist
216    And "Course 2" "autocomplete_suggestions" should exist
217    And "Course 3" "autocomplete_suggestions" should exist
218
219  @javascript
220  Scenario: Students can only see user event type by default.
221    Given I log in as "student1"
222    And I am viewing site calendar
223    When I click on "New event" "button"
224    Then I should see "User" in the "div#fitem_id_staticeventtype" "css_element"
225    And I am on "Course 1" course homepage
226    And I follow "This month"
227    When I click on "New event" "button"
228    Then I should see "User" in the "div#fitem_id_staticeventtype" "css_element"
229    And I click on "Close" "button"
230    And I log out
231    Given I log in as "admin"
232    And I navigate to "Appearance > Calendar" in site administration
233    And I set the field "Admins see all" to "1"
234    And I press "Save changes"
235    And I log out
236    Given I log in as "student1"
237    And I am on "Course 1" course homepage
238    And I follow "This month"
239    When I click on "New event" "button"
240    Then I should see "User" in the "div#fitem_id_staticeventtype" "css_element"
241
242  @javascript @accessibility
243  Scenario: The calendar page must be accessible
244    Given I log in as "student1"
245    And I am on "Course 1" course homepage
246    When I follow "This month"
247    Then the page should meet accessibility standards
248    And the page should meet "wcag131, wcag143, wcag412" accessibility standards
249    And the page should meet accessibility standards with "wcag131, wcag143, wcag412" extra tests
250