sakai-cle-test-api 0.0.7 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/lib/sakai-cle-test-api.rb +7 -2
  2. data/lib/sakai-cle-test-api/add_files.rb +198 -0
  3. data/lib/sakai-cle-test-api/admin_page_elements.rb +7 -3
  4. data/lib/sakai-cle-test-api/announcements.rb +274 -7
  5. data/lib/sakai-cle-test-api/assessments.rb +930 -27
  6. data/lib/sakai-cle-test-api/assignments.rb +769 -13
  7. data/lib/sakai-cle-test-api/basic_lti.rb +5 -1
  8. data/lib/sakai-cle-test-api/blogs.rb +54 -2
  9. data/lib/sakai-cle-test-api/calendar.rb +423 -8
  10. data/lib/sakai-cle-test-api/chat_room.rb +0 -0
  11. data/lib/sakai-cle-test-api/common_page_elements.rb +69 -172
  12. data/lib/sakai-cle-test-api/core-ext.rb +90 -0
  13. data/lib/sakai-cle-test-api/data_objects/announcement.rb +38 -0
  14. data/lib/sakai-cle-test-api/data_objects/assessment.rb +32 -0
  15. data/lib/sakai-cle-test-api/data_objects/assignment.rb +62 -0
  16. data/lib/sakai-cle-test-api/data_objects/event.rb +86 -0
  17. data/lib/sakai-cle-test-api/data_objects/lesson.rb +137 -0
  18. data/lib/sakai-cle-test-api/data_objects/resource.rb +174 -0
  19. data/lib/sakai-cle-test-api/data_objects/site.rb +213 -0
  20. data/lib/sakai-cle-test-api/data_objects/syllabus.rb +7 -0
  21. data/lib/sakai-cle-test-api/data_objects/topic.rb +0 -0
  22. data/lib/sakai-cle-test-api/data_objects/web_content_tool.rb +52 -0
  23. data/lib/sakai-cle-test-api/data_objects/wiki.rb +7 -0
  24. data/lib/sakai-cle-test-api/drop_box.rb +21 -0
  25. data/lib/sakai-cle-test-api/email_archive.rb +15 -1
  26. data/lib/sakai-cle-test-api/forums.rb +282 -8
  27. data/lib/sakai-cle-test-api/gem_ext.rb +45 -0
  28. data/lib/sakai-cle-test-api/gradebook.rb +19 -1
  29. data/lib/sakai-cle-test-api/gradebook2.rb +15 -1
  30. data/lib/sakai-cle-test-api/lessons.rb +440 -0
  31. data/lib/sakai-cle-test-api/messages.rb +551 -15
  32. data/lib/sakai-cle-test-api/news.rb +3 -1
  33. data/lib/sakai-cle-test-api/polls.rb +65 -3
  34. data/lib/sakai-cle-test-api/profile.rb +36 -2
  35. data/lib/sakai-cle-test-api/profile2.rb +315 -6
  36. data/lib/sakai-cle-test-api/resources.rb +138 -0
  37. data/lib/sakai-cle-test-api/rich_text.rb +13 -0
  38. data/lib/sakai-cle-test-api/sections.rb +198 -8
  39. data/lib/sakai-cle-test-api/site_page_elements.rb +4 -441
  40. data/lib/sakai-cle-test-api/syllabus.rb +149 -7
  41. data/lib/sakai-cle-test-api/tools_menu.rb +3 -20
  42. data/lib/sakai-cle-test-api/utilities.rb +260 -0
  43. data/sakai-cle-test-api.gemspec +2 -3
  44. metadata +21 -19
@@ -7,14 +7,319 @@
7
7
  class AssignmentAdd
8
8
  include PageObject
9
9
  include ToolsMenu
10
- include AssignmentAddMethods
10
+ include FCKEditor
11
+ # Clicks the Post button, then
12
+ # instantiates the AssignmentsList page class.
13
+ def post
14
+ frm.button(:value=>"Post").click
15
+ AssignmentsList.new(@browser)
16
+ end
17
+
18
+ # Clicks the Cancel button, then
19
+ # instantiates the AssignmentsList page class.
20
+ def cancel
21
+ frm.button(:value=>"Cancel", :index=>-1).click
22
+ AssignmentsList.new(@browser)
23
+ end
24
+
25
+ # Clicks the Save Draft button, then
26
+ # instantiates the AssignmentsList page class.
27
+ def save_draft
28
+ frm.button(:name=>"save").click
29
+ AssignmentsList.new(@browser)
30
+ end
31
+
32
+ # Grabs the text contained in the alert box when
33
+ # it is present on the page (will throw an error if
34
+ # called when the box is not present).
35
+ def alert_text
36
+ frm.div(:class=>"portletBody").div(:class=>"alertMessage").text
37
+ end
38
+
39
+ def editor
40
+ frm.frame(:id, "new_assignment_instructions___Frame")
41
+ end
42
+
43
+ # Sends the specified text to the text box in the FCKEditor
44
+ # on the page.
45
+ def instructions=(instructions)
46
+ editor.td(:id, "xEditingArea").frame(:index=>0).send_keys([:command, 'a'], :backspace)
47
+ editor.td(:id, "xEditingArea").frame(:index=>0).send_keys(instructions)
48
+ end
49
+
50
+ def source=(text)
51
+ editor.td(:id, "xEditingArea").text_field(:class=>"SourceField").set text
52
+ end
53
+
54
+ # Clicks the Preview button, then instantiates
55
+ # the AssignmentsPreview page class.
56
+ def preview
57
+ frm.button(:value=>"Preview").click
58
+ AssignmentsPreview.new(@browser)
59
+ end
60
+
61
+ # This is the warning message that appears when you
62
+ # select to add an assignment to the gradebook.
63
+ def gradebook_warning
64
+ frm.div(:class, "portletBody").span(:id, "gradebookListWarnAssoc")
65
+ end
66
+
67
+ # Clicks the Add Attachments button, then
68
+ # instantiates the AssignmentAttachments page class.
69
+ def add_attachments
70
+ frm.button(:value=>"Add Attachments").click
71
+ AssignmentAttachments.new(@browser)
72
+ end
73
+
74
+ in_frame(:class=>"portletMainIframe") do |frame|
75
+ hidden_field(:assignment_id, :name=>"assignmentId", :frame=>frame)
76
+ link(:assignment_list, :text=>"Assignment List", :frame=>frame)
77
+ link(:grade_report, :text=>"Grade Report", :frame=>frame)
78
+ link(:student_view, :text=>"Student View", :frame=>frame)
79
+ link(:permissions, :text=>"Permissions", :frame=>frame)
80
+ link(:options, :text=>"Options", :frame=>frame)
81
+ text_field(:title, :id=>"new_assignment_title", :frame=>frame)
82
+ select_list(:open_month, :id=>"new_assignment_openmonth", :frame=>frame)
83
+ select_list(:open_day, :id=>"new_assignment_openday", :frame=>frame)
84
+ select_list(:open_year, :id=>"new_assignment_openyear", :frame=>frame)
85
+ select_list(:open_hour, :id=>"new_assignment_openhour", :frame=>frame)
86
+ select_list(:open_minute, :id=>"new_assignment_openmin", :frame=>frame)
87
+ select_list(:open_meridian, :id=>"new_assignment_openampm", :frame=>frame)
88
+ select_list(:due_month, :id=>"new_assignment_duemonth", :frame=>frame)
89
+ select_list(:due_day, :id=>"new_assignment_dueday", :frame=>frame)
90
+ select_list(:due_year, :id=>"new_assignment_dueyear", :frame=>frame)
91
+ select_list(:due_hour, :id=>"new_assignment_duehour", :frame=>frame)
92
+ select_list(:due_minute, :id=>"new_assignment_duemin", :frame=>frame)
93
+ select_list(:due_meridian, :id=>"new_assignment_dueampm", :frame=>frame)
94
+ select_list(:accept_month, :id=>"new_assignment_closemonth", :frame=>frame)
95
+ select_list(:accept_day, :id=>"new_assignment_closeday", :frame=>frame)
96
+ select_list(:accept_year, :id=>"new_assignment_closeyear", :frame=>frame)
97
+ select_list(:accept_hour, :id=>"new_assignment_closehour", :frame=>frame)
98
+ select_list(:accept_minute, :id=>"new_assignment_closemin", :frame=>frame)
99
+ select_list(:accept_meridian, :id=>"new_assignment_closeampm", :frame=>frame)
100
+ select_list(:student_submissions, :id=>"subType", :frame=>frame)
101
+ select_list(:grade_scale, :id=>"new_assignment_grade_type", :frame=>frame)
102
+ checkbox(:allow_resubmission, :id=>"allowResToggle", :frame=>frame)
103
+ select_list(:num_resubmissions, :id=>"allowResubmitNumber", :frame=>frame)
104
+ select_list(:resub_until_month, :id=>"allow_resubmit_closeMonth", :frame=>frame)
105
+ select_list(:resub_until_day, :id=>"allow_resubmit_closeDay", :frame=>frame)
106
+ select_list(:resub_until_year, :id=>"allow_resubmit_closeYear", :frame=>frame)
107
+ select_list(:resub_until_hour, :id=>"allow_resubmit_closeHour", :frame=>frame)
108
+ select_list(:resub_until_minute, :id=>"allow_resubmit_closeMin", :frame=>frame)
109
+ select_list(:resub_until_meridian, :id=>"allow_resubmit_closeAMPM", :frame=>frame)
110
+ text_field(:max_points, :name=>"new_assignment_grade_points", :frame=>frame)
111
+ checkbox(:add_due_date, :id=>"new_assignment_check_add_due_date", :frame=>frame)
112
+ checkbox(:add_open_announcement, :id=>"new_assignment_check_auto_announce", :frame=>frame)
113
+ checkbox(:add_honor_pledge, :id=>"new_assignment_check_add_honor_pledge", :frame=>frame)
114
+
115
+ checkbox(:use_turnitin, :id=>"new_assignment_use_review_service", :frame=>frame)
116
+ checkbox(:allow_students_to_view_report, :id=>"new_assignment_allow_student_view", :frame=>frame)
117
+
118
+ radio_button(:do_not_add_to_gradebook, :id=>"no",:name=>"new_assignment_add_to_gradebook", :frame=>frame)
119
+ radio_button(:add_to_gradebook, :id=>"add", :name=>"new_assignment_add_to_gradebook", :frame=>frame)
120
+ radio_button(:do_not_send_notifications, :id=>"notsendnotif", :frame=>frame)
121
+ radio_button(:send_notifications, :id=>"sendnotif", :frame=>frame)
122
+ radio_button(:send_summary_email, :id=>"sendnotifsummary", :frame=>frame)
123
+ radio_button(:do_not_send_grade_notif, :id=>"notsendreleasegradenotif", :frame=>frame)
124
+ radio_button(:send_grade_notif, :id=>"sendreleasegradenotif", :frame=>frame)
125
+ link(:add_model_answer, :id=>"modelanswer_add", :frame=>frame)
126
+ link(:add_private_note, :id=>"note_add", :frame=>frame)
127
+ link(:add_all_purpose_item, :id=>"allPurpose_add", :frame=>frame)
128
+
129
+ text_area(:model_answer, :id=>"modelanswer_text", :frame=>frame)
130
+ button(:model_answer_attach, :name=>"modelAnswerAttach", :frame=>frame)
131
+ select_list(:show_model_answer, :id=>"modelanswer_to", :frame=>frame)
132
+ button(:save_model_answer, :id=>"modelanswer_save", :frame=>frame)
133
+ button(:cancel_model_answer, :id=>"modelanswer_cancel", :frame=>frame)
134
+ text_area(:private_note, :id=>"note_text", :frame=>frame)
135
+ select_list(:share_note_with, :id=>"note_to", :frame=>frame)
136
+ button(:save_note, :id=>"note_save", :frame=>frame)
137
+ button(:cancel_note, :id=>"note_cancel", :frame=>frame)
138
+ text_field(:all_purpose_title, :id=>"allPurpose_title", :frame=>frame)
139
+ text_area(:all_purpose_text, :id=>"allPurpose_text", :frame=>frame)
140
+ button(:add_all_purpose_attachments, :id=>"allPurposeAttach", :frame=>frame)
141
+ radio_button(:show_this_all_purpose_item, :id=>"allPurposeHide1", :frame=>frame)
142
+ radio_button(:hide_this_all_purpose_item, :id=>"allPurposeHide2", :frame=>frame)
143
+ checkbox(:show_from, :id=>"allPurposeShowFrom", :frame=>frame)
144
+ checkbox(:show_until, :id=>"allPurposeShowTo", :frame=>frame)
145
+ select_list(:show_from_month, :id=>"allPurpose_releaseMonth", :frame=>frame)
146
+ select_list(:show_from_day, :id=>"allPurpose_releaseDay", :frame=>frame)
147
+ select_list(:show_from_year, :id=>"allPurpose_releaseYear", :frame=>frame)
148
+ select_list(:show_from_hour, :id=>"allPurpose_releaseHour", :frame=>frame)
149
+ select_list(:show_from_minute, :id=>"allPurpose_releaseMin", :frame=>frame)
150
+ select_list(:show_from_meridian, :id=>"allPurpose_releaseAMPM", :frame=>frame)
151
+ select_list(:show_until_month, :id=>"allPurpose_retractMonth", :frame=>frame)
152
+ select_list(:show_until_day, :id=>"allPurpose_retractDay", :frame=>frame)
153
+ select_list(:show_until_year, :id=>"allPurpose_retractYear", :frame=>frame)
154
+ select_list(:show_until_hour, :id=>"allPurpose_retractHour", :frame=>frame)
155
+ select_list(:show_until_minute, :id=>"allPurpose_retractMin", :frame=>frame)
156
+ select_list(:show_until_meridian, :id=>"allPurpose_retractAMPM", :frame=>frame)
157
+ link(:expand_guest_list, :id=>"expand_1", :frame=>frame)
158
+ link(:collapse_guest_list, :id=>"collapse_1", :frame=>frame)
159
+ link(:expand_TA_list, :id=>"expand_2", :frame=>frame)
160
+ link(:collapse_TA_list, :id=>"collapse_2", :frame=>frame)
161
+ link(:expand_instructor_list, :id=>"expand_3", :frame=>frame)
162
+ link(:collapse_instructor_list, :is=>"collapse_3", :frame=>frame)
163
+
164
+ # Note that only the "All" checkboxes are defined, since other items may or may not be there
165
+ checkbox(:all_guests, :id=>"allPurpose_Guest", :frame=>frame)
166
+ checkbox(:all_TAs, :id=>"allPurpose_Teaching Assistant", :frame=>frame)
167
+ checkbox(:all_instructors, :id=>"allPurpose_Instructor", :frame=>frame)
168
+
169
+ end
11
170
  end
12
171
 
13
172
  # Page that appears when you first click the Assignments link
14
173
  class AssignmentsList
15
174
  include PageObject
16
175
  include ToolsMenu
17
- include AssignmentsListMethods
176
+
177
+ # Returns an array of the displayed assignment titles.
178
+ # Use for verification of test steps.
179
+ def assignments_titles
180
+ titles = []
181
+ a_table = frm.table(:class=>"listHier lines nolines")
182
+ 1.upto(a_table.rows.size-1) do |x|
183
+ titles << a_table[x][1].h4(:index=>0).text
184
+ end
185
+ return titles
186
+ end
187
+ alias assignment_titles assignments_titles
188
+ alias assignment_list assignments_titles
189
+ alias assignments_list assignments_titles
190
+
191
+ # Clicks the Add link, then instantiates
192
+ # the AssignmentAdd page class.
193
+ def add
194
+ frm.link(:text=>"Add").click
195
+ AssignmentAdd.new(@browser)
196
+ end
197
+
198
+ # Clicks the Edit link for the assignment with the specified
199
+ # id, then instantiates the AssignmentAdd page class.
200
+ def edit_assignment_id(id)
201
+ frm.link(:href=>/#{Regexp.escape(id)}/).click
202
+ AssignmentAdd.new(@browser)
203
+ end
204
+
205
+ # Clicks the Edit link for the Assignment specified.
206
+ # Then it instantiates the AssignmentAdd page class.
207
+ def edit_assignment(assignment_name)
208
+ index = assignments_titles.index(assignment_name)
209
+ frm.link(:text=>"Edit", :index=>index).click
210
+ AssignmentAdd.new(@browser)
211
+ end
212
+
213
+ # Checks the appropriate checkbox, based on the specified assignment_name
214
+ # Then clicks the Update button and confirms the deletion request.
215
+ # It then reinstantiates the AssignmentsList class because of the page
216
+ # update.
217
+ def delete_assignment(assignment_name)
218
+ frm.table(:class=>"listHier lines nolines").row(:text=>/#{Regexp.escape(assignment_name)}/).checkbox(:name=>"selectedAssignments").set
219
+ frm.button(:value=>"Update").click
220
+ frm.button(:value=>"Delete").click
221
+ AssignmentsList.new(@browser)
222
+ end
223
+
224
+ # Clicks on the Duplicate link for the Assignment specified.
225
+ # Then instantiates the AssignmentsList page class.
226
+ def duplicate_assignment(assignment_name)
227
+ index = assignments_titles.index(assignment_name)
228
+ frm.link(:text=>"Duplicate", :index=>index).click
229
+ AssignmentsList.new(@browser)
230
+ end
231
+
232
+ # Gets the assignment id from the href of the specified
233
+ # Assignment link.
234
+ def get_assignment_id(assignment_name)
235
+ assignment_href(assignment_name) =~ /(?<=\/a\/\S{36}\/).+(?=&pan)/
236
+ return $~.to_s
237
+ end
238
+
239
+ def assignment_href(name)
240
+ frm.link(:text=>/#{Regexp.escape(name)}/).href
241
+ end
242
+
243
+ # Clicks the Permissions button, then
244
+ # instantiates the AssignmentsPermissions page class.
245
+ def permissions
246
+ frm.link(:text=>"Permissions").click
247
+ AssignmentsPermissions.new(@browser)
248
+ end
249
+
250
+ # Checks the checkbox for the specified Assignment,
251
+ # using the assignment id as the identifier.
252
+ def check_assignment(id) #FIXME to use name instead of id.
253
+ frm.checkbox(:value, /#{id}/).set
254
+ end
255
+
256
+ # Clicks the Reorder button, then instantiates
257
+ # the AssignmentsReorder page class.
258
+ def reorder
259
+ frm().link(:text=>"Reorder").click
260
+ AssignmentsReorder.new(@browser)
261
+ end
262
+
263
+ # Opens the specified assignment for viewing
264
+ #
265
+ # Instantiates the student view or instructor/admin
266
+ # view based on the landing page attributes
267
+ def open_assignment(assignment_name)
268
+ frm.link(:text=>assignment_name).click
269
+ if frm.div(:class=>"portletBody").p(:class=>"instruction").exist? && frm.div(:class=>"portletBody").p(:class=>"instruction").text == "Add attachment(s), then choose the appropriate button at the bottom."
270
+ AssignmentStudent.new(@browser)
271
+ elsif frm.div(:class=>"portletBody").h3.text=="Assignment - In progress"
272
+ AssignmentStudent.new(@browser)
273
+ elsif frm.div(:class=>"portletBody").h3.text=="Viewing assignment..." || frm.div(:class=>"portletBody").h3.text.include?("Submitted") || frm.button(:value=>"Back to list").exist?
274
+ AssignmentsPreview.new(@browser)
275
+ else
276
+ frm.frame(:id, "Assignment.view_submission_text___Frame").td(:id, "xEditingArea").wait_until_present
277
+ AssignmentStudent.new(@browser)
278
+ end
279
+ end
280
+
281
+ # Gets the contents of the status column
282
+ # for the specified assignment
283
+ def status_of(assignment_name)
284
+ frm.table(:class=>/listHier lines/).row(:text=>/#{Regexp.escape(assignment_name)}/).td(:headers=>"status").text
285
+ end
286
+
287
+ # Clicks the View Submissions link for the specified
288
+ # Assignment, then instantiates the AssignmentSubmissionList
289
+ # page class.
290
+ def view_submissions_for(assignment_name)
291
+ frm.table(:class=>"listHier lines nolines").row(:text=>/#{Regexp.escape(assignment_name)}/).link(:text=>"View Submissions").click
292
+ AssignmentSubmissionList.new(@browser)
293
+ end
294
+
295
+ # Clicks the Grade link for the specified Assignment,
296
+ # then instantiates the AssignmentSubmissionList page class.
297
+ def grade(assignment_name)
298
+ frm.table(:class=>"listHier lines nolines").row(:text=>/#{Regexp.escape(assignment_name)}/).link(:text=>"Grade").click
299
+ AssignmentSubmissionList.new(@browser)
300
+ end
301
+
302
+ in_frame(:class=>"portletMainIframe") do |frame|
303
+ link(:grade_report, :text=>"Grade Report", :frame=>frame)
304
+ link(:student_view, :text=>"Student View", :frame=>frame)
305
+ link(:options, :text=>"Options", :frame=>frame)
306
+ link(:sort_assignment_title, :text=>"Assignment title", :frame=>frame)
307
+ link(:sort_status, :text=>"Status", :frame=>frame)
308
+ link(:sort_open, :text=>"Open", :frame=>frame)
309
+ link(:sort_due, :text=>"Due", :frame=>frame)
310
+ link(:sort_in, :text=>"In", :frame=>frame)
311
+ link(:sort_new, :text=>"New", :frame=>frame)
312
+ link(:sort_scale, :text=>"Scale", :frame=>frame)
313
+ select_list(:view, :id=>"view", :frame=>frame)
314
+ select_list(:select_page_size, :id=>"selectPageSize", :frame=>frame)
315
+ button(:next, :name=>"eventSubmit_doList_next", :frame=>frame)
316
+ button(:last, :name=>"eventSubmit_doList_last", :frame=>frame)
317
+ button(:previous, :name=>"eventSubmit_doList_prev", :frame=>frame)
318
+ button(:first, :name=>"eventSubmit_doList_first", :frame=>frame)
319
+ button(:update, :name=>"eventSubmit_doDelete_confirm_assignment", :frame=>frame)
320
+
321
+ end
322
+
18
323
  end
19
324
 
20
325
 
@@ -22,7 +327,70 @@ end
22
327
  class AssignmentsPermissions
23
328
  include PageObject
24
329
  include ToolsMenu
25
- include AssignmentsPermissionsMethods
330
+ # Clicks the Save button, then instantiates
331
+ # the AssignmentsList page class.
332
+ def save
333
+ frm.button(:value=>"Save").click
334
+ AssignmentsList.new(@browser)
335
+ end
336
+
337
+ in_frame(:class=>"portletMainIframe") do |frame|
338
+ checkbox(:evaluators_share_drafts, :id=>"Evaluatorasn.share.drafts", :frame=>frame)
339
+ checkbox(:organizers_share_drafts, :id=>"Organizerasn.share.drafts", :frame=>frame)
340
+
341
+ checkbox(:guests_all_groups, :id=>"Guestasn.all.groups", :frame=>frame)
342
+ checkbox(:guests_create_assignments, :id=>"Guestasn.new", :frame=>frame)
343
+ checkbox(:guests_submit_to_assigments, :id=>"Guestasn.submit", :frame=>frame)
344
+ checkbox(:guests_delete_assignments, :id=>"Guestasn.delete", :frame=>frame)
345
+ checkbox(:guests_read_assignments, :id=>"Guestasn.read", :frame=>frame)
346
+ checkbox(:guests_revise_assignments, :id=>"Guestasn.revise", :frame=>frame)
347
+ checkbox(:guests_grade_assignments, :id=>"Guestasn.grade", :frame=>frame)
348
+ checkbox(:guests_receive_notifications, :id=>"Guestasn.receive.notifications", :frame=>frame)
349
+ checkbox(:guests_share_drafts, :id=>"Guestasn.share.drafts", :frame=>frame)
350
+ checkbox(:instructors_all_groups, :id=>"Instructorasn.all.groups", :frame=>frame)
351
+ checkbox(:instructors_create_assignments, :id=>"Instructorasn.new", :frame=>frame)
352
+ checkbox(:instructors_submit_to_assigments, :id=>"Instructorasn.submit", :frame=>frame)
353
+ checkbox(:instructors_delete_assignments, :id=>"Instructorasn.delete", :frame=>frame)
354
+ checkbox(:instructors_read_assignments, :id=>"Instructorasn.read", :frame=>frame)
355
+ checkbox(:instructors_revise_assignments, :id=>"Instructorasn.revise", :frame=>frame)
356
+ checkbox(:instructors_grade_assignments, :id=>"Instructorasn.grade", :frame=>frame)
357
+ checkbox(:instructors_receive_notifications, :id=>"Instructorasn.receive.notifications", :frame=>frame)
358
+ checkbox(:instructors_share_drafts, :id=>"Instructorasn.share.drafts", :frame=>frame)
359
+ checkbox(:students_all_groups, :id=>"Studentasn.all.groups", :frame=>frame)
360
+ checkbox(:students_create_assignments, :id=>"Studentasn.new", :frame=>frame)
361
+ checkbox(:students_submit_to_assigments, :id=>"Studentasn.submit", :frame=>frame)
362
+ checkbox(:students_delete_assignments, :id=>"Studentasn.delete", :frame=>frame)
363
+ checkbox(:students_read_assignments, :id=>"Studentasn.read", :frame=>frame)
364
+ checkbox(:students_revise_assignments, :id=>"Studentasn.revise", :frame=>frame)
365
+ checkbox(:students_grade_assignments, :id=>"Studentasn.grade", :frame=>frame)
366
+ checkbox(:students_receive_notifications, :id=>"Studentasn.receive.notifications", :frame=>frame)
367
+ checkbox(:students_share_drafts, :id=>"Studentasn.share.drafts", :frame=>frame)
368
+ checkbox(:tas_all_groups, :id=>"Teaching Assistantasn.all.groups", :frame=>frame)
369
+ checkbox(:tas_create_assignments, :id=>"Teaching Assistantasn.new", :frame=>frame)
370
+ checkbox(:tas_submit_to_assigments, :id=>"Teaching Assistantasn.submit", :frame=>frame)
371
+ checkbox(:tas_delete_assignments, :id=>"Teaching Assistantasn.delete", :frame=>frame)
372
+ checkbox(:tas_read_assignments, :id=>"Teaching Assistantasn.read", :frame=>frame)
373
+ checkbox(:tas_revise_assignments, :id=>"Teaching Assistantasn.revise", :frame=>frame)
374
+ checkbox(:tas_grade_assignments, :id=>"Teaching Assistantasn.grade", :frame=>frame)
375
+ checkbox(:tas_receive_notifications, :id=>"Teaching Assistantasn.receive.notifications", :frame=>frame)
376
+ checkbox(:tas_share_drafts, :id=>"Teaching Assistantasn.share.drafts", :frame=>frame)
377
+ link(:undo_changes, :text=>"Undo changes", :frame=>frame)
378
+ button(:cancel, :id=>"eventSubmit_doCancel", :frame=>frame)
379
+ link(:permission, :text=>"Permission", :frame=>frame)
380
+ link(:guest, :text=>"Guest", :frame=>frame)
381
+ link(:instructor, :text=>"Instructor", :frame=>frame)
382
+ link(:student, :text=>"Student", :frame=>frame)
383
+ link(:teaching_assistant, :text=>"Teaching Assistant", :frame=>frame)
384
+ link(:same_permissions_for_all_groups, :text=>"Same site level permissions for all groups inside the site", :frame=>frame)
385
+ link(:create_new_assignments, :text=>"Create new assignment(s)", :frame=>frame)
386
+ link(:submit_to_assignments, :text=>"Submit to assignment(s)", :frame=>frame)
387
+ link(:delete_assignments, :text=>"Delete assignment(s)", :frame=>frame)
388
+ link(:read_assignments, :text=>"Read Assignment(s)", :frame=>frame)
389
+ link(:revise_assignments, :text=>"Revise assignment(s)", :frame=>frame)
390
+ link(:grade_submissions, :text=>"Grade assignment submission(s)", :frame=>frame)
391
+ link(:receive_email_notifications, :text=>"Receive email notifications", :frame=>frame)
392
+ link(:view_drafts_from_others, :text=>"Able to view draft assignment(s) created by other users", :frame=>frame)
393
+ end
26
394
 
27
395
  end
28
396
 
@@ -30,21 +398,232 @@ end
30
398
  class AssignmentsPreview
31
399
  include PageObject
32
400
  include ToolsMenu
33
- include AssignmentsPreviewMethods
401
+ # Returns the text content of the page header
402
+ def header
403
+ frm.div(:class=>"portletBody").h3.text
404
+ end
405
+
406
+ # Returns a hash object containing the contents of the Item Summary table.
407
+ # The hash's Key is the header column and the value is the content column.
408
+ def item_summary
409
+ hash = {}
410
+ frm.table(:class=>"itemSummary").rows.each do |row|
411
+ hash.store(row.th.text, row.td.text)
412
+ end
413
+ return hash
414
+ end
415
+
416
+ # Grabs the Assignment Instructions text.
417
+ def assignment_instructions
418
+ frm.div(:class=>"textPanel").text
419
+ end
420
+
421
+ # Grabs the instructor comments text.
422
+ def instructor_comments
423
+ frm.div(:class=>"portletBody").div(:class=>"textPanel", :index=>2).text
424
+ end
425
+
426
+ #
427
+ def back_to_list
428
+ frm.button(:value=>"Back to list").click
429
+ AssignmentsList.new(@browser)
430
+ end
431
+
432
+ # Clicks the Post button, then instantiates
433
+ # the AssignmentsList page class.
434
+ def post
435
+ frm.button(:name=>"post").click
436
+ AssignmentsList.new(@browser)
437
+ end
438
+
439
+ # Clicks the Cancel button and instantiates the
440
+ # AssignmentsList Class.
441
+ def cancel
442
+ frm.button(:value=>"Cancel").click
443
+ AssignmentsList.new(@browser)
444
+ end
445
+
446
+ in_frame(:class=>"portletMainIframe") do |frame|
447
+ hidden_field(:assignment_id, :name=>"assignmentId", :frame=>frame)
448
+ link(:assignment_list, :text=>"Assignment List", :frame=>frame)
449
+ link(:permissions, :text=>"Permissions", :frame=>frame)
450
+ link(:options, :text=>"Options", :frame=>frame)
451
+ link(:hide_assignment, :href=>/doHide_preview_assignment_assignment/, :frame=>frame)
452
+ link(:show_assignment, :href=>/doShow_preview_assignment_assignment/, :frame=>frame)
453
+ link(:hide_student_view, :href=>/doHide_preview_assignment_student_view/, :frame=>frame)
454
+ link(:show_student_view, :href=>/doShow_preview_assignment_student_view/, :frame=>frame)
455
+ button(:edit, :name=>"revise", :frame=>frame)
456
+ button(:save_draft, :name=>"save", :frame=>frame)
457
+ button(:done, :name=>"done", :frame=>frame)
458
+
459
+ end
460
+
34
461
  end
35
462
 
36
463
  # The reorder page for Assignments
37
464
  class AssignmentsReorder
38
465
  include PageObject
39
466
  include ToolsMenu
40
- include AssignmentsReorderMethods
467
+ # Clicks the Save button, then instantiates
468
+ # the AssignmentsList page class.
469
+ def save
470
+ frm.button(:value=>"Save").click
471
+ AssignmentsList.new(@browser)
472
+ end
473
+
474
+ # Clicks the Cancel button, then instantiates
475
+ # the AssignmentsList Class.
476
+ def cancel
477
+ frm.button(:value=>"Cancel").click
478
+ AssignmentsList.new(@browser)
479
+ end
480
+
481
+ in_frame(:class=>"portletMainIframe") do |frame|
482
+ link(:add, :text=>"Add", :frame=>frame)
483
+ link(:assignment_list, :text=>"Assignment List", :frame=>frame)
484
+ link(:grade_report, :text=>"Grade Report", :frame=>frame)
485
+ link(:student_view, :text=>"Student View", :frame=>frame)
486
+ link(:permissions, :text=>"Permissions", :frame=>frame)
487
+ link(:options, :text=>"Options", :frame=>frame)
488
+ link(:sort_by_title, :text=>"Sort by title", :frame=>frame)
489
+ link(:sort_by_open_date, :text=>"Sort by open date", :frame=>frame)
490
+ link(:sort_by_due_date, :text=>"Sort by due date", :frame=>frame)
491
+ link(:undo_last, :text=>"Undo last", :frame=>frame)
492
+ link(:undo_all, :text=>"Undo all", :frame=>frame)
493
+
494
+ end
41
495
  end
42
496
 
43
497
  # A Student user's page for editing/submitting/view an assignment.
44
498
  class AssignmentStudent
45
499
  include PageObject
46
500
  include ToolsMenu
47
- include AssignmentStudentMethods
501
+ # Returns the text content of the page header
502
+ def header
503
+ frm.div(:class=>"portletBody").h3.text
504
+ end
505
+
506
+ # Returns a hash object containing the contents of the Item Summary table.
507
+ # The hash's Key is the header column and the value is the content column.
508
+ def item_summary
509
+ hash = {}
510
+ frm.table(:class=>"itemSummary").rows.each do |row|
511
+ hash.store(row.th.text, row.td.text)
512
+ end
513
+ return hash
514
+ end
515
+
516
+ # Grabs the instructor comments text.
517
+ def instructor_comments
518
+ frm.div(:class=>"portletBody").div(:class=>"textPanel", :index=>2).text
519
+ end
520
+
521
+ # Enters the specified text into the Assignment Text FCKEditor.
522
+ def assignment_text=(text)
523
+ frm.frame(:id, "Assignment.view_submission_text___Frame").td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
524
+ end
525
+
526
+ # Clears out any existing text from the Assignment Text FCKEditor.
527
+ def remove_assignment_text
528
+ frm.frame(:id, "Assignment.view_submission_text___Frame").div(:title=>"Select All").fire_event("onclick")
529
+ frm.frame(:id, "Assignment.view_submission_text___Frame").td(:id, "xEditingArea").frame(:index=>0).send_keys :backspace
530
+ end
531
+
532
+ # This class variable allows adding an arbitrary number of
533
+ # files to the page, as long as the adding steps alternate between
534
+ # selecting the file and clicking the add more files button
535
+ @@file_number = 0
536
+
537
+ # Enters the specified file name into the file field. Entering the path
538
+ # separately is optional.
539
+ # Once the filename is entered in the field, the
540
+ # @@file_number class variable is increased by one
541
+ # in case any more files need to be added to the upload
542
+ # list.
543
+ def select_file(file_name, file_path="")
544
+ frm.file_field(:id=>"clonableUpload", :name=>"upload#{@@file_number}").set(file_path + file_name)
545
+ @@file_number += 1
546
+ end
547
+
548
+ # Clicks the Submit button, then instantiates
549
+ # the appropriate page class, based on the
550
+ # page that gets loaded.
551
+ def submit
552
+ frm.button(:value=>"Submit").click
553
+ @@file_number=0
554
+ if frm.div(:class=>"portletBody").h3.text=~/Submission Confirmation/
555
+ SubmissionConfirmation.new(@browser)
556
+ elsif frm.button(:value=>"Back to list").exist?
557
+ SubmissionConfirmation.new(@browser)
558
+ else
559
+ AssessmentsList.new(@browser)
560
+ end
561
+ end
562
+
563
+ # Clicks the Resubmit button, then instantiates
564
+ # the appropriate page class, based on the
565
+ # page that gets loaded.
566
+ #
567
+ # Resets @@file_number to zero so that file
568
+ # uploads will work if this page is visited again
569
+ # in the same script.
570
+ def resubmit
571
+ frm.button(:value=>"Resubmit").click
572
+ @@file_number=0
573
+ if frm.link(:text=>"Assignment title").exist?
574
+ puts "list..."
575
+ AssessmentsList.new(@browser)
576
+ else
577
+ SubmissionConfirmation.new(@browser)
578
+ end
579
+ end
580
+
581
+ # Clicks the Preview button, then
582
+ # instantiates the AssignmentStudentPreview page class.
583
+ #
584
+ # Resets @@file_number to zero so that file
585
+ # uploads will work if this page is visited again
586
+ # in the same script.
587
+ def preview
588
+ frm.button(:value=>"Preview").click
589
+ @@file_number=0
590
+ AssignmentStudentPreview.new(@browser)
591
+ end
592
+
593
+ # Clicks the Save Draft button, then
594
+ # instantiates the SubmissionConfirmation
595
+ # page class.
596
+ def save_draft
597
+ frm.button(:value=>"Save Draft").click
598
+ SubmissionConfirmation.new(@browser)
599
+ end
600
+
601
+ # Clicks the link to select more files
602
+ # from the Workspace. Then instantiates
603
+ # the AssignmentAttachments page class.
604
+ def select_more_files_from_workspace
605
+ frm.link(:id=>"attach").click
606
+ AssignmentAttachments.new(@browser)
607
+ end
608
+
609
+ # Clicks the Back to list button, then
610
+ # instantiates the AssignmentList page class.
611
+ def back_to_list
612
+ frm.button(:value=>"Back to list").click
613
+ AssignmentsList.new(@browser)
614
+ end
615
+
616
+ # Clicks the Cancel button and instantiates the
617
+ # AssignmentsList Class.
618
+ def cancel
619
+ frm.button(:value=>"Cancel").click
620
+ AssignmentsList.new(@browser)
621
+ end
622
+
623
+ in_frame(:class=>"portletMainIframe") do |frame|
624
+ link(:add_another_file, :id=>"addMoreAttachmentControls", :frame=>frame)
625
+
626
+ end
48
627
  end
49
628
 
50
629
  # Page that appears when a Student User clicks to Preview an
@@ -52,7 +631,35 @@ end
52
631
  class AssignmentStudentPreview
53
632
  include PageObject
54
633
  include ToolsMenu
55
- include AssignmentStudentPreviewMethods
634
+ # Clicks the Submit button, then
635
+ # instantiates the SubmissionConfirmation
636
+ # page class.
637
+ def submit
638
+ frm.button(:value=>"Submit").click
639
+ SubmissionConfirmation.new(@browser)
640
+ end
641
+
642
+ # Clicks the Save Draft button, then
643
+ # instantiates the SubmissionConfirmation
644
+ # page class.
645
+ def save_draft
646
+ frm.button(:value=>"Save Draft").click
647
+ SubmissionConfirmation.new(@browser)
648
+ end
649
+
650
+ # Returns the contents of the submission box.
651
+ def submission_text
652
+ frm.div(:class=>"portletBody").div(:class=>/textPanel/).text
653
+ end
654
+
655
+ # Returns an array of strings. Each element in the
656
+ # array is the name of attached files.
657
+ def attachments
658
+ names = []
659
+ frm.ul(:class=>"attachList indnt1").links.each { |link| names << link.text }
660
+ return names
661
+ end
662
+
56
663
  end
57
664
 
58
665
  # The page that appears when a Student user has fully submitted an assignment
@@ -60,7 +667,23 @@ end
60
667
  class SubmissionConfirmation
61
668
  include PageObject
62
669
  include ToolsMenu
63
- include SubmissionConfirmationMethods
670
+ # Returns the text of the success message on the page.
671
+ def confirmation_text
672
+ frm.div(:class=>"portletBody").div(:class=>"success").text
673
+ end
674
+
675
+ # Returns the text of the assignment submission.
676
+ def submission_text
677
+ frm.div(:class=>"portletBody").div(:class=>"textPanel indnt2").text
678
+ end
679
+
680
+ # Clicks the Back to list button, then
681
+ # instantiates the AssignmentsList page class.
682
+ def back_to_list
683
+ frm.button(:value=>"Back to list").click
684
+ frm.link(:text=>"Assignment title").wait_until_present
685
+ AssignmentsList.new(@browser)
686
+ end
64
687
  end
65
688
 
66
689
  # The page that appears when you click on an assignment's "Grade" or "View Submission" link
@@ -69,28 +692,161 @@ end
69
692
  class AssignmentSubmissionList
70
693
  include PageObject
71
694
  include ToolsMenu
72
- include AssignmentSubmissionListMethods
695
+ # Clicks the Assignment List link and instantiates the AssignmentsList Class.
696
+ def assignment_list
697
+ frm.link(:text=>"Assignment List").click
698
+ AssignmentsList.new(@browser)
699
+ end
700
+ # Clicks the Show Resubmission Settings button
701
+ def show_resubmission_settings
702
+ frm.image(:src, "/library/image/sakai/expand.gif?panel=Main").click
703
+ end
704
+
705
+ # Clicks the Show Assignment Details button.
706
+ def show_assignment_details
707
+ frm.image(:src, "/library/image/sakai/expand.gif").click
708
+ end
709
+
710
+ # Gets the Student table text and returns it in an Array object.
711
+ def student_table
712
+ table = frm.table(:class=>"listHier lines nolines").to_a
713
+ end
714
+
715
+ # Clicks the Grade link for the specified student, then
716
+ # instantiates the AssignmentSubmission page class.
717
+ def grade(student_name)
718
+ frm.table(:class=>"listHier lines nolines").row(:text=>/#{Regexp.escape(student_name)}/).link(:text=>"Grade").click
719
+ frm.frame(:id, "grade_submission_feedback_comment___Frame").td(:id, "xEditingArea").frame(:index=>0).wait_until_present
720
+ AssignmentSubmission.new(@browser)
721
+ end
722
+
723
+ # Gets the value of the status field for the specified
724
+ # Student. Note that the student's name needs to be entered
725
+ # so that it's unique for the row, but it does not have
726
+ # to match the entire name/id value--unless there are two
727
+ # students with the same name.
728
+ #
729
+ # Useful for verification purposes.
730
+ def submission_status_of(student_name)
731
+ frm.table(:class=>"listHier lines nolines").row(:text=>/#{Regexp.escape(student_name)}/)[4].text
732
+ end
733
+
734
+ in_frame(:class=>"portletMainIframe") do |frame|
735
+ link(:add, :text=>"Add", :frame=>frame)
736
+ link(:grade_report, :text=>"Grade Report", :frame=>frame)
737
+ link(:permissions, :text=>"Permissions", :frame=>frame)
738
+ link(:options, :text=>"Options", :frame=>frame)
739
+ link(:student_view, :text=>"Student View", :frame=>frame)
740
+ link(:reorder, :text=>"Reorder", :frame=>frame)
741
+ text_field(:search_input, :id=>"search", :frame=>frame)
742
+ button(:find, :value=>"Find", :frame=>frame)
743
+ button(:clear, :value=>"Clear", :frame=>frame)
744
+ link(:download_all, :text=>"Download All", :frame=>frame)
745
+ link(:upload_all, :text=>"Upload All", :frame=>frame)
746
+ link(:release_grades, :text=>"Release Grades", :frame=>frame)
747
+ link(:sort_by_student, :text=>"Student", :frame=>frame)
748
+ link(:sort_by_submitted, :text=>"Submitted", :frame=>frame)
749
+ link(:sort_by_status, :text=>"Status", :frame=>frame)
750
+ link(:sort_by_grade, :text=>"Grade", :frame=>frame)
751
+ link(:sort_by_release, :text=>"Release", :frame=>frame)
752
+ select_list(:default_grade, :id=>"defaultGrade_1", :frame=>frame)
753
+ button(:apply, :name=>"apply", :frame=>frame)
754
+ select_list(:num_resubmissions, :id=>"allowResubmitNumber", :frame=>frame)
755
+ select_list(:accept_until_month, :id=>"allow_resubmit_closeMonth", :frame=>frame)
756
+ select_list(:accept_until_day, :id=>"allow_resubmit_closeDay", :frame=>frame)
757
+ select_list(:accept_until_year, :id=>"allow_resubmit_closeYear", :frame=>frame)
758
+ select_list(:accept_until_hour, :id=>"allow_resubmit_closeHour", :frame=>frame)
759
+ select_list(:accept_until_min, :id=>"allow_resubmit_closeMin", :frame=>frame)
760
+ select_list(:accept_until_meridian, :id=>"allow_resubmit_closeAMPM", :frame=>frame)
761
+ button(:update, :id=>"eventSubmit_doSave_resubmission_option", :frame=>frame)
762
+ select_list(:select_page_size, :id=>"selectPageSize", :frame=>frame)
763
+ button(:next, :name=>"eventSubmit_doList_next", :frame=>frame)
764
+ button(:last, :name=>"eventSubmit_doList_last", :frame=>frame)
765
+ button(:previous, :name=>"eventSubmit_doList_prev", :frame=>frame)
766
+ button(:first, :name=>"eventSubmit_doList_first", :frame=>frame)
767
+ button(:update, :name=>"eventSubmit_doDelete_confirm_assignment", :frame=>frame)
768
+
769
+ end
73
770
  end
74
771
 
75
772
  # The page that shows a student's submitted assignment to an instructor user.
76
773
  class AssignmentSubmission
77
774
  include PageObject
78
775
  include ToolsMenu
79
- include AssignmentSubmissionMethods
776
+ # Enters the specified text string in the FCKEditor box for the assignment text.
777
+ def assignment_text=(text)
778
+ frm.frame(:id, "grade_submission_feedback_text___Frame").td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
779
+ end
780
+
781
+ # Removes all the contents of the FCKEditor Assignment Text box.
782
+ def remove_assignment_text
783
+ frm.frame(:id, "grade_submission_feedback_text___Frame").div(:title=>"Select All").fire_event("onclick")
784
+ frm.frame(:id, "grade_submission_feedback_text___Frame").td(:id, "xEditingArea").frame(:index=>0).send_keys :backspace
785
+ end
786
+
787
+ # Enters the specified string into the Instructor Comments FCKEditor box.
788
+ def instructor_comments=(text)
789
+ frm.frame(:id, "grade_submission_feedback_comment___Frame").td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
790
+ end
791
+
792
+ # Clicks the Add Attachments button, then instantiates the AssignmentAttachments Class.
793
+ def add_attachments
794
+ frm.button(:name=>"attach").click
795
+ AssignmentAttachments.new(@browser)
796
+ end
797
+
798
+ # Clicks the Return to List button, then instantiates the
799
+ # AssignmentSubmissionList Class.
800
+ def return_to_list
801
+ frm.button(:value=>"Return to List").click
802
+ AssignmentSubmissionList.new(@browser)
803
+ end
804
+
805
+ in_frame(:class=>"portletMainIframe") do |frame|
806
+ select_list(:select_default_grade, :name=>"grade_submission_grade", :frame=>frame)
807
+ checkbox(:allow_resubmission, :id=>"allowResToggle", :frame=>frame)
808
+ select_list(:num_resubmissions, :id=>"allowResubmitNumberSelect", :frame=>frame)
809
+ select_list(:accept_until_month, :id=>"allow_resubmit_closeMonth", :frame=>frame)
810
+ select_list(:accept_until_day, :id=>"allow_resubmit_closeDay", :frame=>frame)
811
+ select_list(:accept_until_year, :id=>"allow_resubmit_closeYear", :frame=>frame)
812
+ select_list(:accept_until_hour, :id=>"allow_resubmit_closeHour", :frame=>frame)
813
+ select_list(:accept_until_min, :id=>"allow_resubmit_closeMin", :frame=>frame)
814
+ select_list(:accept_until_meridian, :id=>"allow_resubmit_closeAMPM", :frame=>frame)
815
+ button(:save_and_release, :value=>"Save and Release to Student", :frame=>frame)
816
+ button(:save_and_dont_release, :value=>"Save and Don't Release to Student", :frame=>frame)
817
+
818
+ end
819
+
80
820
  end
81
821
 
82
822
  # The Grade Report page accessed from the Assignments page
83
823
  class GradeReport
84
824
  include PageObject
85
- include ToolsMenu
86
- include GradeReportMethods
825
+
87
826
  end
88
827
 
89
828
  # The Student View page accessed from the Assignments page
90
829
  class StudentView
91
830
  include PageObject
92
831
  include ToolsMenu
93
- include StudentViewMethods
832
+ in_frame(:class=>"portletMainIframe") do |frame|
833
+ link(:add, :text=>"Add", :frame=>frame)
834
+ link(:grade_report, :text=>"Grade Report", :frame=>frame)
835
+ link(:assignment_list, :text=>"Assignment List", :frame=>frame)
836
+ link(:permissions, :text=>"Permissions", :frame=>frame)
837
+ link(:options, :text=>"Options", :frame=>frame)
838
+ link(:sort_assignment_title, :text=>"Assignment title", :frame=>frame)
839
+ link(:sort_status, :text=>"Status", :frame=>frame)
840
+ link(:sort_open, :text=>"Open", :frame=>frame)
841
+ link(:sort_due, :text=>"Due", :frame=>frame)
842
+ link(:sort_scale, :text=>"Scale", :frame=>frame)
843
+ select_list(:select_page_size, :name=>"selectPageSize", :frame=>frame)
844
+ button(:next, :name=>"eventSubmit_doList_next", :frame=>frame)
845
+ button(:last, :name=>"eventSubmit_doList_last", :frame=>frame)
846
+ button(:previous, :name=>"eventSubmit_doList_prev", :frame=>frame)
847
+ button(:first, :name=>"eventSubmit_doList_first", :frame=>frame)
848
+
849
+ end
94
850
  end
95
851
 
96
852
  # Page for attaching files to Assignments