sambal-cle 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. data/README.md +3 -1
  2. data/lib/sambal-cle/base_page.rb +3 -1
  3. data/lib/sambal-cle/data_objects/announcement.rb +7 -10
  4. data/lib/sambal-cle/data_objects/assessment.rb +265 -9
  5. data/lib/sambal-cle/data_objects/assignment.rb +38 -32
  6. data/lib/sambal-cle/data_objects/assignment_permissions.rb +61 -0
  7. data/lib/sambal-cle/data_objects/assignment_submission.rb +126 -0
  8. data/lib/sambal-cle/data_objects/blog.rb +4 -7
  9. data/lib/sambal-cle/data_objects/blogger.rb +4 -10
  10. data/lib/sambal-cle/data_objects/chat_room.rb +5 -8
  11. data/lib/sambal-cle/data_objects/event.rb +6 -17
  12. data/lib/sambal-cle/data_objects/forum.rb +9 -19
  13. data/lib/sambal-cle/data_objects/lesson.rb +8 -29
  14. data/lib/sambal-cle/data_objects/message.rb +7 -10
  15. data/lib/sambal-cle/data_objects/poll.rb +6 -11
  16. data/lib/sambal-cle/data_objects/resource.rb +28 -37
  17. data/lib/sambal-cle/data_objects/site.rb +6 -17
  18. data/lib/sambal-cle/data_objects/syllabus.rb +6 -8
  19. data/lib/sambal-cle/data_objects/user.rb +88 -0
  20. data/lib/sambal-cle/data_objects/web_content_tool.rb +5 -6
  21. data/lib/sambal-cle/data_objects/wiki.rb +6 -6
  22. data/lib/sambal-cle/page_objects/account.rb +0 -2
  23. data/lib/sambal-cle/page_objects/announcements.rb +0 -1
  24. data/lib/sambal-cle/page_objects/assessments.rb +57 -87
  25. data/lib/sambal-cle/page_objects/assignments.rb +117 -337
  26. data/lib/sambal-cle/page_objects/calendar.rb +0 -2
  27. data/lib/sambal-cle/page_objects/login.rb +3 -9
  28. data/lib/sambal-cle/page_objects/sections.rb +2 -3
  29. data/lib/sambal-cle/page_objects/site_setup.rb +9 -19
  30. data/lib/sambal-cle/rich_text.rb +6 -0
  31. data/lib/sambal-cle/utilities.rb +4 -10
  32. data/lib/sambal-cle/workflows.rb +1 -5
  33. data/lib/sambal-cle.rb +2 -10
  34. data/sambal-cle.gemspec +7 -8
  35. data/test/add_assignment_to_calendar_spec.rb +14 -15
  36. data/test/assessment_create_spec.rb +355 -0
  37. data/test/assignment_announcements_spec.rb +14 -15
  38. data/test/assignment_duplicate_spec.rb +56 -0
  39. data/test/assignment_gradebook_spec.rb +16 -15
  40. data/test/assignment_permissions_spec.rb +77 -0
  41. data/test/assignments_grading_spec.rb +123 -0
  42. data/test/assignments_submission_spec.rb +143 -0
  43. data/test/config.yml +3 -0
  44. data/test/directory.yml +120 -0
  45. data/test/duplicate_site_spec.rb +5 -3
  46. data/test/import_site_content_spec.rb +248 -0
  47. metadata +22 -31
  48. data/lib/sambal-cle/core-ext.rb +0 -90
  49. data/lib/sambal-cle/date_makers.rb +0 -118
  50. data/lib/sambal-cle/gem_ext.rb +0 -23
  51. data/lib/sambal-cle/page_helper.rb +0 -22
  52. data/lib/sambal-cle/page_maker.rb +0 -48
  53. data/lib/sambal-cle/randomizers.rb +0 -117
@@ -35,7 +35,6 @@ class AssessmentsBase <BasePage
35
35
  element(:keywords) { |b| b.frm.text_field(:id=>/:keyfield/) }
36
36
  # QuestionPoolsList
37
37
  action(:save) { |b| b.frm.button(:id=>"questionpool:submit").click }
38
- action(:cancel) { |b| b.frm.button(:value=>"Cancel").click }
39
38
  end
40
39
  end
41
40
  end
@@ -56,7 +55,6 @@ class AssessmentsList < AssessmentsBase
56
55
  # then returns them as an Array.
57
56
  def pending_assessment_titles
58
57
  titles =[]
59
- pending_table = frm.table(:id=>"authorIndexForm:coreAssessments")
60
58
  1.upto(pending_table.rows.size-1) do |x|
61
59
  titles << pending_table[x][1].span(:id=>/assessmentTitle/).text
62
60
  end
@@ -67,7 +65,6 @@ class AssessmentsList < AssessmentsBase
67
65
  # then returns them as an Array.
68
66
  def published_assessment_titles
69
67
  titles =[]
70
- published_table = frm.div(:class=>"tier2", :index=>2).table(:class=>"listHier", :index=>0)
71
68
  1.upto(published_table.rows.size-1) do |x|
72
69
  titles << published_table[x][1].span(:id=>/publishedAssessmentTitle/).text
73
70
  end
@@ -78,7 +75,6 @@ class AssessmentsList < AssessmentsBase
78
75
  # in the list.
79
76
  def inactive_assessment_titles
80
77
  titles =[]
81
- inactive_table = frm.div(:class=>"tier2", :index=>2).table(:id=>"authorIndexForm:inactivePublishedAssessments")
82
78
  1.upto(inactive_table.rows.size-1) do |x|
83
79
  titles << inactive_table[x][1].span(:id=>/inactivePublishedAssessmentTitle/).text
84
80
  end
@@ -88,12 +84,16 @@ class AssessmentsList < AssessmentsBase
88
84
  # Opens the selected test for scoring
89
85
  # then instantiates the AssessmentTotalScores class.
90
86
  # @param test_title [String] the title of the test to be clicked.
91
- def score_test(test_title)
92
- frm.tbody(:id=>"authorIndexForm:_id88:tbody_element").row(:text=>/#{Regexp.escape(test_title)}/).link(:id=>/authorIndexToScore/).click
93
- AssessmentTotalScores.new(@browser)
94
- end
87
+ pgmd(:score_test) { |test_title, b| b.frm.tbody(:id=>"authorIndexForm:_id88:tbody_element").row(:text=>/#{Regexp.escape(test_title)}/).link(:id=>/authorIndexToScore/).click }
88
+
89
+ pgmd(:publish) { |test_title, b| b.pending_table.tr(:text=>/#{Regexp.escape(test_title)}/).select(:name=>/Select/).select "Publish" }
90
+
91
+ pgmd(:edit) { |test_title, b| b.form(:id=>"authorIndexForm").tr(:text=>/#{Regexp.escape(test_title)}/).select(:name=>/Select/).select "Edit" }
95
92
 
96
93
  element(:title) { |b| b.frm.text_field(:id=>"authorIndexForm:title") }
94
+ element(:pending_table) { |b| b.frm.table(:id=>"authorIndexForm:coreAssessments") }
95
+ element(:published_table) { |b| b.frm.div(:class=>"tier2", :index=>2).table(:class=>"listHier", :index=>0) }
96
+ element(:inactive_table) { |b| b.frm.div(:class=>"tier2", :index=>2).table(:id=>"authorIndexForm:inactivePublishedAssessments") }
97
97
  element(:create_using_builder) { |b| b.frm.radio(:name=>"authorIndexForm:_id29", :index=>0) }
98
98
  element(:create_using_text) { |b| b.frm.radio(:name=>"authorIndexForm:_id29") }
99
99
  element(:select_assessment_type) { |b| b.frm.select(:id=>"authorIndexForm:assessmentTemplate") }
@@ -108,31 +108,20 @@ class PreviewOverview < BasePage
108
108
  frame_element
109
109
 
110
110
  # Scrapes the value of the due date from the page. Returns it as a string.
111
- def due_date
112
- frm.div(:class=>"tier2").table(:index=>0)[0][0].text
113
- end
111
+ value(:due_date) { |b| b.frm.frm.div(:class=>"tier2").table(:index=>0)[0][0].text }
114
112
 
115
113
  # Scrapes the value of the time limit from the page. Returns it as a string.
116
- def time_limit
117
- frm.div(:class=>"tier2").table(:index=>0)[3][0].text
118
- end
114
+ value(:time_limit) { |b| b.frm.frm.div(:class=>"tier2").table(:index=>0)[3][0].text }
119
115
 
120
116
  # Scrapes the submission limit from the page. Returns it as a string.
121
- def submission_limit
122
- frm.div(:class=>"tier2").table(:index=>0)[6][0].text
123
- end
117
+ value(:submission_limit) { |b| b.frm.frm.div(:class=>"tier2").table(:index=>0)[6][0].text }
124
118
 
125
119
  # Scrapes the Feedback policy from the page. Returns it as a string.
126
- def feedback
127
- frm.div(:class=>"tier2").table(:index=>0)[9][0].text
128
- end
120
+ value(:feedback) { |b| b.frm.div(:class=>"tier2").table(:index=>0)[9][0].text }
129
121
 
130
122
  # Clicks the Done button, then instantiates
131
123
  # the EditAssessment class.
132
- def done
133
- frm.button(:name=>"takeAssessmentForm:_id5").click
134
- EditAssessment.new(@browser)
135
- end
124
+ action(:done) { |b| b.frm.button(:name=>"takeAssessmentForm:_id5").click }
136
125
 
137
126
  action(:begin_assessment) { |b| b.frm.button(:id=>"takeAssessmentForm:beginAssessment3").click }
138
127
 
@@ -143,45 +132,44 @@ class AssessmentSettings < AssessmentsBase
143
132
 
144
133
  menu_bar_elements
145
134
 
135
+ expected_element :cancel_button
136
+
146
137
  # Scrapes the Assessment Type from the page and returns it as a string.
147
- def assessment_type_title
148
- frm.div(:class=>"tier2").table(:index=>0)[0][1].text
149
- end
138
+ value(:assessment_type_title) { |b| b.frm.div(:class=>"tier2").table(:index=>0)[0][1].text }
150
139
 
151
140
  # Scrapes the Assessment Author information from the page and returns it as a string.
152
- def assessment_type_author
153
- frm.div(:class=>"tier2").table(:index=>0)[1][1].text
154
- end
141
+ value(:assessment_type_author) { |b| b.frm.div(:class=>"tier2").table(:index=>0)[1][1].text }
155
142
 
156
143
  # Scrapes the Assessment Type Description from the page and returns it as a string.
157
- def assessment_type_description
158
- frm.div(:class=>"tier2").table(:index=>0)[2][1].text
159
- end
144
+ value(:assessment_type_description) { |b| b.frm.div(:class=>"tier2").table(:index=>0)[2][1].text }
160
145
 
161
146
  # Clicks the Save Settings and Publish button
162
147
  # then instantiates the PublishAssessment class.
163
- def save_and_publish
164
- frm.button(:value=>"Save Settings and Publish").click
165
- PublishAssessment.new(@browser)
166
- end
148
+ action(:save_and_publish) { |b| b.frm.button(:value=>"Save Settings and Publish").click }
167
149
 
168
- action(:open) { |b| b.frm.link(:text=>"Open") }
169
- action(:close) { |b| b.frm.link(:text=>"Close") }
150
+ action(:open) { |b| b.frm.link(:text=>"Open").click }
151
+ action(:close) { |b| b.frm.link(:text=>"Close").click }
152
+ # Introduction
170
153
  element(:title) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:intro:assessment_title") }
171
154
  element(:authors) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:intro:assessment_author") }
172
155
  element(:description) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:intro:_id44_textinput") }
173
156
  action(:add_attachments_to_intro) { |b| b.frm.button(:name=>"assessmentSettingsAction:intro:_id90").click }
157
+ # Delivery Dates
174
158
  element(:available_date) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:startDate") }
175
159
  element(:due_date) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:endDate") }
176
160
  element(:retract_date) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:retractDate") }
161
+ # Assessment Released To
177
162
  element(:released_to_anonymous) { |b| b.frm.radio(:name=>"assessmentSettingsAction:_id117") }
178
163
  element(:released_to_site) { |b| b.frm.radio(:name=>"assessmentSettingsAction:_id117") }
179
164
  element(:specified_ips) { |b| b.frm.text_field(:name=>"assessmentSettingsAction:_id132") }
165
+ # High Security
180
166
  element(:secondary_id) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:username") }
181
167
  element(:secondary_pw) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:password") }
168
+ element(:allow_specified_ips) { |b| b.frm.text_field(:name=>"assessmentSettingsAction:_id132") }
182
169
  element(:timed_assessment) { |b| b.frm.checkbox(:id=>"assessmentSettingsAction:selTimeAssess") }
183
170
  element(:limit_hour) { |b| b.frm.select(:id=>"assessmentSettingsAction:timedHours") }
184
171
  element(:limit_mins) { |b| b.frm.select(:id=>"assessmentSettingsAction:timedMinutes") }
172
+ # Assessment Organization
185
173
  element(:linear_access) { |b| b.frm.radio(:name=>"assessmentSettingsAction:itemNavigation") }
186
174
  element(:random_access) { |b| b.frm.radio(:name=>"assessmentSettingsAction:itemNavigation") }
187
175
  element(:question_per_page) { |b| b.frm.radio(:name=>"assessmentSettingsAction:assessmentFormat") }
@@ -189,14 +177,17 @@ class AssessmentSettings < AssessmentsBase
189
177
  element(:assessment_per_page) { |b| b.frm.radio(:name=>"assessmentSettingsAction:assessmentFormat") }
190
178
  element(:continuous_numbering) { |b| b.frm.radio(:name=>"assessmentSettingsAction:itemNumbering") }
191
179
  element(:restart_per_part) { |b| b.frm.radio(:name=>"assessmentSettingsAction:itemNumbering") }
180
+ # Mark for review
192
181
  element(:add_mark_for_review) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:markForReview1") }
193
182
  element(:unlimited_submissions) { |b| b.frm.radio(:name=>"assessmentSettingsAction:unlimitedSubmissions") }
194
183
  element(:only_x_submissions) { |b| b.frm.radio(:name=>"assessmentSettingsAction:unlimitedSubmissions") }
195
184
  element(:allowed_submissions) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:submissions_Allowed") }
196
185
  element(:late_submissions_not_accepted) { |b| b.frm.radio(:name=>"assessmentSettingsAction:lateHandling") }
197
186
  element(:late_submissions_accepted) { |b| b.frm.radio(:name=>"assessmentSettingsAction:lateHandling") }
198
- element(:submission_message) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:_id245_textinput") }
187
+ # Submission Message
188
+ element(:submission_message) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:_id250_textinput") }
199
189
  element(:final_page_url) { |b| b.frm.text_field(:id=>"assessmentSettingsAction:finalPageUrl") }
190
+ # Feedback
200
191
  element(:question_level_feedback) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackAuthoring") }
201
192
  element(:selection_level_feedback) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackAuthoring") }
202
193
  element(:both_feedback_levels) { |b| b.frm.radio(:name=>"assessmentSettingsAction:feedbackAuthoring") }
@@ -229,8 +220,9 @@ class AssessmentSettings < AssessmentsBase
229
220
  #text_field(:objectives, :=>"") }
230
221
  #text_field(:rubrics, :=>"") }
231
222
  #checkbox(:record_metadata_for_questions, :=>"") }
232
- action(:save) { |b| b.frm.button(:name=>"assessmentSettingsAction:_id383").click }
233
- action(:cancel) { |b| b.frm.button(:name=>"assessmentSettingsAction:_id385").click }
223
+ action(:save) { |b| b.frm.button(:value=>"Save Settings").click }
224
+ element(:cancel_button) { |b| b.frm.button(:value=>"Cancel") }
225
+ action(:cancel) { |p| p.cancel_button.click }
234
226
 
235
227
  end
236
228
 
@@ -252,7 +244,7 @@ class AssessmentTotalScores < BasePage
252
244
  scores_table = frm.table(:id=>"editTotalResults:totalScoreTable").to_a
253
245
  scores_table.delete_at(0)
254
246
  scores_table.each { |row| ids << row[1] }
255
- return ids
247
+ ids
256
248
  end
257
249
 
258
250
  # Adds a comment to the specified student's comment box.
@@ -262,10 +254,10 @@ class AssessmentTotalScores < BasePage
262
254
  # selecting the appropriate comment box.
263
255
  # @param student_id [String] the target student id
264
256
  # @param comment [String] the text of the comment being made to the student
265
- def comment_for_student(student_id, comment)
266
- index_val = student_ids.index(student_id)
267
- frm.text_field(:name=>"editTotalResults:totalScoreTable:#{index_val}:_id345").value=comment
268
- end
257
+ pgmd(:comment_for_student) { |student_id, comment, b|
258
+ index_val = b.student_ids.index(student_id)
259
+ b.frm.text_field(:name=>"editTotalResults:totalScoreTable:#{index_val}:_id345").value=comment
260
+ }
269
261
 
270
262
  # Clicks the Submit Date link in the table header to sort/reverse sort the list.
271
263
  def sort_by_submit_date
@@ -340,60 +332,41 @@ class EditAssessment < AssessmentsBase
340
332
  # Allows removing a specified
341
333
  # Assessment part number.
342
334
  # @param part_num [String] the part number of the assessment you want
343
- def remove_part(part_num)
344
- frm.link(:xpath, "//a[contains(@onclick, 'assesssmentForm:parts:#{part_num.to_i-1}:copyToPool')]").click
345
- end
335
+ pgmd(:remove_part) { |part_num, b| b.frm.link(:xpath, "//a[contains(@onclick, 'assesssmentForm:parts:#{part_num.to_i-1}:copyToPool')]").click }
346
336
 
347
337
  # Clicks the Add Part button, then
348
338
  # instantiates the AddEditAssessmentPart page class.
349
- def add_part
350
- frm.link(:text=>"Add Part").click
351
- AddEditAssessmentPart.new(@browser)
352
- end
339
+ action(:add_part) { |b| b.frm.link(:text=>"Add Part").click }
353
340
 
354
341
  # Selects the desired question type from the
355
- # drop down list.
356
- element(:question_type) { |b| b.frm.select(:id=>"assesssmentForm:changeQType").select(qtype) }
342
+ # drop down list at the top of the page.
343
+ pgmd(:question_type) { |qtype, b| b.frm.select(:id=>"assesssmentForm:changeQType").select(qtype) }
357
344
 
358
345
  # Clicks the Preview button,
359
346
  # then instantiates the PreviewOverview page class.
360
- def preview
361
- frm.link(:text=>"Preview").click
362
- PreviewOverview.new(@browser)
363
- end
347
+ action(:preview) { |b| b.frm.link(:text=>"Preview").click }
364
348
 
365
349
  # Clicks the Settings link, then
366
350
  # instantiates the AssessmentSettings page class.
367
- def settings
368
- frm.link(:text=>"Settings").click
369
- AssessmentSettings.new(@browser)
370
- end
351
+ action(:settings) { |b| b.frm.link(:text=>"Settings").click }
371
352
 
372
353
  # Clicks the Publish button, then
373
354
  # instantiates the PublishAssessment page class.
374
- def publish
375
- frm.link(:text=>"Publish").click
376
- PublishAssessment.new(@browser)
377
- end
378
-
379
- # Clicks the Question Pools button, then
380
- # instantiates the QuestionPoolsList page class.
381
- def question_pools
382
- frm.link(:text=>"Question Pools").click
383
- QuestionPoolsList.new(@browser)
384
- end
355
+ action(:publish) { |b| b.frm.link(:text=>"Publish").click }
385
356
 
386
357
  # Allows retrieval of a specified question's
387
358
  # text, by part and question number.
388
359
  # @param part_num [String] the Part number containing the question you want
389
360
  # @param question_num [String] the number of the question you want
390
- def get_question_text(part_number, question_number)
391
- frm.table(:id=>"assesssmentForm:parts:#{part_number.to_i-1}:parts").div(:class=>"tier3", :index=>question_number.to_i-1).text
392
- end
361
+ pgmd(:get_question_text) { |part_number, question_number, b| b.frm.table(:id=>"assesssmentForm:parts:#{part_number.to_i-1}:parts").div(:class=>"tier3", :index=>question_number.to_i-1).text }
393
362
 
394
363
  action(:print) { |b| b.frm.button(:text=>"Print").click }
395
364
  action(:update_points) { |b| b.frm.button(:id=>"assesssmentForm:pointsUpdate").click }
396
365
 
366
+ pgmd(:add_question_to_part) { |part, p| p.assessment_form.row(:text=>/#{Regexp.escape(part)}/).select(:id=>/changeQType/) }
367
+
368
+ element(:assessment_form) { |b| b.table(:id=>"assesssmentForm:parts") }
369
+
397
370
  end
398
371
 
399
372
  # This is the page for adding and editing a part of an assessment
@@ -401,17 +374,16 @@ class AddEditAssessmentPart < BasePage
401
374
 
402
375
  frame_element
403
376
 
404
- # Clicks the Save button, then instantiates
405
- # the EditAssessment page class.
377
+ # Clicks the Save button
406
378
  def save
407
379
  frm.button(:name=>"modifyPartForm:_id89").click
408
- EditAssessment.new(@browser)
380
+
409
381
  end
410
382
 
411
383
  element(:title) { |b| b.frm.text_field(:id=>"modifyPartForm:title") }
412
384
  element(:information) { |b| b.frm.text_field(:id=>"modifyPartForm:_id10_textinput") }
413
385
  action(:add_attachments) { |b| b.frm.button(:name=>"modifyPartForm:_id54").click }
414
- element(:questions_one_by_one) { |b| b.frm.radio(:index=>0, :name=>"modifyPartForm:_id60") }
386
+ element(:one_by_one) { |b| b.frm.radio(:index=>0, :name=>"modifyPartForm:_id60") }
415
387
  element(:random_draw) { |b| b.frm.radio(:index=>1, :name=>"modifyPartForm:_id60") }
416
388
  element(:pool_name) { |b| b.frm.select(:id=>"modifyPartForm:assignToPool") }
417
389
  element(:number_of_questions) { |b| b.frm.text_field(:id=>"modifyPartForm:numSelected") }
@@ -433,14 +405,12 @@ end
433
405
  class PublishAssessment < BasePage
434
406
 
435
407
  frame_element
408
+ basic_page_elements
409
+
436
410
  # Clicks the Publish button, then
437
411
  # instantiates the AssessmentsList page class.
438
- def publish
439
- frm.button(:value=>"Publish").click
440
- AssessmentsList.new(@browser)
441
- end
412
+ action(:publish) { |b| b.frm.button(:value=>"Publish").click }
442
413
 
443
- action(:cancel) { |b| b.frm.button(:value=>"Cancel").click }
444
414
  action(:edit) { |b| b.frm.button(:name=>"publishAssessmentForm:_id23").click }
445
415
  element(:notification) { |b| b.frm.select(:id=>"publishAssessmentForm:number") }
446
416