sakai-cle-test-api 0.0.9 → 0.0.75

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 +2 -7
  2. data/lib/sakai-cle-test-api/admin_page_elements.rb +2 -6
  3. data/lib/sakai-cle-test-api/announcements.rb +7 -274
  4. data/lib/sakai-cle-test-api/assessments.rb +27 -930
  5. data/lib/sakai-cle-test-api/assignments.rb +13 -769
  6. data/lib/sakai-cle-test-api/basic_lti.rb +1 -5
  7. data/lib/sakai-cle-test-api/blogs.rb +2 -54
  8. data/lib/sakai-cle-test-api/calendar.rb +8 -423
  9. data/lib/sakai-cle-test-api/common_page_elements.rb +172 -69
  10. data/lib/sakai-cle-test-api/drop_box.rb +0 -21
  11. data/lib/sakai-cle-test-api/email_archive.rb +1 -15
  12. data/lib/sakai-cle-test-api/forums.rb +8 -282
  13. data/lib/sakai-cle-test-api/gradebook.rb +1 -19
  14. data/lib/sakai-cle-test-api/gradebook2.rb +1 -15
  15. data/lib/sakai-cle-test-api/messages.rb +15 -551
  16. data/lib/sakai-cle-test-api/news.rb +1 -3
  17. data/lib/sakai-cle-test-api/polls.rb +3 -65
  18. data/lib/sakai-cle-test-api/profile.rb +2 -36
  19. data/lib/sakai-cle-test-api/profile2.rb +6 -315
  20. data/lib/sakai-cle-test-api/sections.rb +8 -198
  21. data/lib/sakai-cle-test-api/site_page_elements.rb +441 -4
  22. data/lib/sakai-cle-test-api/syllabus.rb +7 -149
  23. data/lib/sakai-cle-test-api/tools_menu.rb +20 -3
  24. data/lib/sakai-cle-test-api/utilities.rb +0 -260
  25. data/sakai-cle-test-api.gemspec +3 -2
  26. metadata +19 -21
  27. data/lib/sakai-cle-test-api/add_files.rb +0 -198
  28. data/lib/sakai-cle-test-api/chat_room.rb +0 -0
  29. data/lib/sakai-cle-test-api/core-ext.rb +0 -90
  30. data/lib/sakai-cle-test-api/data_objects/announcement.rb +0 -38
  31. data/lib/sakai-cle-test-api/data_objects/assessment.rb +0 -32
  32. data/lib/sakai-cle-test-api/data_objects/assignment.rb +0 -62
  33. data/lib/sakai-cle-test-api/data_objects/event.rb +0 -86
  34. data/lib/sakai-cle-test-api/data_objects/lesson.rb +0 -137
  35. data/lib/sakai-cle-test-api/data_objects/resource.rb +0 -174
  36. data/lib/sakai-cle-test-api/data_objects/site.rb +0 -213
  37. data/lib/sakai-cle-test-api/data_objects/syllabus.rb +0 -7
  38. data/lib/sakai-cle-test-api/data_objects/topic.rb +0 -0
  39. data/lib/sakai-cle-test-api/data_objects/web_content_tool.rb +0 -52
  40. data/lib/sakai-cle-test-api/data_objects/wiki.rb +0 -7
  41. data/lib/sakai-cle-test-api/gem_ext.rb +0 -45
  42. data/lib/sakai-cle-test-api/lessons.rb +0 -440
  43. data/lib/sakai-cle-test-api/resources.rb +0 -138
  44. data/lib/sakai-cle-test-api/rich_text.rb +0 -13
@@ -1,9 +1,5 @@
1
1
  #
2
2
  class BasicLTI
3
3
  include ToolsMenu
4
- include PageObject
5
- in_frame(:class=>"portletMainIframe") do |frame|
6
-
7
-
8
- end
4
+ include BasicLTIMethods
9
5
  end
@@ -1,57 +1,5 @@
1
- module BlogsMenuButtons
2
- include PageObject
3
-
4
- def add_blog_entry
5
- frm.link(:text=>"Add blog entry").click
6
- AddBlogEntry.new @browser
7
- end
8
-
9
- end
10
-
1
+ #
11
2
  class Blogs
12
3
  include ToolsMenu
13
- include BlogsMenuButtons
14
- # Returns an array containing the list of Bloggers
15
- # in the "All the blogs" table.
16
- def blogger_list
17
- bloggers = []
18
- frm.table(:class=>"listHier lines").rows.each do |row|
19
- bloggers << row[1].text
20
- end
21
- bloggers.delete_at(0)
22
- return bloggers
23
- end
24
- end
25
-
26
- class AddBlogEntry
27
- include ToolsMenu
28
- include BlogsMenuButtons
29
- include PageObject
30
- def blog_text=(text)
31
- frm.frame(:id, "blog-text-input:1:input___Frame").td(:id, "xEditingArea").frame(:index=>0).wait_until_present
32
- frm.frame(:id, "blog-text-input:1:input___Frame").td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
33
- end
34
-
35
- def publish_entry
36
- frm.button(:value=>"Publish entry").click
37
- BlogsList.new @browser
38
- end
39
-
40
- def save_draft
41
- frm.button(:value=>"Save Draft").click
42
- BlogsList.new @browser
43
- end
44
-
45
- in_frame(:class=>"PortletMainIframe") do |frame|
46
- text_field(:title, :name=>"title-input", :frame=>frame)
47
- radio_button(:only_site_admins, :id=>"instructors-only-radio", :frame=>frame)
48
- radio_button(:all_members, :id=>"all-members-radio", :frame=>frame)
49
- radio_button(:publicly_viewable, :id=>"public-viewable-radio", :frame=>frame)
50
- end
51
- end
52
-
53
- class BlogsList
54
- include ToolsMenu
55
-
56
- include BlogsMenuButtons
4
+ include BlogsMethods
57
5
  end
@@ -1,26 +1,3 @@
1
- module CalendarTools
2
-
3
- #
4
- def add_event
5
- frm.link(:text=>"Add").click
6
- frm.frame(:id, "description___Frame").td(:id, "xEditingArea").frame(:index=>0).wait_until_present
7
- AddEditEvent.new(@browser)
8
- end
9
-
10
- #
11
- def fields
12
- frm.link(:text=>"Fields").click
13
- AddEditFields.new(@browser)
14
- end
15
-
16
- #
17
- def import
18
- frm.link(:text=>"Import").click
19
- ImportStepOne.new(@browser)
20
- end
21
-
22
- end
23
-
24
1
  # Top page of the Calendar
25
2
  # For now it includes all views, though that probably
26
3
  # means it will have to be re-instantiated every time
@@ -28,439 +5,47 @@ end
28
5
  class Calendar
29
6
  include ToolsMenu
30
7
  include CalendarTools
31
- # Selects the specified item in the View select list,
32
- # then reinstantiates the Class.
33
- def select_view(item)
34
- frm.select(:id=>"view").select(item)
35
- Calendar.new(@browser)
36
- end
37
-
38
- # Selects the specified item in the View select list.
39
- # This is the same method as the select_view method, except
40
- # that it does not reinstantiate the class. Use this if you're
41
- # not concerned about throwing obsolete element errors when
42
- # the page updates.
43
- def view=(item)
44
- frm.select(:id=>"view").select(item)
45
- end
46
-
47
- # Selects the specified item in the Show select list.
48
- def show=(item)
49
- frm.select(:id=>"timeFilterOption").select(item)
50
- end
51
-
52
- # Returns the text of the Calendar's header.
53
- def header
54
- frm.div(:class=>"portletBody").h3.text
55
- end
56
-
57
- # This is the alert box object. If you want to
58
- # get the text contents of the alert box, use
59
- # alert_box.text. That will get you a string object
60
- # that is the text contents.
61
- def alert_box
62
- frm.div(:class=>"alertMessage")
63
- end
64
-
65
- # Clicks the link to the specified event, then
66
- # instantiates the EventDetail class.
67
- def open_event(title)
68
- truncated = title[0..5]
69
- frm.link(:text=>/#{Regexp.escape(truncated)}/).click
70
- EventDetail.new(@browser)
71
- end
72
-
73
- # Returns the href value of the target link
74
- # use for validation when you are testing whether the link
75
- # will appear again on another screen, since often times
76
- # validation by title text alone will not work.
77
- def event_href(title)
78
- truncated = title[0..5]
79
- return frm.link(:text=>/#{Regexp.escape(truncated)}/).href
80
- end
81
-
82
- def show_events=(item)
83
- frm.select(:id=>"timeFilterOption").select(item)
84
- end
85
-
86
- # Selects the specified value in the start month select list.
87
- def start_month=(item)
88
- frm.select(:id=>"customStartMonth").select(item)
89
- end
90
-
91
- # Selects the specified value in the start day select list.
92
- def start_day=(item)
93
- frm.select(:id=>"customStartDay").select(item)
94
- end
95
-
96
- # Selects the specified value in the start year select list.
97
- def start_year=(item)
98
- frm.select(:id=>"customStartYear").select(item)
99
- end
100
-
101
- # Selects the specified value in the end month select list.
102
- def end_month=(item)
103
- frm.select(:id=>"customEndMonth").select(item)
104
- end
105
-
106
- # Selects the specified value in the End Day select list.
107
- def end_day=(item)
108
- frm.select(:id=>"customEndDay").select(item)
109
- end
110
-
111
- # Selects the specified value in the End Year select list.
112
- def end_year=(item)
113
- frm.select(:id=>"customEndYear").select(item)
114
- end
115
-
116
- # Clicks the Filter Events button, then re-instantiates
117
- # the Calendar class to avoid the possibility of an
118
- # ObsoleteElement error.
119
- def filter_events
120
- frm.button(:name=>"eventSubmit_doCustomdate").click
121
- Calendar.new(@browser)
122
- end
123
-
124
- # Clicks the Go to Today button, then reinstantiates
125
- # the Calendar class.
126
- def go_to_today
127
- frm.button(:value=>"Go to Today").click
128
- Calendar.new(@browser)
129
- end
130
-
131
- # Returns an array of the titles of the displayed events.
132
- def event_list
133
- events_list
134
- end
135
-
136
- # Returns an array for the listed events.
137
- # This array contains more than simply strings of the event titles, because
138
- # often the titles are truncated to fit on the screen. In addition, getting the "title"
139
- # tag of the link is often problematic because titles can contain double-quotes, which
140
- # will mess up the HTML of the anchor tag (there is probably an XSS vulnerability to
141
- # exploit, there. This should be extensively tested.).
142
- #
143
- # Because of these issues, the array contains the title tag, the anchor text, and
144
- # the entire href string for every event listed on the page. Having all three items
145
- # available should ensure that verification steps don't give false results--especially
146
- # when you are doing a negative test (checking that an event is NOT present).
147
- def events_list
148
- list = []
149
- if frm.table(:class=>"calendar").exist?
150
- events_table = frm.table(:class=>"calendar")
151
- else
152
- events_table = frm.table(:class=>"listHier lines nolines")
153
- end
154
- events_table.links.each do |link|
155
- list << link.title
156
- list << link.text
157
- list << link.href
158
- list << link.html[/(?<="location=").+doDescription/]
159
- end
160
- list.compact!
161
- list.uniq!
162
- return list
163
- end
164
-
165
- # Clicks the "Previous X" button, where X might be Day, Week, or Month,
166
- # then reinstantiates the Calendar class to ensure against any obsolete element
167
- # errors.
168
- def previous
169
- frm.button(:name=>"eventSubmit_doPrev").click
170
- Calendar.new(@browser)
171
- end
172
-
173
- # Clicks the "Next X" button, where X might be Day, Week, or Month,
174
- # then reinstantiates the Calendar class to ensure against any obsolete element
175
- # errors.
176
- def next
177
- frm.button(:name=>"eventSubmit_doNext").click
178
- Calendar.new(@browser)
179
- end
180
-
181
- # Clicks the "Today" button and reinstantiates the class.
182
- def today
183
- frm.button(:value=>"Today").click
184
- Calendar.new(@browser)
185
- end
186
-
187
- def earlier
188
- frm().link(:text=>"Earlier").click
189
- Calendar.new(@browser)
190
- end
191
-
192
- def later
193
- frm().link(:text=>"Later").click
194
- Calendar.new(@browser)
195
- end
196
-
197
- # Clicks the "Set as Default View" button
198
- def set_as_default_view
199
- frm.link(:text=>"Set as Default View").click
200
- end
8
+ include CalendarMethods
201
9
  end
202
10
 
203
11
  # The page that appears when you click on an event in the Calendar
204
12
  class EventDetail
205
13
  include ToolsMenu
206
14
  include CalendarTools
207
- # Clicks the Go to Today button, then instantiates
208
- # the Calendar class.
209
- def go_to_today
210
- frm.button(:value=>"Go to Today").click
211
- Calendar.new(@browser)
212
- end
213
-
214
- def back_to_calendar
215
- frm.button(:value=>"Back to Calendar").click
216
- Calendar.new(@browser)
217
- end
218
-
219
- def last_event
220
- frm().button(:value=>"< Last Event").click
221
- EventDetail.new(@browser)
222
- end
223
-
224
- def next_event
225
- frm().button(:value=>"Next Event >").click
226
- EventDetail.new(@browser)
227
- end
228
-
229
- def event_title
230
- frm.div(:class=>"portletBody").h3.text
231
- end
232
-
233
- def edit
234
- frm.button(:value=>"Edit").click
235
- AddEditEvent.new(@browser)
236
- end
237
-
238
- def remove_event
239
- frm.button(:value=>"Remove event").click
240
- DeleteConfirm.new(@browser)
241
- end
242
-
243
- # Returns a hash object containing the contents of the event details
244
- # table on the page, with each of the header column items as a Key
245
- # and the associated data column as the corresponding Value.
246
- def details
247
- details = {}
248
- frm.table(:class=>"itemSummary").rows.each do |row|
249
- details.store(row.th.text, row.td.text)
250
- end
251
- return details
252
- end
253
-
15
+ include EventDetailMethods
254
16
  end
255
17
 
256
18
  #
257
19
  class AddEditEvent
258
20
  include ToolsMenu
259
- include PageObject
260
- #
261
- def save_event
262
- frm.button(:value=>"Save Event").click
263
- Calendar.new(@browser)
264
- end
265
- #
266
- def message=(text)
267
- frm.frame(:id, "description___Frame").td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
268
- end
269
-
270
- # The FCKEditor object. Use this method to set up a "wait_until_present"
271
- # step, since sometimes it takes a long time for this object to load.
272
- def message_editor
273
- frm.frame(:id, "description___Frame").td(:id, "xEditingArea").frame(:index=>0)
274
- end
275
-
276
- def frequency
277
- frm.button(:name=>"eventSubmit_doEditfrequency").click
278
- EventFrequency.new(@browser)
279
- end
280
-
281
- def add_attachments
282
- frm.button(:value=>"Add Attachments").click
283
- EventAttach.new(@browser)
284
- end
285
-
286
- def add_remove_attachments
287
- frm.button(:value=>"Add/remove attachments").click
288
- EventAttach.new(@browser)
289
- end
290
-
291
- # Returns true if the page has a link with the
292
- # specified file name. Use for test case asserts.
293
- def attachment?(file_name)
294
- frm.link(:text=>file_name).exist?
295
- end
296
-
297
- # Use this method to enter text into custom fields
298
- # on the page. The "field" variable is the name of the
299
- # field, while the "text" is the string you want to put into
300
- # it.
301
- def custom_field_text(field, text)
302
- frm.text_field(:name=>field).set(text)
303
- end
304
-
305
- in_frame(:class=>"portletMainIframe") do |frame|
306
- text_field(:title, :id=>"activitytitle", :frame=>frame)
307
- select_list(:month, :id=>"month", :frame=>frame)
308
- select_list(:day, :id=>"day", :frame=>frame)
309
- select_list(:year, :id=>"yearSelect", :frame=>frame)
310
- select_list(:start_hour, :id=>"startHour", :frame=>frame)
311
- select_list(:start_minute, :id=>"startMinute", :frame=>frame)
312
- select_list(:start_meridian, :id=>"startAmpm", :frame=>frame)
313
- select_list(:hours, :id=>"duHour", :frame=>frame)
314
- select_list(:minutes, :id=>"duMinute", :frame=>frame)
315
- select_list(:end_hour, :id=>"endHour", :frame=>frame)
316
- select_list(:end_minute, :id=>"endMinute", :frame=>frame)
317
- select_list(:end_meridian, :id=>"endAmpm", :frame=>frame)
318
- radio_button(:display_to_site, :id=>"site", :frame=>frame)
319
- select_list(:event_type, :id=>"eventType", :frame=>frame)
320
- text_area(:location, :name=>"location", :frame=>frame)
321
-
322
- end
21
+ include AddEditEventMethods
323
22
  end
324
23
 
325
24
  # The page that appears when the Frequency button is clicked on the Add/Edit
326
25
  # Event page.
327
26
  class EventFrequency
328
27
  include ToolsMenu
329
- include PageObject
330
- def save_frequency
331
- frm.button(:value=>"Save Frequency").click
332
- AddEditEvent.new(@browser)
333
- end
334
-
335
- def cancel
336
- frm.button(:value=>"Cancel").click
337
- AddEditEvent.new(@browser)
338
- end
339
-
340
- in_frame(:class=>"portletMainIframe") do |frame|
341
- select_list(:event_frequency, :id=>"frequencySelect", :frame=>frame)
342
- select_list(:interval, :id=>"interval", :frame=>frame)
343
- select_list(:ends_after, :name=>"count", :frame=>frame)
344
- select_list(:ends_month, :id=>"endMonth", :frame=>frame)
345
- select_list(:ends_day, :id=>"endDay", :frame=>frame)
346
- select_list(:ends_year, :id=>"endYear", :frame=>frame)
347
- radio_button(:after, :id=>"count", :frame=>frame)
348
- radio_button(:on, :id=>"till", :frame=>frame)
349
- radio_button(:never, :id=>"never", :frame=>frame)
350
-
351
- end
28
+ include EventFrequencyMethods
352
29
  end
353
30
 
354
31
  class AddEditFields
355
32
  include ToolsMenu
356
- include PageObject
357
- # Clicks the Save Field Changes buton and instantiates
358
- # The Calendar or EventDetail class--unless the Alert Message box appears,
359
- # in which case it re-instantiates the class.
360
- def save_field_changes
361
- frm.button(:value=>"Save Field Changes").click
362
- if frm.div(:class=>"alertMessage").exist?
363
- AddEditFields.new(@browser)
364
- elsif frm.button(:value=>"Back to Calendar").exist?
365
- EventDetail.new(@browser)
366
- else
367
- Calendar.new(@browser)
368
- end
369
- end
370
-
371
- # Returns a string of the contents of the Alert box.
372
- def alert_box
373
- frm.div(:class=>"alertMessage").text
374
- end
375
-
376
- def create_field
377
- frm.button(:value=>"Create Field").click
378
- AddEditFields.new(@browser)
379
- end
380
-
381
- # Checks the checkbox for the specified field
382
- def check_remove(field_name)
383
- frm.table(:class=>/listHier lines/).row(:text=>/#{Regexp.escape(field_name)}/).checkbox.set
384
- end
385
-
386
- in_frame(:class=>"portletMainIframe") do |frame|
387
- text_field(:field_name, :id=>"textfield", :frame=>frame)
388
-
389
- end
33
+ include AddEditFieldsMethods
390
34
  end
391
35
 
392
36
  class ImportStepOne
393
37
  include ToolsMenu
394
- include PageObject
395
- def continue
396
- frm.button(:value=>"Continue").click
397
- ImportStepTwo.new(@browser)
398
- end
399
-
400
- in_frame(:class=>"portletMainIframe") do |frame|
401
- radio_button(:microsoft_outlook, :id=>"importType_Outlook", :frame=>frame)
402
- radio_button(:meeting_maker, :id=>"importType_MeetingMaker", :frame=>frame)
403
- radio_button(:generic_calendar_import, :id=>"importType_Generic", :frame=>frame)
404
-
405
- end
38
+ include ImportStepOneMethods
406
39
  end
407
40
 
408
41
  class ImportStepTwo
409
42
  include ToolsMenu
410
- def continue
411
- frm.button(:value=>"Continue").click
412
- ImportStepThree.new(@browser)
413
- end
414
-
415
- # Enters the specified filename in the file field.
416
- #
417
- # Note that the file path is an optional second parameter, if you do not want to
418
- # include the full path in the filename.
419
- def import_file(filename, filepath="")
420
- frm.file_field(:name=>"importFile").set(filepath + filename)
421
- end
43
+ include ImportStepTwoMethods
422
44
  end
423
45
 
424
46
  class ImportStepThree
425
47
  include ToolsMenu
426
- include PageObject
427
- def import_events
428
- frm.button(:value=>"Import Events").click
429
- Calendar.new(@browser)
430
- end
431
-
432
- # Returns an array containing the list of Activity names on the page.
433
- def events
434
- list = []
435
- frm.table(:class=>/listHier lines/).rows.each do |row|
436
- if row.label(:for=>/eventSelected/).exist?
437
- list << row.label.text
438
- end
439
- end
440
- names = []
441
- list.uniq!
442
- list.each do | item |
443
- name = item[/(?<=\s).+(?=\s\s\()/]
444
- names << name
445
- end
446
- return names
447
- end
448
-
449
- # Returns the date of the specified event
450
- def event_date(event_name)
451
- frm.table(:class=>/listHier lines/).row(:text=>/#{Regexp.escape(event_name)}/)[0].text
452
- end
453
-
454
- # Unchecks the checkbox for the specified event
455
- def uncheck_event(event_name)
456
- frm.table(:class=>/listHier lines/).row(:text=>/#{Regexp.escape(event_name)}/)
457
- end
458
-
459
- in_frame(:class=>"portletMainIframe") do |frame|
460
- radio_button(:import_events_for_site, :id=>"site", :frame=>frame)
461
- radio_button(:import_events_for_selected_groups, :id=>"groups", :frame=>frame)
462
-
463
- end
48
+ include ImportStepThreeMethods
464
49
  end
465
50
 
466
51
  # TODO: Rethink this!!!