sambal-cle 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. data/Gemfile +7 -0
  2. data/Gemfile.lock +44 -0
  3. data/lib/sambal-cle/data_objects/announcement.rb +7 -7
  4. data/lib/sambal-cle/data_objects/assessment.rb +26 -77
  5. data/lib/sambal-cle/data_objects/assessment_submission.rb +26 -0
  6. data/lib/sambal-cle/data_objects/assignment.rb +40 -40
  7. data/lib/sambal-cle/data_objects/assignment_permissions.rb +4 -4
  8. data/lib/sambal-cle/data_objects/assignment_submission.rb +4 -4
  9. data/lib/sambal-cle/data_objects/blog.rb +2 -2
  10. data/lib/sambal-cle/data_objects/blogger.rb +3 -3
  11. data/lib/sambal-cle/data_objects/chat_room.rb +2 -2
  12. data/lib/sambal-cle/data_objects/{site.rb → course.rb} +24 -20
  13. data/lib/sambal-cle/data_objects/event.rb +4 -4
  14. data/lib/sambal-cle/data_objects/forum.rb +21 -22
  15. data/lib/sambal-cle/data_objects/glossary_term.rb +71 -0
  16. data/lib/sambal-cle/data_objects/lesson.rb +10 -9
  17. data/lib/sambal-cle/data_objects/matrix.rb +142 -0
  18. data/lib/sambal-cle/data_objects/message.rb +2 -2
  19. data/lib/sambal-cle/data_objects/poll.rb +2 -2
  20. data/lib/sambal-cle/data_objects/portfolio.rb +120 -0
  21. data/lib/sambal-cle/data_objects/questions.rb +690 -0
  22. data/lib/sambal-cle/data_objects/resource.rb +12 -12
  23. data/lib/sambal-cle/data_objects/syllabus.rb +7 -7
  24. data/lib/sambal-cle/data_objects/web_content_tool.rb +2 -2
  25. data/lib/sambal-cle/data_objects/wiki.rb +6 -6
  26. data/lib/sambal-cle/page_objects/assessments.rb +165 -157
  27. data/lib/sambal-cle/page_objects/assignments.rb +17 -17
  28. data/lib/sambal-cle/page_objects/glossary.rb +14 -64
  29. data/lib/sambal-cle/page_objects/matrix.rb +77 -113
  30. data/lib/sambal-cle/page_objects/portfolios.rb +0 -2
  31. data/lib/sambal-cle/page_objects/resources.rb +4 -4
  32. data/lib/sambal-cle/page_objects/site_setup.rb +31 -23
  33. data/lib/sambal-cle/page_objects/sites.rb +2 -12
  34. data/lib/sambal-cle/utilities.rb +0 -6
  35. data/lib/sambal-cle/workflows.rb +77 -76
  36. data/lib/sambal-cle.rb +2 -2
  37. data/sambal-cle.gemspec +2 -2
  38. data/test/add_assignment_to_calendar_spec.rb +4 -4
  39. data/test/assessment_create_spec.rb +1 -1
  40. data/test/assessment_feedback_spec.rb +78 -0
  41. data/test/assessment_publish_spec.rb +102 -0
  42. data/test/assignment_announcements_spec.rb +4 -4
  43. data/test/assignment_duplicate_spec.rb +4 -4
  44. data/test/assignment_gradebook_spec.rb +4 -4
  45. data/test/assignment_permissions_spec.rb +5 -5
  46. data/test/assignments_grading_spec.rb +4 -4
  47. data/test/assignments_submission_spec.rb +4 -4
  48. data/test/duplicate_site_spec.rb +2 -2
  49. data/test/glossary_term_create_spec.rb +71 -0
  50. data/test/import_site_content_spec.rb +3 -3
  51. data/test/test_spec.rb +51 -0
  52. metadata +16 -5
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'rspec'
4
+ gem 'test-factory'
5
+ gem 'watir-webdriver'
6
+
7
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,44 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ sambal-cle (0.1.5)
5
+ test-factory (>= 0.0.1)
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ addressable (2.2.7)
11
+ childprocess (0.3.1)
12
+ ffi (~> 1.0.6)
13
+ diff-lcs (1.1.3)
14
+ ffi (1.0.11)
15
+ libwebsocket (0.1.3)
16
+ addressable
17
+ multi_json (1.2.0)
18
+ rspec (2.9.0)
19
+ rspec-core (~> 2.9.0)
20
+ rspec-expectations (~> 2.9.0)
21
+ rspec-mocks (~> 2.9.0)
22
+ rspec-core (2.9.0)
23
+ rspec-expectations (2.9.1)
24
+ diff-lcs (~> 1.1.3)
25
+ rspec-mocks (2.9.0)
26
+ rubyzip (0.9.7)
27
+ selenium-webdriver (2.25.0)
28
+ childprocess (>= 0.2.5)
29
+ libwebsocket (~> 0.1.3)
30
+ multi_json (~> 1.0)
31
+ rubyzip
32
+ test-factory (0.0.2)
33
+ watir-webdriver (>= 0.6.1)
34
+ watir-webdriver (0.6.1)
35
+ selenium-webdriver (>= 2.18.0)
36
+
37
+ PLATFORMS
38
+ ruby
39
+
40
+ DEPENDENCIES
41
+ rspec
42
+ sambal-cle!
43
+ test-factory
44
+ watir-webdriver
@@ -25,8 +25,8 @@ class AnnouncementObject
25
25
  alias :name :title
26
26
 
27
27
  def create
28
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
29
- announcements unless @browser.title=~/Announcements$/
28
+ open_my_site_by_name
29
+ announcements
30
30
  on_page Announcements do |page|
31
31
  page.add
32
32
  end
@@ -43,13 +43,13 @@ class AnnouncementObject
43
43
  end
44
44
 
45
45
  def edit opts={}
46
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
47
- announcements unless @browser.title=~/Announcements$/
46
+ open_my_site_by_name @site
47
+ announcements
48
48
  on_page Announcements do |list|
49
49
  list.edit @title
50
50
  end
51
51
  on AddEditAnnouncements do |edit|
52
- edit.title.set opts[:title] unless opts[:title]==nil
52
+ edit.title.fit opts[:title]
53
53
  edit.send(opts[:access]) unless opts[:access]==nil
54
54
  edit.send(opts[:availability]) unless opts[:availability]==nil
55
55
  unless opts[:body]==nil
@@ -61,8 +61,8 @@ class AnnouncementObject
61
61
  end
62
62
 
63
63
  def view
64
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
65
- announcements unless @browser.title=~/Announcements$/
64
+ open_my_site_by_name @site
65
+ announcements
66
66
  on Announcements do |list|
67
67
  list.view @title
68
68
  end
@@ -6,6 +6,21 @@ class AssessmentObject
6
6
  include DateFactory
7
7
  include Workflows
8
8
 
9
+ def question_types
10
+ {
11
+ :"Multiple Choice"=>MultipleChoiceQuestion,
12
+ :Survey=>SurveyQuestion,
13
+ :"Short Answer/Essay"=>ShortAnswerQuestion,
14
+ :"Fill in the Blank"=>FillInBlankQuestion,
15
+ :"Numeric Response"=>NumericResponseQuestion,
16
+ :Matching=>MatchingQuestion,
17
+ :"True False"=>TrueFalseQuestion,
18
+ :"Audio Recording"=>AudioRecordingQuestion,
19
+ :"File Upload"=>FileUploadQuestion,
20
+ :"Calculated Question"=>CalculatedQuestion
21
+ }
22
+ end
23
+
9
24
  attr_accessor :title, :site, :questions, :parts, :status, :type, :available_date,
10
25
  :due_date, :retract_date, :feedback_authoring, :feedback_delivery, :feedback_date,
11
26
  :release_to, :release, :release_options, :secondary_id, :secondary_password,
@@ -47,8 +62,8 @@ class AssessmentObject
47
62
  end
48
63
 
49
64
  def create
50
- my_workspace.open_my_site_by_name @site unless @browser.title=~/#{@site}/
51
- tests_and_quizzes unless @browser.title=~/Tests & Quizzes$/
65
+ open_my_site_by_name @site
66
+ tests_and_quizzes
52
67
  reset
53
68
  on_page AssessmentsList do |page|
54
69
  page.title.set @title
@@ -117,8 +132,8 @@ class AssessmentObject
117
132
  end
118
133
 
119
134
  def publish
120
- my_workspace.open_my_site_by_name @site unless @browser.title=~/#{@site}/
121
- tests_and_quizzes unless @browser.title=~/Tests & Quizzes$/
135
+ open_my_site_by_name @site
136
+ tests_and_quizzes
122
137
  reset
123
138
  on AssessmentsList do |list|
124
139
  list.publish @title
@@ -144,10 +159,11 @@ class AssessmentObject
144
159
  position
145
160
  defaults = {
146
161
  :assessment=>@title,
147
- :part=>@parts[rand(@parts.length)].title
162
+ :part=>@parts[rand(@parts.length)].title,
163
+ :type=>question_types.keys.shuffle[0]
148
164
  }
149
165
  options = defaults.merge(opts)
150
- question = make QuestionObject, options
166
+ question = make question_types[options[:type].to_sym], options
151
167
  question.create
152
168
  @questions << question
153
169
  end
@@ -155,8 +171,8 @@ class AssessmentObject
155
171
  private
156
172
 
157
173
  def position
158
- my_workspace.open_my_site_by_name @site unless @browser.title=~/#{@site}/
159
- tests_and_quizzes unless @browser.title=~/Tests & Quizzes$/
174
+ open_my_site_by_name @site
175
+ tests_and_quizzes
160
176
  unless @browser.frame(:class=>"portletMainIframe").h3.text=="Questions: #{@title}"
161
177
  reset
162
178
  on AssessmentsList do |list|
@@ -167,75 +183,10 @@ class AssessmentObject
167
183
 
168
184
  end
169
185
 
170
- class QuestionObject
171
-
172
- include Foundry
173
- include Utilities
174
- include Workflows
175
- include StringFactory
176
-
177
- attr_accessor :type, :assessment, :text, :point_value, :part,
178
- # Multiple Choice attributes...
179
- :correct_type, :answer_credit, :negative_point_value
180
-
181
- def initialize(browser, opts={})
182
- @browser = browser
183
- defaults = {
184
- :type=>QUESTION_TYPES.keys[rand(QUESTION_TYPES.length)],
185
- :text=>random_alphanums,
186
- :point_value=>(rand(100)+1).to_s
187
-
188
- }
189
- options = defaults.merge(opts)
190
- set_options(options)
191
- requires @assessment
192
- end
193
-
194
- QUESTION_TYPES = {
195
- :"Multiple Choice"=>:add_multiple_choice,
196
- :Survey=>:add_survey#,
197
- #:"Short Answer/Essay"=>:add_short_answer,
198
- #:"Fill in the Blank"=>:add_fill_in_the_blank,
199
- #:"Numeric Response"=>:add_numeric,
200
- #:Matching=>:add_matching,
201
- #:"True False"=>:add_true_false,
202
- #:"Audio Recording"=>:add_audio,
203
- #:"File Upload"=>:add_file_upload,
204
- #:"Calculated Question"=>:add_calculated_question
205
- }
206
-
207
- def create
208
- on EditAssessment do |edit|
209
- edit.add_question_to_part(@part).select @type
210
- end
211
- self.send(QUESTION_TYPES[@type.to_sym])
212
- end
213
-
214
- private
215
-
216
- def add_multiple_choice
217
- on MultipleChoice do |add|
218
- add.answer_point_value.set @point_value
219
- add.question_text.set @text
220
- add.send(@correct_type).set
221
- add.send(@answer_credit).set unless @answer_credit==nil
222
- add.negative_point_value.set @negative_point_value unless @negative_point_value==nil
223
-
224
- end
225
- end
226
-
227
- def add_survey
228
- on Survey do |add|
229
-
230
- end
231
- end
232
-
233
- end
234
-
235
186
  class PartObject
236
187
 
237
188
  include Foundry
238
- include Utilities
189
+ include DataFactory
239
190
  include Workflows
240
191
  include StringFactory
241
192
 
@@ -283,6 +234,4 @@ class PartObject
283
234
 
284
235
  end
285
236
 
286
- end
287
-
288
-
237
+ end
@@ -0,0 +1,26 @@
1
+ class AssessmentSubmissionObject
2
+
3
+ include Foundry
4
+ include DataFactory
5
+ include StringFactory
6
+ include DateFactory
7
+ include Workflows
8
+
9
+ attr_accessor :assessment
10
+
11
+ def initialize(browser, opts={})
12
+ @browser = browser
13
+
14
+ defaults = {
15
+
16
+ }
17
+ options = defaults.merge(opts)
18
+
19
+ set_options(options)
20
+ # Note that the assessment requirement is for the Assessment Object itself.
21
+ requires @assessment
22
+ end
23
+
24
+
25
+
26
+ end
@@ -38,10 +38,10 @@ class AssignmentObject
38
38
  alias :name :title
39
39
 
40
40
  def create
41
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
41
+ open_my_site_by_name @site
42
42
 
43
43
  # Go to assignments page
44
- assignments unless @browser.title=~/Assignments$/
44
+ assignments
45
45
 
46
46
  on_page AssignmentsList do |list|
47
47
  list.add
@@ -50,40 +50,40 @@ class AssignmentObject
50
50
  @allow_resubmission==nil ? @allow_resubmission=checkbox_setting(add.allow_resubmission) : add.allow_resubmission.send(@allow_resubmission)
51
51
  if @allow_resubmission==:set
52
52
  add.num_resubmissions.wait_until_present
53
- @num_resubmissions==nil ? @num_resubmissions=add.num_resubmissions.selected_options[0].text : add.num_resubmissions.select(@num_resubmissions)
54
- @resubmission[:MON]==nil ? @resubmission[:MON]=add.resub_until_month.selected_options[0].text : add.resub_until_month.select(@resubmission[:MON])
55
- @resubmission[:day_of_month]==nil ? @resubmission[:day_of_month]=add.resub_until_day.selected_options[0].text : add.select(@resubmission[:day_of_month])
56
- @resubmission[:year]==nil ? @resubmission[:year]=add.resub_until_year.selected_options[0].text : add.select(@resubmission[:year])
57
- @resubmission[:hour]==nil ? @resubmission[:hour]=add.resub_until_hour.selected_options[0].text : add.select(@resubmission[:hour])
58
- @resubmission[:minute_rounded]==nil ? @resubmission[:minute_rounded]=add.resub_until_minute.selected_options[0].text : add.select(@resubmission[:minute_rounded])
59
- @resubmission[:MERIDIAN]==nil ? @resubmission[:MERIDIAN]=add.resub_until_meridian.selected_options[0].text : add.select(@resubmission[:MERIDIAN])
53
+ @num_resubmissions=get_or_select(@num_resubmissions, add.num_resubmissions)
54
+ @resubmission[:MON]=get_or_select(@resubmission[:MON], add.resub_until_month)
55
+ @resubmission[:day_of_month]=get_or_select(@resubmission[:day_of_month], add.resub_until_day)
56
+ @resubmission[:year]=get_or_select(@resubmission[:year], add.resub_until_year)
57
+ @resubmission[:hour]=get_or_select(@resubmission[:hour], add.resub_until_hour)
58
+ @resubmission[:minute_rounded]=get_or_select(@resubmission[:minute_rounded], add.resub_until_minute)
59
+ @resubmission[:MERIDIAN]=get_or_select(@resubmission[:MERIDIAN], add.resub_until_meridian)
60
60
  end
61
61
  add.title.set @title
62
62
  add.instructions=@instructions
63
- @student_submissions==nil ? @student_submissions=add.student_submissions.selected_options[0].text : add.student_submissions.select(@student_submissions)
64
- @grade_scale==nil ? @grade_scale=add.grade_scale.selected_options[0].text : add.grade_scale.select(@grade_scale)
65
- @open[:MON]==nil ? @open[:MON]=add.open_month.selected_options[0].text : add.open_month.select(@open[:MON])
63
+ @student_submissions=get_or_select(@student_submissions, add.student_submissions)
64
+ @grade_scale=get_or_select(@grade_scale, add.grade_scale)
65
+ @open[:MON]=get_or_select(@open[:MON], add.open_month)
66
66
  add.max_points.set(@max_points) unless @max_points==nil
67
- @open[:year]==nil ? @open[:year]=add.open_year.selected_options[0].text : add.open_year.select(@open[:year])
68
- @open[:day_of_month]==nil ? @open[:day_of_month]=add.open_day.selected_options[0].text : add.open_day.select(@open[:day_of_month])
69
- @open[:hour]==nil ? @open[:hour]=add.open_hour.selected_options[0].text : add.open_hour.select(@open[:hour])
70
- @open[:minute_rounded]==nil ? @open[:minute_rounded]=add.open_minute.selected_options[0].text : add.open_minute.select(@open[:minute_rounded])
71
- @open[:MERIDIAN]==nil ? @open[:MERIDIAN]=add.open_meridian.selected_options[0].text : add.open_meridian.select(@open[:MERIDIAN])
67
+ @open[:year]=get_or_select(@open[:year], add.open_year)
68
+ @open[:day_of_month]=get_or_select(@open[:day_of_month], add.open_day)
69
+ @open[:hour]=get_or_select(@open[:hour], add.open_hour)
70
+ @open[:minute_rounded]=get_or_select(@open[:minute_rounded], add.open_minute)
71
+ @open[:MERIDIAN]=get_or_select(@open[:MERIDIAN], add.open_meridian)
72
72
  @add_due_date==nil ? @add_due_date=checkbox_setting(add.add_due_date) : add.add_due_date.send(@add_due_date)
73
73
  @add_open_announcement==nil ? @add_open_announcement=checkbox_setting(add.add_open_announcement) : add.add_open_announcement.send(@add_open_announcement)
74
74
  @add_to_gradebook==nil ? @add_to_gradebook=radio_setting(add.add_to_gradebook) : add.add_to_gradebook.send(@add_to_gradebook)
75
- @due[:MON]==nil ? @due[:MON]=add.due_month.selected_options[0].text : add.due_month.select(@due[:MON])
76
- @due[:year]==nil ? @due[:year]=add.due_year.selected_options[0].text : add.due_year.select(@due[:year])
77
- @due[:day_of_month]==nil ? @due[:day_of_month]=add.due_day.selected_options[0].text : add.due_day.select(@due[:day_of_month])
78
- @due[:hour]==nil ? @due[:hour]=add.due_hour.selected_options[0].text : add.due_hour.select(@due[:hour])
79
- @due[:minute_rounded]==nil ? @due[:minute_rounded]=add.due_minute.selected_options[0].text : add.due_minute.select(@due[:minute_rounded])
80
- @due[:MERIDIAN]==nil ? @due[:MERIDIAN]=add.due_meridian.selected_options[0].text : add.due_meridian.select(@due[:MERIDIAN])
81
- @accept_until[:MON]==nil ? @accept_until[:MON]=add.accept_month.selected_options[0].text : add.accept_month.select(@accept_until[:MON])
82
- @accept_until[:year]==nil ? @accept_until[:year]=add.accept_year.selected_options[0].text : add.accept_year.select(@accept_until[:year])
83
- @accept_until[:day_of_month]==nil ? @accept_until[:day_of_month]=add.accept_day.selected_options[0].text : add.accept_day.select(@accept_until[:day_of_month])
84
- @accept_until[:hour]==nil ? @accept_until[:hour]=add.accept_hour.selected_options[0].text : add.accept_hour.select(@accept_until[:hour])
85
- @accept_until[:minute_rounded]==nil ? @accept_until[:minute_rounded]=add.accept_minute.selected_options[0].text : add.accept_minute.select(@accept_until[:minute_rounded])
86
- @accept_until[:MERIDIAN]==nil ? @accept_until[:MERIDIAN]=add.accept_meridian.selected_options[0].text : add.accept_meridian.select(@accept_until[:MERIDIAN])
75
+ @due[:MON]=get_or_select(@due[:MON], add.due_month)
76
+ @due[:year]=get_or_select(@due[:year], add.due_year)
77
+ @due[:day_of_month]=get_or_select(@due[:day_of_month], add.due_day)
78
+ @due[:hour]=get_or_select(@due[:hour], add.due_hour)
79
+ @due[:minute_rounded]=get_or_select(@due[:minute_rounded], add.due_minute)
80
+ @due[:MERIDIAN]=get_or_select(@due[:MERIDIAN], add.due_meridian)
81
+ @accept_until[:MON]=get_or_select(@accept_until[:MON], add.accept_month)
82
+ @accept_until[:year]=get_or_select(@accept_until[:year], add.accept_year)
83
+ @accept_until[:day_of_month]=get_or_select(@accept_until[:day_of_month], add.accept_day)
84
+ @accept_until[:hour]=get_or_select(@accept_until[:hour], add.accept_hour)
85
+ @accept_until[:minute_rounded]=get_or_select(@accept_until[:minute_rounded], add.accept_minute)
86
+ @accept_until[:MERIDIAN]=get_or_select(@accept_until[:MERIDIAN], add.accept_meridian)
87
87
  #@do_not_add_to_gradebook==nil ? @do_not_add_to_gradebook=radio_setting(add.do_not_add_gradebook.set?) :
88
88
  if @status=="Draft"
89
89
  add.save_draft
@@ -99,8 +99,8 @@ class AssignmentObject
99
99
  end
100
100
 
101
101
  def edit opts={}
102
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
103
- assignments unless @browser.title=~/Assignments$/
102
+ open_my_site_by_name @site
103
+ assignments
104
104
  on AssignmentsList do |list|
105
105
  if @status=="Draft"
106
106
  list.edit_assignment "Draft - #{@title}"
@@ -110,12 +110,12 @@ class AssignmentObject
110
110
  end
111
111
 
112
112
  on AssignmentAdd do |edit|
113
- edit.title.set opts[:title] unless opts[:title]==nil
113
+ edit.title.fit opts[:title]
114
114
  unless opts[:instructions]==nil
115
115
  edit.enter_source_text edit.editor, opts[:instructions]
116
116
  end
117
- edit.grade_scale.select opts[:grade_scale] unless opts[:grade_scale]==nil
118
- edit.max_points.set opts[:max_points] unless opts[:max_points]==nil
117
+ edit.grade_scale.fit opts[:grade_scale]
118
+ edit.max_points.fit opts[:max_points]
119
119
 
120
120
  #TODO: All the rest goes here
121
121
 
@@ -140,8 +140,8 @@ class AssignmentObject
140
140
  end
141
141
 
142
142
  def get_info
143
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
144
- assignments unless @browser.title=~/Assignments$/
143
+ open_my_site_by_name @site
144
+ assignments
145
145
  on AssignmentsList do |list|
146
146
  @id = list.get_assignment_id @title
147
147
  @status=list.status_of @title
@@ -179,8 +179,8 @@ class AssignmentObject
179
179
  end
180
180
 
181
181
  def duplicate
182
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
183
- assignments unless @browser.title=~/Assignments$/
182
+ open_my_site_by_name @site
183
+ assignments
184
184
  reset
185
185
  on AssignmentsList do |list|
186
186
  list.duplicate @title
@@ -199,8 +199,8 @@ class AssignmentObject
199
199
  # Use this method to open a submitted assignment for viewing
200
200
  # the page.
201
201
  def view_submission
202
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
203
- assignments unless @browser.title=~/Assignments$/
202
+ open_my_site_by_name @site
203
+ assignments
204
204
  reset
205
205
  on AssignmentsList do |list|
206
206
  list.open_assignment @title
@@ -19,8 +19,8 @@ class AssignmentPermissionsObject # TODO: Need to add support for Group-specific
19
19
  end
20
20
 
21
21
  def set opts={}
22
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
23
- assignments unless @browser.title=~/Assignments$/
22
+ open_my_site_by_name @site
23
+ assignments
24
24
  reset
25
25
  on AssignmentsList do |list|
26
26
  list.permissions
@@ -43,8 +43,8 @@ class AssignmentPermissionsObject # TODO: Need to add support for Group-specific
43
43
  end
44
44
 
45
45
  def get
46
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
47
- assignments unless @browser.title=~/Assignments$/
46
+ open_my_site_by_name @site
47
+ assignments
48
48
  reset
49
49
  on AssignmentsList do |list|
50
50
  list.permissions
@@ -59,8 +59,8 @@ class AssignmentSubmissionObject
59
59
  end
60
60
 
61
61
  def grade_submission opts={}
62
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
63
- assignments unless @browser.title=~/Assignments$/
62
+ open_my_site_by_name @site
63
+ assignments
64
64
  reset
65
65
  on AssignmentsList do |list|
66
66
  list.grade @title
@@ -113,8 +113,8 @@ class AssignmentSubmissionObject
113
113
  end
114
114
 
115
115
  def open
116
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
117
- assignments unless @browser.title=~/Assignments$/
116
+ open_my_site_by_name @site
117
+ assignments
118
118
  reset
119
119
  on AssignmentsList do |list|
120
120
  list.open_assignment @title
@@ -21,8 +21,8 @@ class BlogEntryObject
21
21
  end
22
22
 
23
23
  def create
24
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
25
- blogs unless @browser.title=~/Blogs$/
24
+ open_my_site_by_name @site
25
+ blogs
26
26
  # TODO: More needed here
27
27
  end
28
28
 
@@ -21,8 +21,8 @@ class BloggerPostObject
21
21
  end
22
22
 
23
23
  def create
24
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
25
- blogs unless @browser.title=~/Blogs$/
24
+ open_my_site_by_name @site
25
+ blogs
26
26
  # TODO: More needed here
27
27
  end
28
28
 
@@ -37,7 +37,7 @@ class BloggerPostObject
37
37
  def delete
38
38
 
39
39
  end
40
-
40
+
41
41
  end
42
42
 
43
43
 
@@ -23,8 +23,8 @@ class ChatRoomObject
23
23
  end
24
24
 
25
25
  def create
26
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
27
- chat_room unless @browser.title=~/Chat Room$/
26
+ open_my_site_by_name
27
+ chat_room
28
28
  on ChatRoom do |chat|
29
29
  chat.options
30
30
  end
@@ -1,4 +1,4 @@
1
- class SiteObject
1
+ class CourseSiteObject
2
2
 
3
3
  include Foundry
4
4
  include DataFactory
@@ -8,7 +8,7 @@ class SiteObject
8
8
 
9
9
  attr_accessor :name, :id, :subject, :course, :section, :term, :authorizer,
10
10
  :web_content_source, :email, :joiner_role, :creation_date, :web_content_title,
11
- :description, :short_description, :site_contact_name, :site_contact_email
11
+ :description, :short_description, :site_contact_name, :site_contact_email, :participants
12
12
 
13
13
  def initialize(browser, opts={})
14
14
  @browser = browser
@@ -24,15 +24,16 @@ class SiteObject
24
24
  :joiner_role => "Student",
25
25
  :description => random_alphanums(30),
26
26
  :short_description => random_alphanums,
27
- :site_contact_name => random_alphanums(5)+" "+random_alphanums(8)
27
+ :site_contact_name => random_alphanums(5)+" "+random_alphanums(8),
28
+ :participants=>{}
28
29
  }
29
30
  options = defaults.merge(opts)
30
31
  set_options(options)
31
32
  end
32
33
 
33
34
  def create
34
- my_workspace unless @browser.title=~/My Workspace/
35
- site_setup unless @browser.title=~/Site Setup/
35
+ my_workspace
36
+ site_setup
36
37
  on_page SiteSetup do |page|
37
38
  page.new
38
39
  end
@@ -92,7 +93,7 @@ class SiteObject
92
93
  end
93
94
 
94
95
  # Create a string that will match the new Site's "creation date" string
95
- @creation_date = make_date(Time.now)
96
+ @creation_date = right_now[:sakai]
96
97
 
97
98
  on SiteSetup do |site_setup|
98
99
  site_setup.search(Regexp.escape(@subject))
@@ -104,8 +105,8 @@ class SiteObject
104
105
  end
105
106
 
106
107
  def create_and_reuse_site(site_name)
107
- my_workspace unless @browser.title=~/My Workspace/
108
- site_setup unless @browser.title=~/Site Setup/
108
+ my_workspace
109
+ site_setup
109
110
  on_page SiteSetup do |page|
110
111
  page.new
111
112
  end
@@ -216,7 +217,7 @@ class SiteObject
216
217
  }
217
218
  options = defaults.merge(opts)
218
219
 
219
- new_site = make SiteObject, options
220
+ new_site = make CourseSiteObject, options
220
221
 
221
222
  new_site.name=options[:name]
222
223
  new_site.subject=options[:subject]
@@ -233,8 +234,8 @@ class SiteObject
233
234
  new_site.site_contact_email=options[:site_contact_email]
234
235
  new_site.term=options[:term]
235
236
 
236
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
237
- site_editor unless @browser.title=~/Site Editor$/
237
+ open_my_site_by_name @site
238
+ site_editor
238
239
  on SiteEditor do |edit|
239
240
  edit.duplicate_site
240
241
  end
@@ -244,7 +245,7 @@ class SiteObject
244
245
  dupe.duplicate
245
246
  end
246
247
  my_workspace
247
- site_setup unless @browser.title=~/Site Setup/
248
+ site_setup
248
249
  on SiteSetup do |sites|
249
250
  sites.search(Regexp.escape(new_site.name))
250
251
  end
@@ -256,20 +257,19 @@ class SiteObject
256
257
 
257
258
  end
258
259
 
259
- # TODO: Improve this method to better take advantage of the UserObject...
260
- def add_official_participants opts={}
261
- participants = opts[:participants].join("\n")
262
- open_my_site_by_name @name unless @browser.title=~/#{@name}/
263
- site_editor unless @browser.title=~/Site Editor$/
260
+ def add_official_participants(role, *participants)
261
+ list_of_ids=participants.join("\n")
262
+ open_my_site_by_name @title
263
+ site_editor
264
264
  on SiteEditor do |site|
265
265
  site.add_participants
266
266
  end
267
267
  on SiteSetupAddParticipants do |add|
268
- add.official_participants.set participants
268
+ add.official_participants.set list_of_ids
269
269
  add.continue
270
270
  end
271
271
  on SiteSetupChooseRole do |choose|
272
- choose.radio_button(opts[:role]).set
272
+ choose.radio_button(role).set
273
273
  choose.continue
274
274
  end
275
275
  on SiteSetupParticipantEmail do |send|
@@ -278,7 +278,11 @@ class SiteObject
278
278
  on SiteSetupParticipantConfirm do |confirm|
279
279
  confirm.finish
280
280
  end
281
+ if @participants.has_key?(role)
282
+ @participants[role].insert(-1, participants).flatten!
283
+ else
284
+ @participants.store(role, participants)
285
+ end
281
286
  end
282
287
 
283
-
284
288
  end
@@ -30,8 +30,8 @@ class EventObject
30
30
  end
31
31
 
32
32
  def create
33
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
34
- calendar unless @browser.title=~/Calendar$/
33
+ open_my_site_by_name @site
34
+ calendar
35
35
  on Calendar do |cal|
36
36
  cal.add_event
37
37
  end
@@ -63,8 +63,8 @@ class EventObject
63
63
  end
64
64
 
65
65
  def view
66
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
67
- calendar unless @browser.title=~/Calendar$/
66
+ open_my_site_by_name @site
67
+ calendar
68
68
  on Calendar do |cal|
69
69
  cal.open_event @title
70
70
  end