sakai-cle-test-api 0.0.75 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. data/lib/sakai-cle-test-api.rb +4 -5
  2. data/lib/sakai-cle-test-api/base_page.rb +20 -0
  3. data/lib/sakai-cle-test-api/core-ext.rb +90 -0
  4. data/lib/sakai-cle-test-api/data_objects/announcement.rb +81 -0
  5. data/lib/sakai-cle-test-api/data_objects/assessment.rb +32 -0
  6. data/lib/sakai-cle-test-api/data_objects/assignment.rb +90 -0
  7. data/lib/sakai-cle-test-api/data_objects/event.rb +89 -0
  8. data/lib/sakai-cle-test-api/data_objects/lesson.rb +185 -0
  9. data/lib/sakai-cle-test-api/data_objects/resource.rb +209 -0
  10. data/lib/sakai-cle-test-api/data_objects/site.rb +208 -0
  11. data/lib/sakai-cle-test-api/data_objects/syllabus.rb +39 -0
  12. data/lib/sakai-cle-test-api/data_objects/web_content_tool.rb +51 -0
  13. data/lib/sakai-cle-test-api/data_objects/wiki.rb +53 -0
  14. data/lib/sakai-cle-test-api/gem_ext.rb +23 -0
  15. data/lib/sakai-cle-test-api/page_helper.rb +22 -0
  16. data/lib/sakai-cle-test-api/page_maker.rb +48 -0
  17. data/lib/sakai-cle-test-api/page_objects/account.rb +111 -0
  18. data/lib/sakai-cle-test-api/page_objects/aliases.rb +43 -0
  19. data/lib/sakai-cle-test-api/page_objects/announcements.rb +190 -0
  20. data/lib/sakai-cle-test-api/page_objects/assessments.rb +874 -0
  21. data/lib/sakai-cle-test-api/page_objects/assignments.rb +771 -0
  22. data/lib/sakai-cle-test-api/page_objects/basic_lti.rb +6 -0
  23. data/lib/sakai-cle-test-api/page_objects/blogger.rb +205 -0
  24. data/lib/sakai-cle-test-api/page_objects/blogs.rb +60 -0
  25. data/lib/sakai-cle-test-api/page_objects/calendar.rb +431 -0
  26. data/lib/sakai-cle-test-api/page_objects/calendar_summary.rb +1 -0
  27. data/lib/sakai-cle-test-api/page_objects/chat_room.rb +12 -0
  28. data/lib/sakai-cle-test-api/page_objects/drop_box.rb +9 -0
  29. data/lib/sakai-cle-test-api/page_objects/email_archive.rb +22 -0
  30. data/lib/sakai-cle-test-api/page_objects/evaluations.rb +158 -0
  31. data/lib/sakai-cle-test-api/page_objects/feedback.rb +36 -0
  32. data/lib/sakai-cle-test-api/page_objects/forms.rb +120 -0
  33. data/lib/sakai-cle-test-api/page_objects/forums.rb +289 -0
  34. data/lib/sakai-cle-test-api/page_objects/glossary.rb +117 -0
  35. data/lib/sakai-cle-test-api/page_objects/gradebook.rb +29 -0
  36. data/lib/sakai-cle-test-api/page_objects/gradebook2.rb +17 -0
  37. data/lib/sakai-cle-test-api/page_objects/home.rb +36 -0
  38. data/lib/sakai-cle-test-api/page_objects/jforums.rb +444 -0
  39. data/lib/sakai-cle-test-api/page_objects/job_scheduler.rb +121 -0
  40. data/lib/sakai-cle-test-api/page_objects/lessons.rb +360 -0
  41. data/lib/sakai-cle-test-api/page_objects/login.rb +28 -0
  42. data/lib/sakai-cle-test-api/page_objects/matrix.rb +241 -0
  43. data/lib/sakai-cle-test-api/page_objects/media_gallery.rb +13 -0
  44. data/lib/sakai-cle-test-api/page_objects/messages.rb +622 -0
  45. data/lib/sakai-cle-test-api/page_objects/my_workspace.rb +44 -0
  46. data/lib/sakai-cle-test-api/page_objects/news.rb +8 -0
  47. data/lib/sakai-cle-test-api/page_objects/podcasts.rb +27 -0
  48. data/lib/sakai-cle-test-api/page_objects/polls.rb +69 -0
  49. data/lib/sakai-cle-test-api/page_objects/portfolio_templates.rb +161 -0
  50. data/lib/sakai-cle-test-api/page_objects/portfolios.rb +162 -0
  51. data/lib/sakai-cle-test-api/page_objects/post_em.rb +1 -0
  52. data/lib/sakai-cle-test-api/page_objects/profile.rb +51 -0
  53. data/lib/sakai-cle-test-api/page_objects/profile2.rb +344 -0
  54. data/lib/sakai-cle-test-api/page_objects/public_search.rb +61 -0
  55. data/lib/sakai-cle-test-api/page_objects/realms.rb +19 -0
  56. data/lib/sakai-cle-test-api/page_objects/resources.rb +326 -0
  57. data/lib/sakai-cle-test-api/{resources_roster.rb → page_objects/resources_roster.rb} +0 -0
  58. data/lib/sakai-cle-test-api/page_objects/rosters.rb +70 -0
  59. data/lib/sakai-cle-test-api/page_objects/rwiki.rb +34 -0
  60. data/lib/sakai-cle-test-api/page_objects/search.rb +34 -0
  61. data/lib/sakai-cle-test-api/page_objects/sections.rb +295 -0
  62. data/lib/sakai-cle-test-api/page_objects/single_user.rb +1 -0
  63. data/lib/sakai-cle-test-api/page_objects/site_setup.rb +686 -0
  64. data/lib/sakai-cle-test-api/page_objects/site_statistics.rb +1 -0
  65. data/lib/sakai-cle-test-api/page_objects/sites.rb +255 -0
  66. data/lib/sakai-cle-test-api/page_objects/styles.rb +74 -0
  67. data/lib/sakai-cle-test-api/page_objects/syllabus.rb +166 -0
  68. data/lib/sakai-cle-test-api/page_objects/user_membership.rb +57 -0
  69. data/lib/sakai-cle-test-api/page_objects/users.rb +88 -0
  70. data/lib/sakai-cle-test-api/rich_text.rb +27 -0
  71. data/lib/sakai-cle-test-api/utilities.rb +260 -0
  72. data/lib/sakai-cle-test-api/workflows.rb +224 -0
  73. data/sakai-cle-test-api.gemspec +3 -5
  74. metadata +74 -64
  75. data/lib/sakai-cle-test-api/admin_page_elements.rb +0 -1030
  76. data/lib/sakai-cle-test-api/announcements.rb +0 -59
  77. data/lib/sakai-cle-test-api/assessments.rb +0 -194
  78. data/lib/sakai-cle-test-api/assignments.rb +0 -113
  79. data/lib/sakai-cle-test-api/basic_lti.rb +0 -5
  80. data/lib/sakai-cle-test-api/blogs.rb +0 -5
  81. data/lib/sakai-cle-test-api/calendar.rb +0 -65
  82. data/lib/sakai-cle-test-api/calendar_summary.rb +0 -0
  83. data/lib/sakai-cle-test-api/common_page_elements.rb +0 -1228
  84. data/lib/sakai-cle-test-api/drop_box.rb +0 -0
  85. data/lib/sakai-cle-test-api/email_archive.rb +0 -10
  86. data/lib/sakai-cle-test-api/forums.rb +0 -39
  87. data/lib/sakai-cle-test-api/gradebook.rb +0 -10
  88. data/lib/sakai-cle-test-api/gradebook2.rb +0 -6
  89. data/lib/sakai-cle-test-api/messages.rb +0 -119
  90. data/lib/sakai-cle-test-api/news.rb +0 -9
  91. data/lib/sakai-cle-test-api/polls.rb +0 -24
  92. data/lib/sakai-cle-test-api/post_em.rb +0 -0
  93. data/lib/sakai-cle-test-api/profile.rb +0 -17
  94. data/lib/sakai-cle-test-api/profile2.rb +0 -43
  95. data/lib/sakai-cle-test-api/rwiki.rb +0 -0
  96. data/lib/sakai-cle-test-api/sections.rb +0 -47
  97. data/lib/sakai-cle-test-api/single_user.rb +0 -0
  98. data/lib/sakai-cle-test-api/site_page_elements.rb +0 -2350
  99. data/lib/sakai-cle-test-api/site_statistics.rb +0 -0
  100. data/lib/sakai-cle-test-api/syllabus.rb +0 -77
  101. data/lib/sakai-cle-test-api/tools_menu.rb +0 -415
@@ -0,0 +1,34 @@
1
+ #================
2
+ # Administrative Search Pages
3
+ #================
4
+
5
+ # The Search page in the Administration Workspace - "icon-sakai-search"
6
+ class Search < BasePage
7
+
8
+ frame_element
9
+
10
+ action(:admin) { |b| b.frm.link(:text=>"Admin").click }
11
+ element(:search_field) { |b| b.frm.text_field(:id=>"search") }
12
+ action(:search_button) { |b| b.frm.button(:name=>"sb").click }
13
+ element(:this_site) { |b| b.frm.radio(:id=>"searchSite") }
14
+ element(:all_my_sites) { |b| b.frm.radio(:id=>"searchMine") }
15
+
16
+ end
17
+
18
+
19
+ # The Search Admin page within the Search page in the Admin workspace
20
+ class SearchAdmin < BasePage
21
+
22
+ frame_element
23
+
24
+ action(:search) { |b| b.frm.link(:text=>"Search").click }
25
+ action(:rebuild_site_index) { |b| b.frm.link(:text=>"Rebuild Site Index").click }
26
+ action(:refresh_site_index) { |b| b.frm.link(:text=>"Refresh Site Index").click }
27
+ action(:rebuild_whole_index) { |b| b.frm.link(:text=>"Rebuild Whole Index").click }
28
+ action(:refresh_whole_index) { |b| b.frm.link(:text=>"Refresh Whole Index").click }
29
+ action(:remove_lock) { |b| b.frm.link(:text=>"Remove Lock").click }
30
+ action(:reload_index) { |b| b.frm.link(:text=>"Reload Index").click }
31
+ action(:enable_diagnostics) { |b| b.frm.link(:text=>"Enable Diagnostics").click }
32
+ action(:disable_diagnostics) { |b| b.frm.link(:text=>"Disable Diagnostics").click }
33
+
34
+ end
@@ -0,0 +1,295 @@
1
+ #================
2
+ # Sections - Site Management
3
+ #================
4
+
5
+ class SectionsBase < BasePage
6
+
7
+ frame_element
8
+ basic_page_elements
9
+
10
+ class << self
11
+ def menu_elements
12
+ # Clicks the Add Sections button/link and instantiates
13
+ # the AddEditSections Class.
14
+ action(:add_sections) { |b| b.frm.link(:text=>"Add Sections").click }
15
+ action(:overview) { |b| b.frm.link(:text=>"Overview").click }
16
+ action(:student_memberships) { |b| b.frm.link(:text=>"Student Memberships").click }
17
+ action(:options) { |b| b.frm.link(:text=>"Options").click }
18
+ end
19
+ end
20
+ end
21
+
22
+ # Topmost page for Sections in Site Management
23
+ class Sections < SectionsBase
24
+
25
+ menu_elements
26
+
27
+ # Clicks the Edit link for the specified section.
28
+ # Then instantiates the AddEditSections class.
29
+ def edit(title)
30
+ frm.table(:class=>/listHier/).row(:text=>/#{Regexp.escape(title)}/).link(:text=>/Edit/).click
31
+ AddEditSections.new(@browser)
32
+ end
33
+
34
+ def assign_tas(title)
35
+ frm.table(:class=>/listHier/).row(:text=>/#{Regexp.escape(title)}/).link(:text=>/Assign TAs/).click
36
+ AssignTeachingAssistants.new(@browser)
37
+ end
38
+
39
+ def assign_students(title)
40
+ frm.table(:class=>/listHier/).row(:text=>/#{Regexp.escape(title)}/).link(:text=>/Assign Students/).click
41
+ AssignStudents.new(@browser)
42
+ end
43
+
44
+ def check(title)
45
+ frm.table(:class=>/listHier/).row(:text=>/#{Regexp.escape(title)}/).checkbox(:name=>/remove/).set
46
+ end
47
+
48
+ def section_names
49
+ names = []
50
+ frm.table(:class=>/listHier/).rows.each do |row|
51
+ if row.td(:class=>"leftIndent").exist?
52
+ names << row.td(:class=>"leftIndent").div(:index=>0).text
53
+ end
54
+ end
55
+ return names
56
+ end
57
+
58
+ def remove_sections
59
+ frm.button(:value=>"Remove Sections").click
60
+ Sections.new(@browser)
61
+ end
62
+
63
+ # Returns the text of the Teach Assistant cell for the specified
64
+ # Section.
65
+ def tas_for(title)
66
+ frm.table(:class=>/listHier/).row(:text=>/#{Regexp.escape(title)}/)[1].text
67
+ end
68
+
69
+ #
70
+ def days_for(title)
71
+ frm.table(:class=>/listHier/).row(:text=>/#{Regexp.escape(title)}/)[2].text
72
+ end
73
+
74
+ #
75
+ def time_for(title)
76
+ frm.table(:class=>/listHier/).row(:text=>/#{Regexp.escape(title)}/)[3].text
77
+ end
78
+
79
+ #
80
+ def location_for(title)
81
+ frm.table(:class=>/listHier/).row(:text=>/#{Regexp.escape(title)}/)[4].text
82
+ end
83
+
84
+ #
85
+ def current_size_for(title)
86
+ frm.table(:class=>/listHier/).row(:text=>/#{Regexp.escape(title)}/)[5].text
87
+ end
88
+
89
+ #
90
+ def availability_for(title)
91
+ frm.table(:class=>/listHier/).row(:text=>/#{Regexp.escape(title)}/)[6].text
92
+ end
93
+
94
+ def alert_text
95
+ frm.div(:class=>"validation").text
96
+ end
97
+
98
+ def success_text
99
+ frm.div(:class=>"success").text
100
+ end
101
+
102
+ end
103
+
104
+ # Methods in this class currently do not support
105
+ # adding multiple instances of sections simultaneously.
106
+ # That will be added at some future time.
107
+ # The same goes for adding days with different meeting times. This will hopefully
108
+ # be supported in the future.
109
+ class AddEditSections < SectionsBase
110
+
111
+ menu_elements
112
+
113
+ # The Update button is only available when editing an existing Sections record.
114
+ def update
115
+ frm.button(:value=>"Update").click
116
+ if frm.div(:class=>"validation").exist?
117
+ AddEditSections.new(@browser)
118
+ else
119
+ Sections.new(@browser)
120
+ end
121
+ end
122
+
123
+ # This method takes an array object containing strings of the
124
+ # days of the week and then clicks the appropriate checkboxes, based
125
+ # on those strings.
126
+ def check_days(array)
127
+ frm.checkbox(:id=>/SectionsForm:sectionTable:0:meetingsTable:0:monday/).set if array.include?(/mon/i)
128
+ frm.checkbox(:id=>/SectionsForm:sectionTable:0:meetingsTable:0:tuesday/).set if array.include?(/tue/i)
129
+ frm.checkbox(:id=>/SectionsForm:sectionTable:0:meetingsTable:0:wednesday/).set if array.include?(/wed/i)
130
+ frm.checkbox(:id=>/SectionsForm:sectionTable:0:meetingsTable:0:thursday/).set if array.include?(/thu/i)
131
+ frm.checkbox(:id=>/SectionsForm:sectionTable:0:meetingsTable:0:friday/).set if array.include?(/fri/i)
132
+ frm.checkbox(:id=>/SectionsForm:sectionTable:0:meetingsTable:0:saturday/).set if array.include?(/sat/i)
133
+ frm.checkbox(:id=>/SectionsForm:sectionTable:0:meetingsTable:0:sunday/).set if array.include?(/sun/i)
134
+ end
135
+
136
+ element(:category) { |b| b.frm.select(:id=>/SectionsForm:category/) }
137
+ element(:name) { |b| b.frm.text_field(:id=>/SectionsForm:sectionTable:0:titleInput/) }
138
+ element(:monday) { |b| b.frm.checkbox(:id=>/SectionsForm:sectionTable:0:meetingsTable:0:monday/) }
139
+ element(:tuesday) { |b| b.frm.checkbox(:id=>/SectionsForm:sectionTable:0:meetingsTable:0:tuesday/) }
140
+ element(:wednesday) { |b| b.frm.checkbox(:id=>/SectionsForm:sectionTable:0:meetingsTable:0:wednesday/) }
141
+ element(:thursday) { |b| b.frm.checkbox(:id=>/SectionsForm:sectionTable:0:meetingsTable:0:thursday/) }
142
+ element(:friday) { |b| b.frm.checkbox(:id=>/SectionsForm:sectionTable:0:meetingsTable:0:friday/) }
143
+ element(:saturday) { |b| b.frm.checkbox(:id=>/SectionsForm:sectionTable:0:meetingsTable:0:saturday/) }
144
+ element(:sunday) { |b| b.frm.checkbox(:id=>/SectionsForm:sectionTable:0:meetingsTable:0:sunday/) }
145
+ element(:start_time) { |b| b.frm.text_field(:id=>/SectionsForm:sectionTable:0:meetingsTable:0:startTime/) }
146
+ element(:end_time) { |b| b.frm.text_field(:id=>/SectionsForm:sectionTable:0:meetingsTable:0:endTime/) }
147
+ element(:location) { |b| b.frm.text_field(:id=>/SectionsForm:sectionTable:0:meetingsTable:0:location/) }
148
+ element(:startAM) { |b| b.frm.radio(:name=>/SectionsForm:sectionTable:0:meetingsTable:0:startTimeAm/, :index=>0) }
149
+ element(:startPM) { |b| b.frm.radio(:name=>/SectionsForm:sectionTable:0:meetingsTable:0:startTimeAm/, :index=>1) }
150
+ element(:endAM) { |b| b.frm.radio(:name=>/SectionsForm:sectionTable:0:meetingsTable:0:endTimeAm/, :index=>0) }
151
+ element(:endPM) { |b| b.frm.radio(:name=>/SectionsForm:sectionTable:0:meetingsTable:0:endTimeAm/, :index=>1) }
152
+ element(:unlimited_students) { |b| b.frm.radio(:name=>/SectionsForm:sectionTable:0:limit/, :index=>0) }
153
+ element(:limited_students) { |b| b.frm.radio(:name=>/SectionsForm:sectionTable:0:limit/, :index=>1) }
154
+ element(:max_students) { |b| b.frm.text_field(:id=>/SectionsForm:sectionTable:0:maxEnrollmentInput/) }
155
+
156
+ end
157
+
158
+ #
159
+ class AssignTeachingAssistants < SectionsBase
160
+
161
+ menu_elements
162
+
163
+ def assign_TAs
164
+ frm.button(:value=>"Assign TAs").click
165
+ Sections.new(@browser)
166
+ end
167
+
168
+ element(:available_tas) { |b| b.frm.select(:id=>"memberForm:availableUsers") }
169
+ element(:assigned_tas) { |b| b.frm.select(:id=>"memberForm:selectedUsers") }
170
+ action(:assign) { |b| b.frm.button(:value=>">").click }
171
+ action(:unassign) { |b| b.frm.button(:value=>"<").click }
172
+ action(:assign_all) { |b| b.frm.button(:value=>">>").click }
173
+ action(:unassign_all) { |b| b.frm.button(:value=>"<<").click }
174
+
175
+ end
176
+
177
+ #
178
+ class AssignStudents < SectionsBase
179
+
180
+ menu_elements
181
+
182
+ def assign_students
183
+ frm.button(:value=>"Assign students").click
184
+ Sections.new(@browser)
185
+ end
186
+
187
+ element(:available_students) { |b| b.frm.select(:id=>"memberForm:availableUsers") }
188
+ element(:assigned_students) { |b| b.frm.select(:id=>"memberForm:selectedUsers") }
189
+ action(:assign) { |b| b.frm.button(:value=>">").click }
190
+ action(:unassign) { |b| b.frm.button(:value=>"<").click }
191
+ action(:assign_all) { |b| b.frm.button(:value=>">>").click }
192
+ action(:unassign_all) { |b| b.frm.button(:value=>"<<").click }
193
+
194
+ end
195
+
196
+ # The Options page for Sections.
197
+ class SectionsOptions < SectionsBase
198
+
199
+ menu_elements
200
+
201
+ element(:students_can_sign_up) { |b| b.frm.checkbox(:id=>"optionsForm:selfRegister") }
202
+ element(:students_can_switch) { |b| b.frm.checkbox(:id=>"optionsForm:selfSwitch") }
203
+
204
+ action(:update) { |b| b.frm.button(:id=>"optionsForm:_idJsp50").click }
205
+ action(:cancel) { |b| b.frm.button(:id=>"optionsForm:_idJsp51").click }
206
+
207
+ end
208
+
209
+ # The Add Sections Page in Site Management
210
+ class AddSections < SectionsBase
211
+
212
+ menu_elements
213
+
214
+ element(:num_to_add) { |b| b.frm.select_list(:id=>"addSectionsForm:numToAdd") }
215
+ element(:category) { |b| b.frm.select_list(:id=>"addSectionsForm:category") }
216
+ action(:cancel) { |b| b.frm.button(:id=>"addSectionsForm:_idJsp90").click }
217
+ # Note that the following field definitions are appropriate for
218
+ # ONLY THE FIRST instance of each of the fields. The Add Sections page
219
+ # allows for an arbitrary number of these fields to exist.
220
+ # If you are going to test the addition of multiple sections
221
+ # and/or meetings, then their elements will have to be
222
+ # explicitly called or defined in the test scripts themselves.
223
+ element(:name) { |b| b.frm.text_field(:id=>"addSectionsForm:sectionTable:0:titleInput") }
224
+ element(:unlimited_size) { |b| b.frm.radio(:name=>"addSectionsForm:sectionTable:0:limit") }
225
+ element(:limited_size) { |b| b.frm.select_list(:name=>"addSectionsForm:sectionTable:0:limit") }
226
+ element(:max_enrollment) { |b| b.frm.text_field(:id=>"addSectionsForm:sectionTable:0:maxEnrollmentInput") }
227
+ element(:monday) { |b| b.frm.text_field(:id=>"addSectionsForm:sectionTable:0:meetingsTable:0:monday") }
228
+ element(:tuesday) { |b| b.frm.checkbox(:id=>"addSectionsForm:sectionTable:0:meetingsTable:0:tuesday") }
229
+ element(:wednesday) { |b| b.frm.text_field(:id=>"addSectionsForm:sectionTable:0:meetingsTable:0:wednesday") }
230
+ element(:thursday) { |b| b.frm.text_field(:id=>"addSectionsForm:sectionTable:0:meetingsTable:0:thursday") }
231
+ element(:friday) { |b| b.frm.text_field(:id=>"addSectionsForm:sectionTable:0:meetingsTable:0:friday") }
232
+ element(:saturday) { |b| b.frm.text_field(:id=>"addSectionsForm:sectionTable:0:meetingsTable:0:saturday") }
233
+ element(:sunday) { |b| b.frm.text_field(:id=>"addSectionsForm:sectionTable:0:meetingsTable:0:sunday") }
234
+ element(:start_time) { |b| b.frm.text_field(:id=>"addSectionsForm:sectionTable:0:meetingsTable:0:startTime") }
235
+ element(:start_am) { |b| b.frm.select_list(:name=>"addSectionsForm:sectionTable:0:meetingsTable:0:startTimeAm") }
236
+ element(:start_pm) { |b| b.frm.select_list(:name=>"addSectionsForm:sectionTable:0:meetingsTable:0:startTimeAm") }
237
+ element(:end_time) { |b| b.frm.text_field(:id=>"addSectionsForm:sectionTable:0:meetingsTable:0:endTime") }
238
+ element(:end_am) { |b| b.frm.select_list(:name=>"addSectionsForm:sectionTable:0:meetingsTable:0:endTimeAm") }
239
+ element(:end_pm) { |b| b.frm.select_list(:name=>"addSectionsForm:sectionTable:0:meetingsTable:0:endTimeAm") }
240
+ element(:location) { |b| b.frm.text_field(:id=>"addSectionsForm:sectionTable:0:meetingsTable:0:location") }
241
+ action(:add_days) { |b| b.frm.link(:id=>"addSectionsForm:sectionTable:0:addMeeting").click }
242
+
243
+ end
244
+
245
+ # Exactly like the Add Sections page, but used when editing an existing section
246
+ class EditSections < SectionsBase
247
+
248
+ menu_elements
249
+
250
+ element(:num_to_add) { |b| b.frm.select_list(:id=>"editSectionsForm:numToAdd") }
251
+ element(:category) { |b| b.frm.select_list(:id=>"editSectionsForm:category") }
252
+ action(:cancel) { |b| b.frm.button(:id=>"editSectionsForm:_idJsp90").click }
253
+ # Note that the following field definitions are appropriate for
254
+ # ONLY THE FIRST instance of each of the fields. The Edit Sections page
255
+ # allows for an arbitrary number of these fields to exist.
256
+ # If you are going to test the editing of multiple sections
257
+ # and/or meetings, then their elements will have to be
258
+ # explicitly called or defined in the test scripts themselves.
259
+ element(:name) { |b| b.frm.text_field(:id=>"editSectionsForm:sectionTable:0:titleInput") }
260
+ element(:unlimited_size) { |b| b.frm.select_list(:name=>"editSectionsForm:sectionTable:0:limit") }
261
+ element(:limited_size) { |b| b.frm.select_list(:name=>"editSectionsForm:sectionTable:0:limit") }
262
+ element(:max_enrollment) { |b| b.frm.text_field(:id=>"editSectionsForm:sectionTable:0:maxEnrollmentInput") }
263
+ element(:monday) { |b| b.checkbox(id=>"editSectionsForm:sectionTable:0:meetingsTable:0:monday") }
264
+ element(:tuesday) { |b| b.checkbox(id=>"editSectionsForm:sectionTable:0:meetingsTable:0:tuesday") }
265
+ element(:wednesday) { |b| b.checkbox(id=>"editSectionsForm:sectionTable:0:meetingsTable:0:wednesday") }
266
+ element(:thursday) { |b| b.checkbox(id=>"editSectionsForm:sectionTable:0:meetingsTable:0:thursday") }
267
+ element(:friday) { |b| b.checkbox(id=>"editSectionsForm:sectionTable:0:meetingsTable:0:friday") }
268
+ element(:saturday) { |b| b.checkbox(id=>"editSectionsForm:sectionTable:0:meetingsTable:0:saturday") }
269
+ element(:sunday) { |b| b.checkbox(id=>"editSectionsForm:sectionTable:0:meetingsTable:0:sunday") }
270
+ element(:start_time) { |b| b.frm.text_field(:id=>"editSectionsForm:sectionTable:0:meetingsTable:0:startTime") }
271
+ element(:start_am) { |b| b.frm.select_list(:name=>"editSectionsForm:sectionTable:0:meetingsTable:0:startTimeAm") }
272
+ element(:start_pm) { |b| b.frm.select_list(:name=>"editSectionsForm:sectionTable:0:meetingsTable:0:startTimeAm") }
273
+ element(:end_time) { |b| b.frm.text_field(:id=>"editSectionsForm:sectionTable:0:meetingsTable:0:endTime") }
274
+ element(:end_am) { |b| b.frm.select_list(:name=>"editSectionsForm:sectionTable:0:meetingsTable:0:endTimeAm") }
275
+ element(:end_pm) { |b| b.frm.select_list(:name=>"editSectionsForm:sectionTable:0:meetingsTable:0:endTimeAm") }
276
+ element(:location) { |b| b.frm.text_field(:id=>"editSectionsForm:sectionTable:0:meetingsTable:0:location") }
277
+ action(:add_days) { |b| b.frm.link(:id=>"editSectionsForm:sectionTable:0:addMeeting").click }
278
+
279
+ end
280
+
281
+ # The Sections page
282
+ # found in the SITE MANAGEMENT menu for a Site
283
+ class SectionsOverview < SectionsBase
284
+
285
+ menu_elements
286
+
287
+ action(:sort_name) { |b| b.frm.link(id=>"overviewForm:sectionsTable:_idJsp54").click }
288
+ action(:sort_ta) { |b| b.frm.link(id=>"overviewForm:sectionsTable:_idJsp73").click }
289
+ action(:sort_day) { |b| b.frm.link(id=>"overviewForm:sectionsTable:_idJsp78").click }
290
+ action(:sort_time) { |b| b.frm.link(id=>"overviewForm:sectionsTable:_idJsp83").click }
291
+ action(:sort_location) { |b| b.frm.link(id=>"overviewForm:sectionsTable:_idJsp88").click }
292
+ action(:sort_current_size) { |b| b.frm.link(id=>"overviewForm:sectionsTable:_idJsp93").click }
293
+ action(:sort_avail) { |b| b.frm.link(id=>"overviewForm:sectionsTable:_idJsp97").click }
294
+
295
+ end
@@ -0,0 +1 @@
1
+ # This needs some work. :-)
@@ -0,0 +1,686 @@
1
+ #================
2
+ # Site Setup/Site Editor Pages
3
+ #================
4
+
5
+ # This module contains the methods referring to the menu items
6
+ # across the top of all the Site Editor pages.
7
+ class SiteSetupBase < BasePage
8
+
9
+ frame_element
10
+ basic_page_elements
11
+
12
+ class << self
13
+ def menu_elements
14
+ # Clicks the Edit Tools link, then
15
+ # instantiates the EditSiteTools class.
16
+ action(:edit_tools) {|b| b.frm.link(:text=>"Edit Tools").click }
17
+
18
+ # Clicks the Manage Groups link and
19
+ # instantiates the Groups Class.
20
+ action(:manage_groups) {|b| b.frm.link(:text=>"Manage Groups").click }
21
+
22
+ # Clicks the Duplicate Site link and instantiates
23
+ # the DuplicateSite class.
24
+ action(:duplicate_site) {|b| b.frm.link(:text=>"Duplicate Site").click }
25
+
26
+ action(:add_participants) {|b| b.frm.link(:text=>"Add Participants").click }
27
+
28
+ end
29
+ end
30
+ end
31
+
32
+ # The Site Setup page - a.k.a., link class=>"icon-sakai-sitesetup"
33
+ class SiteSetup < SiteSetupBase
34
+
35
+ menu_elements
36
+
37
+ expected_element :search_field
38
+
39
+ element(:search_field) { |b| b.frm.text_field(:id, "search") }
40
+
41
+ # Clicks the "New" link on the Site Setup page.
42
+ # instantiates the SiteType class.
43
+ def new
44
+ frm.div(:class=>"portletBody").link(:text=>"New").click
45
+ SiteType.new(@browser)
46
+ end
47
+
48
+ # Searches for the specified site, then
49
+ # selects the specified Site's checkbox.
50
+ # Then clicks the Edit button and instantiates
51
+ # The SiteSetupEdit class.
52
+ def edit(site_name)
53
+ search_field.value=Regexp.escape(site_name)
54
+ frm.button(:value=>"Search").click
55
+ frm.div(:class=>"portletBody").checkbox(:name=>"selectedMembers").set
56
+ frm.div(:class=>"portletBody").link(:text, "Edit").click
57
+ SiteEditor.new(@browser)
58
+ end
59
+
60
+ # Enters the specified site name string in the search
61
+ # field, clicks the Search button, then reinstantiates
62
+ # the Class due to the page refresh.
63
+ def search(site_name)
64
+ search_field.set site_name
65
+ frm.button(:value, "Search").click
66
+ SiteSetup.new(@browser)
67
+ end
68
+
69
+ # Searches for the specified site, then
70
+ # checks the site, clicks the delete button,
71
+ # and instantiates the DeleteSite class.
72
+ def delete(site_name)
73
+ search_field.value=site_name
74
+ frm.button(:value=>"Search").click
75
+ frm.checkbox(:name=>"selectedMembers").set
76
+ frm.div(:class=>"portletBody").link(:text, "Delete").click
77
+ DeleteSite.new(@browser)
78
+ end
79
+
80
+ # Returns an Array object containing strings of
81
+ # all Site titles displayed on the web page.
82
+ def site_titles
83
+ titles = []
84
+ sites_table = frm.table(:id=>"siteList")
85
+ 1.upto(sites_table.rows.size-1) do |x|
86
+ titles << sites_table[x][1].text
87
+ end
88
+ return titles
89
+ end
90
+
91
+ element(:view) { |b| b.frm.select_list(:id=>"view").click }
92
+ action(:clear_search) { |b| b.frm.button(:value=>"Clear Search").click }
93
+ element(:select_page_size) { |b| b.frm.select_list(:id=>"selectPageSize").click }
94
+ action(:sort_by_title) { |b| b.frm.link(:text=>"Worksite Title").click }
95
+ action(:sort_by_type) { |b| b.frm.link(:text=>"Type").click }
96
+ action(:sort_by_creator) { |b| b.frm.link(:text=>"Creator").click }
97
+ action(:sort_by_status) { |b| b.frm.link(:text=>"Status").click }
98
+ action(:sort_by_creation_date) { |b| b.frm.link(:text=>"Creation Date").click }
99
+
100
+ end
101
+
102
+
103
+ # The topmost "Site Editor" page,
104
+ # found in SITE MANAGEMENT
105
+ # or else Site Setup after you have
106
+ # selected to Edit a particular site.
107
+ class SiteEditor < SiteSetupBase
108
+
109
+ menu_elements
110
+
111
+ # Sets the specified role for the specified participant.
112
+ #
113
+ # Because the participant is selected using a regular expression,
114
+ # the "participant" string can be anything that will suffice as a
115
+ # unique match--i.e., last name, first name, or user id, or any combination,
116
+ # as long as it will match a part of the string that appears in the
117
+ # desired row.
118
+ def set_role(participant, role)
119
+ frm.table(:class=>/listHier lines/).row(:text=>/#{Regexp.escape(participant)}/).select(:id=>/role/).select(role)
120
+ end
121
+
122
+ def update_participants
123
+ frm.button(:value=>"Update Participants").click
124
+ SiteEditor.new(@browser)
125
+ end
126
+
127
+ def return_button
128
+ frm.button(:name=>"back")
129
+ end
130
+
131
+ def return_to_sites_list
132
+ return_button.click
133
+ end
134
+
135
+ action(:previous) { |b| b.frm.button(:name=>"previous").click }
136
+ action(:printable_version) { |b| b.frm.link(:text=>"Printable Version").click }
137
+
138
+ end
139
+
140
+
141
+ # Groups page inside the Site Editor
142
+ class Groups < SiteSetupBase
143
+
144
+ menu_elements
145
+
146
+ # Clicks the Create New Group link and
147
+ # instantiates the CreateNewGroup Class.
148
+ def create_new_group
149
+ create_new_group_link_element.wait_until_present
150
+ create_new_group_link
151
+ CreateNewGroup.new(@browser)
152
+ end
153
+
154
+ action(:create_new_group_link) { |b| b.frm.link(:text=>"Create New Group").click }
155
+ action(:auto_groups) { |b| b.frm.link(:text=>"Auto Groups").click }
156
+ action(:remove_checked) { |b| b.frm.button(:id=>"delete-groups").click }
157
+ action(:cancel) { |b| b.frm.button(:id=>"cancel").click }
158
+
159
+ end
160
+
161
+ # The Create New Group page inside the Site Editor
162
+ class CreateNewGroup < SiteSetupBase
163
+
164
+ menu_elements
165
+
166
+ # Clicks the Add button and instantiates the Groups Class.
167
+ def add
168
+ frm.button(:id=>"save").click
169
+ Groups.new(@browser)
170
+ end
171
+
172
+ element(:title) { |b| b.frm.text_field(:id=>"group_title") }
173
+ element(:description) { |b| b.frm.text_field(:id=>"group_description") }
174
+ element(:site_member_list) { |b| b.frm.select_list(:name=>"siteMembers-selection").click }
175
+ element(:group_member_list) { |b| b.frm.select_list(:name=>"groupMembers-selection").click }
176
+ action(:right) { |b| b.frm.button(:name=>"right", :index=>0,).click }
177
+ action(:left) { |b| b.frm.button(:name=>"left", :index=>0).click }
178
+ action(:all_right) { |b| b.frm.button(:name=>"right", :index=>1).click }
179
+ action(:all_left) { |b| b.frm.button(:name=>"left",:index=>1).click }
180
+ action(:cancel) { |b| b.frm.button(:id=>"cancel").click }
181
+
182
+ end
183
+
184
+ # The first page of the Duplicate Site pages in the Site Editor.
185
+ class DuplicateSite < SiteSetupBase
186
+
187
+ menu_elements
188
+
189
+ def duplicate
190
+ frm.button(:value=>"Duplicate").click
191
+ frm.span(:class=>"submitnotif").wait_while_present(300)
192
+ SiteEditor.new(@browser)
193
+ end
194
+
195
+ # Returns the site name in the header, for verification.
196
+ def site_name
197
+ frm.div(:class=>"portletBody").h3.span(:class=>"highlight").text
198
+ end
199
+
200
+ element(:site_title) { |b| b.frm.text_field(:id=>"title") }
201
+ element(:academic_term) { |b| b.frm.select_list(:id=>"selectTerm").click }
202
+ end
203
+
204
+ # Page for Adding Participants to a Site in Site Setup
205
+ class SiteSetupAddParticipants < SiteSetupBase
206
+
207
+ menu_elements
208
+
209
+ def continue
210
+ frm.button(:value=>"Continue").click
211
+ SiteSetupChooseRole.new @browser
212
+ end
213
+
214
+ element(:official_participants) { |b| b.frm.text_area(:id=>"content::officialAccountParticipant") }
215
+ element(:non_official_participants) { |b| b.frm.text_area(:id=>"content::nonOfficialAccountParticipant") }
216
+ element(:assign_all_to_same_role) { |b| b.frm.radio(:id=>"content::role-row:0:role-select") }
217
+ element(:assign_each_individually) { |b| b.frm.radio(:id=>"content::role-row:1:role-select") }
218
+ element(:active_status) { |b| b.frm.radio(:id=>"content::status-row:0:status-select") }
219
+ element(:inactive_status) { |b| b.frm.radio(:id=>"content::status-row:1:status-select") }
220
+ action(:cancel) { |b| b.frm.button(:id=>"content::cancel").click }
221
+
222
+ end
223
+
224
+
225
+ # Page for selecting Participant roles individually
226
+ class SiteSetupChooseRolesIndiv < SiteSetupBase
227
+
228
+ menu_elements
229
+
230
+ def continue
231
+ frm.button(:value=>"Continue").click
232
+ #SiteSetupParticipantEmail.new(@browser)
233
+ end
234
+
235
+ action(:back) { |b| b.frm.button(:name=>"command link parameters&Submitting%20control=content%3A%3Aback&Fast%20track%20action=siteAddParticipantHandler.processDifferentRoleBack").click }
236
+ action(:cancel) { |b| b.frm.button(:name=>"command link parameters&Submitting%20control=content%3A%3Acancel&Fast%20track%20action=siteAddParticipantHandler.processCancel").click }
237
+ element(:user_role) { |b| b.frm.select_list(:id=>"content::user-row:0:role-select-selection").click }
238
+
239
+ end
240
+
241
+
242
+ # Page for selecting the same role for All. This class is used for
243
+ # both Course and Portfolio sites.
244
+ class SiteSetupChooseRole < BasePage
245
+
246
+ frame_element
247
+
248
+ def continue
249
+ frm.button(:value=>"Continue").click
250
+ SiteSetupParticipantEmail.new(@browser)
251
+ end
252
+
253
+ action(:back) { |b| b.frm.button(:name=>"command link parameters&Submitting%20control=content%3A%3Aback&Fast%20track%20action=siteAddParticipantHandler.processSameRoleBack").click }
254
+ action(:cancel) { |b| b.frm.button(:name=>"command link parameters&Submitting%20control=content%3A%3Acancel&Fast%20track%20action=siteAddParticipantHandler.processCancel").click }
255
+ element(:guest) { |b| b.frm.radio(:value=>"Guest") }
256
+ element(:instructor) { |b| b.frm.radio(:value=>"Instructor") }
257
+ element(:student) { |b| b.frm.radio(:value=>"Student") }
258
+ element(:evaluator) { |b| b.frm.radio(:value=>"Evaluator") }
259
+ element(:organizer) { |b| b.frm.radio(:value=>"Organizer") }
260
+ element(:participant) { |b| b.frm.radio(:value=>"Participant") }
261
+ element(:reviewer) { |b| b.frm.radio(:value=>"Reviewer") }
262
+ element(:teaching_assistant) { |b| b.frm.radio(:id=>"content::role-row:3:role-select") }
263
+
264
+ end
265
+
266
+
267
+ # Page for specifying whether to send an email
268
+ # notification to the newly added Site participants
269
+ class SiteSetupParticipantEmail < SiteSetupBase
270
+
271
+ menu_elements
272
+
273
+ def continue
274
+ frm.button(:value=>"Continue").click
275
+ SiteSetupParticipantConfirmation.new(@browser)
276
+ end
277
+
278
+ action(:back) { |b| b.frm.button(:name=>"command link parameters&Submitting%20control=content%3A%3Acontinue&Fast%20track%20action=siteAddParticipantHandler.processEmailNotiBack").click }
279
+ action(:cancel) { |b| b.frm.button(:name=>"command link parameters&Submitting%20control=content%3A%3Acontinue&Fast%20track%20action=siteAddParticipantHandler.processEmailNotiCancel").click }
280
+ element(:send_now) { |b| b.frm.radio(:id=>"content::noti-row:0:noti-select") }
281
+ element(:dont_send) { |b| b.frm.radio(:id=>"content::noti-row:1:noti-select") }
282
+
283
+ end
284
+
285
+
286
+ # The confirmation page showing site participants and their set roles
287
+ class SiteSetupParticipantConfirm < SiteSetupBase
288
+
289
+ menu_elements
290
+
291
+ def finish
292
+ frm.button(:value=>"Finish").click
293
+ SiteEditor.new(@browser)
294
+ end
295
+
296
+ # Returns the value of the id field for the specified name.
297
+ def id(name)
298
+ frm.table(:class=>"listHier").row(:text=>/#{Regexp.escape(name)}/)[1].text
299
+ end
300
+
301
+ # Returns the value of the Role field for the specified name.
302
+ def role(name)
303
+ frm.table(:class=>"listHier").row(:text=>/#{Regexp.escape(name)}/)[2].text
304
+ end
305
+
306
+ action(:back) { |b| b.frm.button(:name=>"command link parameters&Submitting%20control=content%3A%3Aback&Fast%20track%20action=siteAddParticipantHandler.processConfirmBack").click }
307
+ action(:cancel) { |b| b.frm.button(:name=>"command link parameters&Submitting%20control=content%3A%3Aback&Fast%20track%20action=siteAddParticipantHandler.processConfirmCancel").click }
308
+
309
+ end
310
+
311
+ # The Edit Tools page (click on "Edit Tools" when editing a site
312
+ # in Site Setup in the Admin Workspace)
313
+ class EditSiteTools < SiteSetupBase
314
+
315
+ menu_elements
316
+
317
+ expected_element :all_tools
318
+
319
+ # Clicks the Continue button.
320
+ action(:continue) { |b| b.frm.button(:value=>"Continue").click }
321
+
322
+ # This is a comprehensive list of all checkboxes and
323
+ # radio buttons for this page,
324
+ # though not all will appear at one time.
325
+ # The list will depend on the type of site being
326
+ # created/edited.
327
+ element(:all_tools) { |b| b.frm.checkbox(:id=>"all") }
328
+ element(:home) { |b| b.frm.checkbox(:id=>"home") }
329
+ element(:announcements) { |b| b.frm.checkbox(:id=>"sakai.announcements") }
330
+ element(:assignments,) { |b| b.frm.checkbox(:id=>"sakai.assignment.grades") }
331
+ element(:basic_lti) { |b| b.frm.checkbox(:id=>"sakai.basiclti") }
332
+ element(:calendar) { |b| b.frm.checkbox(:id=>"sakai.schedule") }
333
+ element(:email_archive) { |b| b.frm.checkbox(:id=>"sakai.mailbox") }
334
+ element(:evaluations) { |b| b.frm.checkbox(:id=>"osp.evaluation") }
335
+ element(:forms) { |b| b.frm.checkbox(:id=>"sakai.metaobj") }
336
+ element(:glossary) { |b| b.frm.checkbox(:id=>"osp.glossary") }
337
+ element(:matrices) { |b| b.frm.checkbox(:id=>"osp.matrix") }
338
+ element(:news) { |b| b.frm.checkbox(:id=>"sakai.news") }
339
+ element(:portfolio_layouts) { |b| b.frm.checkbox(:id=>"osp.presLayout") }
340
+ element(:portfolio_showcase) { |b| b.frm.checkbox(:id=>"sakai.rsn.osp.iframe") }
341
+ element(:portfolio_templates) { |b| b.frm.checkbox(:id=>"osp.presTemplate") }
342
+ element(:portfolios) { |b| b.frm.checkbox(:id=>"osp.presentation") }
343
+ element(:resources) { |b| b.frm.checkbox(:id=>"sakai.resources") }
344
+ element(:roster) { |b| b.frm.checkbox(:id=>"sakai.site.roster") }
345
+ element(:search) { |b| b.frm.checkbox(:id=>"sakai.search") }
346
+ element(:styles) { |b| b.frm.checkbox(:id=>"osp.style") }
347
+ element(:web_content) { |b| b.frm.checkbox(:id=>"sakai.iframe") }
348
+ element(:wizards) { |b| b.frm.checkbox(:id=>"osp.wizard") }
349
+ element(:blogger) { |b| b.frm.checkbox(:id=>"blogger") }
350
+ element(:blogs) { |b| b.frm.checkbox(:id=>"sakai.blogwow") }
351
+ element(:chat_room) { |b| b.frm.checkbox(:id=>"sakai.chat") }
352
+ element(:discussion_forums) { |b| b.frm.checkbox(:id=>"sakai.jforum.tool") }
353
+ element(:drop_box) { |b| b.frm.checkbox(:id=>"sakai.dropbox") }
354
+ element(:email) { |b| b.frm.checkbox(:id=>"sakai.mailtool") }
355
+ element(:forums) { |b| b.frm.checkbox(:id=>"sakai.forums") }
356
+ element(:certification) { |b| b.frm.checkbox(:id=>"com.rsmart.certification") }
357
+ element(:feedback) { |b| b.frm.checkbox(:id=>"sakai.postem") }
358
+ element(:gradebook) { |b| b.frm.checkbox(:id=>"sakai.gradebook.tool") }
359
+ element(:gradebook2) { |b| b.frm.checkbox(:id=>"sakai.gradebook.gwt.rpc") }
360
+ element(:lesson_builder) { |b| b.frm.checkbox(:id=>"sakai.lessonbuildertool") }
361
+ element(:lessons) { |b| b.frm.checkbox(:id=>"sakai.melete") }
362
+ element(:live_virtual_classroom) { |b| b.frm.checkbox(:id=>"rsmart.virtual_classroom.tool") }
363
+ element(:media_gallery) { |b| b.frm.checkbox(:id=>"sakai.kaltura") }
364
+ element(:messages) { |b| b.frm.checkbox(:id=>"sakai.messages") }
365
+ element(:opensyllabus) { |b| b.frm.checkbox(:id=>"sakai.opensyllabus.tool") }
366
+ element(:podcasts) { |b| b.frm.checkbox(:id=>"sakai.podcasts") }
367
+ element(:polls) { |b| b.frm.checkbox(:id=>"sakai.poll") }
368
+ element(:sections) { |b| b.frm.checkbox(:id=>"sakai.sections") }
369
+ element(:site_editor) { |b| b.frm.checkbox(:id=>"sakai.siteinfo") }
370
+ element(:site_statistics) { |b| b.frm.checkbox(:id=>"sakai.sitestats") }
371
+ element(:syllabus) { |b| b.frm.checkbox(:id=>"sakai.syllabus") }
372
+ element(:tests_and_quizzes_cb) { |b| b.frm.checkbox(:id=>"sakai.samigo") }
373
+ element(:wiki) { |b| b.frm.checkbox(:id=>"sakai.rwiki") }
374
+ element(:no_thanks) { |b| b.frm.radio(:id=>"import_no") }
375
+ element(:yes) { |b| b.frm.radio(:id=>"import_yes") }
376
+ element(:import_sites) { |b| b.frm.select(:id=>"importSites") }
377
+ action(:back) { |b| b.frm.button(:name=>"Back").click }
378
+ action(:cancel) { |b| b.frm.button(:name=>"Cancel").click }
379
+
380
+ end
381
+
382
+ class ReUseMaterial < SiteSetupBase
383
+
384
+ menu_elements
385
+
386
+ thing(:announcements_checkbox) { |b| b.frm.checkbox(name: "sakai.announcements") }
387
+ thing(:calendar_checkbox) { |b| b.frm.checkbox(name: "sakai.schedule") }
388
+ thing(:discussion_forums_checkbox) { |b| b.frm.checkbox(name: "sakai.jforum.tool") }
389
+ thing(:forums_checkbox) { |b| b.frm.checkbox(name: "sakai.forums") }
390
+ thing(:chat_room_checkbox) { |b| b.frm.checkbox(name: "sakai.chat") }
391
+ thing(:polls_checkbox) { |b| b.frm.checkbox(name: "sakai.poll") }
392
+ thing(:syllabus_checkbox) { |b| b.frm.checkbox(name: "sakai.syllabus") }
393
+ thing(:lessons_checkbox) { |b| b.frm.checkbox(name: "sakai.melete") }
394
+ thing(:resources_checkbox) { |b| b.frm.checkbox(name: "sakai.resources") }
395
+ thing(:assignments_checkbox) { |b| b.frm.checkbox(name: "sakai.assignment.grades") }
396
+ thing(:tests_and_quizzes_checkbox) { |b| b.frm.checkbox(name: "sakai.samigo") }
397
+ thing(:gradebook_checkbox) { |b| b.frm.checkbox(name: "sakai.gradebook.tool") }
398
+ thing(:gradebook2_checkbox) { |b| b.frm.checkbox(name: "sakai.gradebook.gwt.rpc") }
399
+ thing(:wiki_checkbox) { |b| b.frm.checkbox(name: "sakai.rwiki") }
400
+ thing(:news_checkbox) { |b| b.frm.checkbox(name: "sakai.news") }
401
+ thing(:web_content_checkbox) { |b| b.frm.checkbox(name: "sakai.iframe") }
402
+ thing(:site_statistics_checkbox) { |b| b.frm.checkbox(name: "sakai.sitestats") }
403
+ action(:continue) { |b| b.frm.button(name: "eventSubmit_doContinue").click }
404
+
405
+ end
406
+
407
+ # Confirmation page when editing site tools in Site Setup
408
+ class ConfirmSiteToolsEdits < SiteSetupBase
409
+
410
+ menu_elements
411
+
412
+ expected_element :finish_button
413
+
414
+ element(:finish_button) { |b| b.frm.button(value: "Finish") }
415
+
416
+ # Clicks the Finish button, next is
417
+ # the SiteSetupEdit class.
418
+ action(:finish) { |b| b.finish_button.click }
419
+
420
+ end
421
+
422
+
423
+ # The Delete Confirmation Page for deleting a Site
424
+ class DeleteSite < SiteSetupBase
425
+
426
+ menu_elements
427
+
428
+ # Clicks the Remove button, then instantiates
429
+ # the SiteSetup class.
430
+ def remove
431
+ frm.button(:value=>"Remove").click
432
+ SiteSetup.new(@browser)
433
+ end
434
+
435
+ # Clicks the Cancel button, then instantiates
436
+ # the SiteSetup class.
437
+ def cancel
438
+ frm.button(:value=>"Cancel").click
439
+ SiteSetup.new(@browser)
440
+ end
441
+
442
+ end
443
+
444
+ #The Site Type page that appears when creating a new site
445
+ class SiteType < SiteSetupBase
446
+
447
+ menu_elements
448
+
449
+ def continue #FIXME
450
+ if frm.button(:id, "submitBuildOwn").enabled?
451
+ frm.button(:id, "submitBuildOwn").click
452
+ elsif frm.button(:id, "submitFromTemplateCourse").enabled?
453
+ frm.button(:id, "submitFromTemplateCourse").click
454
+ elsif frm.button(:id, "submitFromTemplate").enabled?
455
+ frm.button(:id, "submitFromTemplate").click
456
+ end
457
+
458
+ end
459
+
460
+ element(:course_site) { |b| b.frm.radio(:id=>"course") }
461
+ element(:project_site) { |b| b.frm.radio(:id=>"project") }
462
+ element(:portfolio_site) { |b| b.frm.radio(:id=>"portfolio") }
463
+ element(:create_site_from_template) { |b| b.frm.radio(:id=>"copy") }
464
+ element(:academic_term) { |b| b.frm.select_list(:id=>"selectTerm") }
465
+ element(:select_template) { |b| b.frm.select_list(:id=>"templateSiteId").click }
466
+ element(:select_term) { |b| b.frm.select_list(:id=>"selectTermTemplate").click }
467
+ action(:cancel) { |b| b.frm.button(:id=>"cancelCreate").click }
468
+ element(:copy_users) { |b| b.frm.checkbox(:id=>"copyUsers") }
469
+ element(:copy_content) { |b| b.frm.checkbox(:id=>"copyContent") }
470
+ end
471
+
472
+
473
+ # The Add Multiple Tool Instances page that appears during Site creation
474
+ # after the Course Site Tools page
475
+ class AddMultipleTools < SiteSetupBase
476
+
477
+ menu_elements
478
+
479
+ # Clicks the Continue button.
480
+ action(:continue) { |b| b.frm.button(:value=>"Continue").click }
481
+
482
+ # Note that the text field definitions included here
483
+ # for the Tools definitions are ONLY for the first
484
+ # instances of each. Since the UI allows for
485
+ # an arbitrary number, if you are writing tests
486
+ # that add more then you're going to have to explicitly
487
+ # reference them or define them in the test case script
488
+ # itself--for now, anyway.
489
+ element(:site_email_address) { |b| b.frm.text_field(:id=>"emailId") }
490
+ element(:basic_lti_title) { |b| b.frm.text_field(:id=>"title_sakai.basiclti") }
491
+ element(:more_basic_lti_tools) { |b| b.frm.select_list(:id=>"num_sakai.basiclti").click }
492
+ element(:lesson_builder_title) { |b| b.frm.text_field(:id=>"title_sakai.lessonbuildertool") }
493
+ element(:more_lesson_builder_tools) { |b| b.frm.select_list(:id=>"num_sakai.lessonbuildertool").click }
494
+ element(:news_title) { |b| b.frm.text_field(:id=>"title_sakai.news") }
495
+ element(:news_url_channel) { |b| b.frm.text_field(:name=>"channel-url_sakai.news") }
496
+ element(:more_news_tools) { |b| b.frm.select_list(:id=>"num_sakai.news").click }
497
+ element(:web_content_title) { |b| b.frm.text_field(:id=>"title_sakai.iframe") }
498
+ element(:web_content_source) { |b| b.frm.text_field(:id=>"source_sakai.iframe") }
499
+ element(:more_web_content_tools) { |b| b.frm.select_list(:id=>"num_sakai.iframe").click }
500
+ action(:back) { |b| b.frm.button(:name=>"Back").click }
501
+ action(:cancel) { |b| b.frm.button(:name=>"Cancel").click }
502
+
503
+ end
504
+
505
+
506
+ # The Course/Section Information page that appears when creating a new Site
507
+ class CourseSectionInfo < SiteSetupBase
508
+
509
+ menu_elements
510
+
511
+ # Clicks the Continue button, then instantiates
512
+ # the CourseSiteInfo Class.
513
+ def continue
514
+ frm.button(:value=>"Continue").click
515
+ CourseSiteInfo.new(@browser)
516
+ end
517
+
518
+ # Clicks the Done button (or the
519
+ # "Done - go to Site" button if it
520
+ # happens to be there), then instantiates
521
+ # the SiteSetup Class.
522
+ def done
523
+ frm.button(:value=>/Done/).click
524
+ SiteSetup.new(@browser)
525
+ end
526
+
527
+ # Note that ONLY THE FIRST instances of the
528
+ # subject, course, and section fields
529
+ # are included in the page elements definitions here,
530
+ # because their identifiers are dependent on how
531
+ # many instances exist on the page.
532
+ # This means that if you need to access the second
533
+ # or subsequent of these elements, you'll need to
534
+ # explicitly identify/define them in the test case
535
+ # itself.
536
+ element(:subject) { |b| b.frm.text_field(:name=>/Subject:/) }
537
+ element(:course) { |b| b.frm.text_field(:name=>/Course:/) }
538
+ element(:section) { |b| b.frm.text_field(:name=>/Section:/) }
539
+ element(:authorizers_username) { |b| b.frm.text_field(:id=>"uniqname") }
540
+ element(:special_instructions) { |b| b.frm.text_field(:id=>"additional") }
541
+ element(:add_more_rosters) { |b| b.frm.select_list(:id=>"number").click }
542
+ action(:back,) { |b| b.frm.button(:name=>"Back").click }
543
+ action(:cancel) { |b| b.frm.button(:name=>"Cancel").click }
544
+ end
545
+
546
+
547
+ # The Site Access Page that appears during Site creation
548
+ # immediately following the Add Multiple Tools Options page.
549
+ class SiteAccess < SiteSetupBase
550
+
551
+ menu_elements
552
+
553
+ # The page element that displays the joiner role
554
+ # select list. Use this method to validate whether the
555
+ # select list is visible or not.
556
+ #
557
+ # Example: page.joiner_role_div.visible?
558
+ def joiner_role_div
559
+ frm.div(:id=>"joinerrole")
560
+ end
561
+
562
+ # Clicks the Continue button, then
563
+ # instantiates the ConfirmCourseSiteSetup class.
564
+ def continue
565
+ frm.button(:value=>"Continue").click
566
+ ConfirmSiteSetup.new(@browser)
567
+ end
568
+
569
+ element(:publish_site) { |b| b.frm.radio(:id=>"publish") }
570
+ element(:leave_as_draft) { |b| b.frm.radio(:id=>"unpublish") }
571
+ element(:limited) { |b| b.frm.radio(:id=>"unjoinable") }
572
+ element(:allow) { |b| b.frm.radio(:id=>"joinable") }
573
+ action(:back) { |b| b.frm.button(:name=>"eventSubmit_doBack").click }
574
+ action(:cancel) { |b| b.frm.button(:name=>"eventSubmit_doCancel_create").click }
575
+ element(:joiner_role) { |b| b.frm.select_list(:id=>"joinerRole") }
576
+
577
+ end
578
+
579
+
580
+ # The Confirmation page at the end of a Course Site Setup
581
+ class ConfirmSiteSetup < BasePage
582
+
583
+ frame_element
584
+
585
+ # Clicks the Request Site button, then
586
+ # instantiates the SiteSetup Class.
587
+ def request_site
588
+ frm.button(:value=>"Request Site").click
589
+ SiteSetup.new(@browser)
590
+ end
591
+
592
+ # For portfolio sites...
593
+ # Clicks the "Create Site" button and
594
+ # instantiates the SiteSetup class.
595
+ def create_site
596
+ frm.button(:value=>"Create Site").click
597
+ SiteSetup.new(@browser)
598
+ end
599
+
600
+ end
601
+
602
+ # The Course Site Information page that appears when creating a new Site
603
+ # immediately after the Course/Section Information page
604
+ class CourseSiteInfo < BasePage
605
+
606
+ frame_element
607
+ basic_page_elements
608
+ include FCKEditor
609
+
610
+ expected_element :editor
611
+
612
+ element(:editor) { |b| b.frm.frame(:id=>"description___Frame") }
613
+
614
+ def description=(text)
615
+ editor.td(:id, "xEditingArea").frame(:index=>0).send_keys text
616
+ end
617
+
618
+ # Clicks the Continue button, next is the
619
+ # EditSiteTools Class.
620
+ def continue
621
+ frm.button(:value=>"Continue").click
622
+ EditSiteTools.new(@browser)
623
+ end
624
+
625
+ element(:short_description) { |b| b.frm.text_field(:id=>"short_description") }
626
+ element(:special_instructions) { |b| b.frm.text_field(:id=>"additional") }
627
+ element(:site_contact_name) { |b| b.frm.text_field(:id=>"siteContactName") }
628
+ element(:site_contact_email) { |b| b.frm.text_field(:id=>"siteContactEmail") }
629
+ action(:back) { |b| b.frm.button(:name=>"Back").click }
630
+ action(:cancel) { |b| b.frm.button(:name=>"Cancel").click }
631
+
632
+ end
633
+
634
+
635
+ #
636
+ class PortfolioSiteInfo < BasePage
637
+
638
+ frame_element
639
+
640
+ def description=(text)
641
+ frm.frame(:id, "description___Frame").td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
642
+ end
643
+
644
+ def continue
645
+ frm.button(:value=>"Continue").click
646
+ PortfolioSiteTools.new(@browser)
647
+ end
648
+
649
+ element(:title) { |b| b.frm.text_field(:id=>"title") }
650
+ element(:url_alias) { |b| b.frm.text_field(:id=>"alias_0") }
651
+ element(:short_description) { |b| b.frm.text_area(:id=>"short_description") }
652
+ element(:icon_url) { |b| b.frm.text_field(:id=>"iconUrl") }
653
+ element(:site_contact_name) { |b| b.frm.text_field(:id=>"siteContactName") }
654
+ element(:site_contact_email) { |b| b.frm.text_field(:id=>"siteContactEmail") }
655
+
656
+ end
657
+
658
+ #
659
+ class PortfolioSiteTools < BasePage
660
+
661
+ frame_element
662
+
663
+ def continue
664
+ frm.button(:value=>"Continue").click
665
+ PortfolioConfigureToolOptions.new(@browser)
666
+ end
667
+
668
+ element(:all_tools) { |b| b.frm.checkbox(:id=>"all") }
669
+
670
+ end
671
+
672
+ #
673
+ class PortfolioConfigureToolOptions < BasePage
674
+
675
+ frame_element
676
+
677
+ def continue
678
+ frm.button(:value=>"Continue").click
679
+ SiteAccess.new(@browser)
680
+ end
681
+
682
+ element(:email) { |b| b.frm.text_field(:id=>"emailId") }
683
+
684
+ end
685
+
686
+