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
@@ -24,28 +24,28 @@ class ForumObject
24
24
  alias :name :title
25
25
 
26
26
  def create
27
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
28
- forums unless @browser.title=~/Forums$/
27
+ open_my_site_by_name
28
+ forums
29
29
  on Forums do |forums|
30
30
  forums.new_forum
31
31
  end
32
32
  on EditForum do |edit|
33
33
  edit.title.set @title
34
- edit.short_description.set @short_description unless @short_description==nil
34
+ edit.short_description.fit @short_description
35
35
  edit.enter_source_text(edit.editor, @description) unless @description==nil
36
36
  edit.save
37
37
  end
38
38
  end
39
39
 
40
40
  def edit opts={}
41
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
41
+ open_my_site_by_name @site
42
42
  forums unless @browser.title=~/Forums$/
43
43
  on Forums do |forum|
44
44
  forum.forum_settings @title
45
45
  end
46
46
  on EditForum do |edit|
47
- edit.title.set opts[:title] unless opts[:title] == nil
48
- edit.short_description.set opts[:short_description] unless opts[:short_description]==nil
47
+ edit.title.fit opts[:title]
48
+ edit.short_description.fit opts[:short_description]
49
49
  unless opts[:description] == nil
50
50
  edit.enter_source_text edit.editor, opts[:description]
51
51
  end
@@ -55,8 +55,8 @@ class ForumObject
55
55
  end
56
56
 
57
57
  def view
58
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
59
- forums unless @browser.title=~/Forums$/
58
+ open_my_site_by_name @site
59
+ forums
60
60
  on Forums do |forum|
61
61
  forum.open_forum @title
62
62
  end
@@ -72,8 +72,8 @@ class ForumObject
72
72
  end
73
73
 
74
74
  def get_entity_info
75
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
76
- forums unless @browser.title=~/Forums$/
75
+ open_my_site_by_name @site
76
+ forums
77
77
  # TODO: Something will probably be needed here, in case we're currently
78
78
  # on a Forum page already.
79
79
  on Forums do |forum|
@@ -117,15 +117,14 @@ class TopicObject
117
117
  options = defaults.merge(opts)
118
118
 
119
119
  set_options(options)
120
- raise "You must define a site for your Topic" if @site==nil
121
- raise "You must specify an existing Forum for your Topic" if @forum==nil
120
+ requires @site, @forum
122
121
  end
123
122
 
124
123
  alias :name :title
125
124
 
126
125
  def create
127
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
128
- forums unless @browser.title=~/Forums$/
126
+ open_my_site_by_name @site
127
+ forums
129
128
  on Forums do |forums|
130
129
  forums.new_topic_for_forum @forum
131
130
  end
@@ -138,15 +137,15 @@ class TopicObject
138
137
  end
139
138
 
140
139
  def edit opts={}
141
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
142
- forums unless @browser.title=~/Forums$/
140
+ open_my_site_by_name @site
141
+ forums
143
142
  on Forums do |forum|
144
143
  reset
145
144
  forum.topic_settings @title
146
145
  end
147
146
  on AddEditTopic do |edit|
148
- edit.title.set opts[:title] unless opts[:title] == nil
149
- edit.short_description.set opts[:short_description] unless opts[:short_description]==nil
147
+ edit.title.fit opts[:title]
148
+ edit.short_description.fit opts[:short_description]
150
149
  unless opts[:description] == nil
151
150
  edit.enter_source_text edit.editor, opts[:description]
152
151
  end
@@ -156,8 +155,8 @@ class TopicObject
156
155
  end
157
156
 
158
157
  def view
159
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
160
- forums unless @browser.title=~/Forums$/
158
+ open_my_site_by_name @site
159
+ forums
161
160
  on Forums do |forum|
162
161
  reset
163
162
  forum.open_topic @title
@@ -174,8 +173,8 @@ class TopicObject
174
173
  end
175
174
 
176
175
  def get_entity_info
177
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
178
- forums unless @browser.title=~/Forums$/
176
+ open_my_site_by_name @site
177
+ forums
179
178
  on Forums do |forums|
180
179
  forums.topic_settings @title
181
180
  end
@@ -0,0 +1,71 @@
1
+ class GlossaryTermObject
2
+
3
+ include Foundry
4
+ include DataFactory
5
+ include StringFactory
6
+ include Workflows
7
+
8
+ attr_accessor :term, :short_description, :long_description, :portfolio
9
+
10
+ def initialize(browser, opts={})
11
+ @browser = browser
12
+
13
+ defaults = {
14
+ :term=>random_alphanums,
15
+ :short_description=>random_alphanums,
16
+ :long_description=>random_alphanums
17
+ }
18
+ options = defaults.merge(opts)
19
+
20
+ set_options(options)
21
+ requires @portfolio
22
+ end
23
+
24
+ def create
25
+ open_my_site_by_name @portfolio
26
+ glossary
27
+ on Glossary do |list|
28
+ list.add
29
+ end
30
+ on AddEditTerm do |term|
31
+ term.term.set @term
32
+ term.short_description.set @short_description
33
+ term.long_description=@long_description
34
+ term.add_term
35
+ end
36
+ end
37
+
38
+ def edit opts={}
39
+ open_my_site_by_name @portfolio
40
+ glossary
41
+ on Glossary do |list|
42
+ list.edit @term
43
+ end
44
+ on AddEditTerm do |term|
45
+ term.term.fit opts[:term]
46
+ term.short_description.fit opts[:short_description]
47
+ term.long_description=opts[:long_description] unless opts[:long_description]==nil
48
+ term.save_changes
49
+ end
50
+ set_options(opts)
51
+ end
52
+
53
+ def open
54
+ open_my_site_by_name @portfolio
55
+ glossary
56
+ on Glossary do |list|
57
+ list.open @term
58
+ end
59
+ end
60
+
61
+ def delete
62
+ open_my_site_by_name @portfolio
63
+ glossary
64
+ on Glossary do |list|
65
+ list.delete @term
66
+ end
67
+ end
68
+
69
+ end
70
+
71
+
@@ -21,8 +21,8 @@ class ModuleObject
21
21
  alias :name :title
22
22
 
23
23
  def create
24
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
25
- lessons unless @browser.title=~/Lessons$/
24
+ open_my_site_by_name @site
25
+ lessons
26
26
  reset
27
27
  on_page Lessons do |page|
28
28
  page.add_module
@@ -74,8 +74,8 @@ class ContentSectionObject
74
74
  alias :name :title
75
75
 
76
76
  def create
77
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
78
- lessons unless @browser.title=~/Lessons$/
77
+ open_my_site_by_name @site
78
+ lessons
79
79
  reset
80
80
  on_page Lessons do |page|
81
81
  page.open_lesson @module
@@ -89,12 +89,13 @@ class ContentSectionObject
89
89
  @modality.each do |content|
90
90
  page.send(content)
91
91
  end
92
- page.content_type.select @content_type unless @content_type==nil
92
+ page.content_type.fit @content_type
93
93
  end
94
94
 
95
95
  on AddEditContentSection do |page| # Note we are reinstantiating the class here because of
96
96
  # an issue with Selenium Webdriver throwing a
97
97
  # WeakReference error, given the partial page reload.
98
+ # TODO: Figure out if there's a better solution for this
98
99
  case @content_type
99
100
  when "Compose content with editor"
100
101
  page.enter_source_text page.content_editor, @editor_content
@@ -135,16 +136,16 @@ class ContentSectionObject
135
136
  end
136
137
 
137
138
  def edit opts={}
138
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
139
- lessons unless @browser.title=~/Lessons$/
139
+ open_my_site_by_name @site
140
+ lessons
140
141
  reset
141
142
  on Lessons do |list|
142
143
  list.check_section @title
143
144
  list.edit
144
145
  end
145
146
  on AddEditContentSection do |edit|
146
- edit.title.set opts[:title] unless opts[:title]==nil
147
- edit.instructions.set opts[:instructions] unless opts[:instructions]==nil
147
+ edit.title.fit opts[:title]
148
+ edit.instructions.fit opts[:instructions]
148
149
  if opts[:modality].class==Array
149
150
  opts[:modality].each do |item|
150
151
  edit.send(item)
@@ -0,0 +1,142 @@
1
+ class MatrixObject
2
+
3
+ include Foundry
4
+ include DataFactory
5
+ include StringFactory
6
+ include Workflows
7
+
8
+ attr_accessor :portfolio, :title, :description, :columns, :rows, :status, :cells
9
+
10
+ def initialize(browser, opts={})
11
+ @browser = browser
12
+
13
+ defaults = {
14
+ :title=>random_alphanums,
15
+ :description=>random_alphanums,
16
+ :columns=>[
17
+ {:name=>random_alphanums, :bg_color=>random_hex_color, :font_color=>random_hex_color},
18
+ {:name=>random_alphanums, :bg_color=>random_hex_color, :font_color=>random_hex_color},
19
+ {:name=>random_alphanums, :bg_color=>random_hex_color, :font_color=>random_hex_color}
20
+ ],
21
+ :rows=>[
22
+ {:name=>random_alphanums, :bg_color=>random_hex_color, :font_color=>random_hex_color},
23
+ {:name=>random_alphanums, :bg_color=>random_hex_color, :font_color=>random_hex_color},
24
+ {:name=>random_alphanums, :bg_color=>random_hex_color, :font_color=>random_hex_color}
25
+ ],
26
+ :cells=>[]
27
+ }
28
+ options = defaults.merge(opts)
29
+ set_options(options)
30
+ requires @portfolio
31
+
32
+ end
33
+
34
+ def create
35
+ open_my_site_by_name @portfolio
36
+ matrices
37
+ on Matrices do |list|
38
+ list.add
39
+ end
40
+ on AddEditMatrix do |add|
41
+ add.title.set @title
42
+
43
+ # TODO Add filling in the non-essential fields.
44
+
45
+ end
46
+ @columns.each do |column|
47
+ on AddEditMatrix do |add|
48
+ add.add_column
49
+ end
50
+ on AddEditColumn do |add|
51
+ add.name.set column[:name]
52
+ add.background_color.set column[:bg_color]
53
+ add.font_color.set column[:font_color]
54
+ add.update
55
+ end
56
+ end
57
+ @rows.each do |row|
58
+ on AddEditMatrix do |add|
59
+ add.add_row
60
+ end
61
+ on AddEditRow do |add|
62
+ add.name.set row[:name]
63
+ add.background_color.set row[:bg_color]
64
+ add.font_color.set row[:font_color]
65
+ add.update
66
+ end
67
+ end
68
+ on AddEditMatrix do |add|
69
+ add.save_changes
70
+ end
71
+ on EditMatrixCells do |matrix|
72
+ matrix.return_to_list
73
+ end
74
+ end
75
+
76
+ def edit opts={}
77
+
78
+ set_options(opts)
79
+ end
80
+
81
+ def view
82
+
83
+ end
84
+
85
+ def delete
86
+
87
+ end
88
+
89
+ def publish
90
+
91
+ end
92
+
93
+ def export
94
+
95
+ end
96
+
97
+ end
98
+
99
+ class CellObject
100
+
101
+ include Foundry
102
+ include DataFactory
103
+ include StringFactory
104
+ include Workflows
105
+
106
+ attr_accessor :title, :instructions, :rationale, :examples, :matrix, :row, :column, :id
107
+
108
+ def initialize(browser, opts={})
109
+ @browser = browser
110
+
111
+ defaults = {
112
+ :title=>random_alphanums,
113
+ :instructions=>random_alphanums,
114
+ :rationale=>random_alphanums,
115
+ :examples=>random_alphanums
116
+ }
117
+ options = defaults.merge(opts)
118
+
119
+ set_options(options)
120
+ requires @matrix, @row, @column
121
+ end
122
+
123
+ def create
124
+ #:id=>cell.html[/(?<=hrefViewCell\(\').+(?=')/]
125
+ end
126
+
127
+ def edit opts={}
128
+
129
+ set_options(opts)
130
+ end
131
+
132
+ def view
133
+
134
+ end
135
+
136
+ def delete
137
+
138
+ end
139
+
140
+ end
141
+
142
+
@@ -21,8 +21,8 @@ class MessageObject
21
21
  end
22
22
 
23
23
  def create
24
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
25
- messages unless @browser.title=~/Messages$/
24
+ open_my_site_by_name @site
25
+ messages
26
26
  end
27
27
 
28
28
  alias compose create
@@ -22,8 +22,8 @@ class PollObject
22
22
  end
23
23
 
24
24
  def create
25
- open_my_site_by_name @site unless @browser.title=~/#{@site}/
26
- polls unless @browser.title=~/Polls$/
25
+ open_my_site_by_name @site
26
+ polls
27
27
  on Polls do |polls|
28
28
  polls.add
29
29
  end
@@ -0,0 +1,120 @@
1
+ class PortfolioSiteObject
2
+
3
+ include Foundry
4
+ include DataFactory
5
+ include DateFactory
6
+ include StringFactory
7
+ include Workflows
8
+
9
+ attr_accessor :title, :description, :short_description, :contact_email, :site_email,
10
+ :site_contact_name, :access, :default_role, :creator, :status,
11
+ :creation_date, :id, :participants
12
+
13
+ def initialize(browser, opts={})
14
+ @browser = browser
15
+
16
+ defaults = {
17
+ :title=>random_alphanums,
18
+ :site_email=>random_nicelink(32),
19
+ :participants=>{}
20
+ }
21
+ options = defaults.merge(opts)
22
+
23
+ set_options(options)
24
+ requires @title
25
+ end
26
+
27
+ def create
28
+ my_workspace
29
+ site_setup
30
+ on_page SiteSetup do |page|
31
+ page.new
32
+ end
33
+ on SiteType do |page|
34
+ # Select the Portfolio Site radio button
35
+ page.portfolio_site.set
36
+ page.continue
37
+ end
38
+ on PortfolioSiteInfo do |info|
39
+ info.title.set @title
40
+ info.description=@description unless @description==nil
41
+ info.short_description.fit @short_description
42
+ #TODO Add support for other fields here
43
+ info.continue
44
+ end
45
+ on PortfolioSiteTools do |tools|
46
+ # TODO Add support for individual tool selection and reuse of material from other sites
47
+ tools.all_tools.set
48
+ tools.continue
49
+ end
50
+ on PortfolioConfigureToolOptions do |options|
51
+ options.email.set @site_email
52
+ # TODO Add support for other fields here
53
+ options.continue
54
+ end
55
+ on SiteAccess do |access|
56
+ # TODO Support non-default selections here
57
+ access.continue
58
+ end
59
+ on ConfirmSiteSetup do |confirm|
60
+ if confirm.request_button.present?
61
+ confirm.request_site
62
+ else
63
+ confirm.create_site
64
+ end
65
+ end
66
+ # TODO: Add definition of @participants variable here
67
+ # Create a string that will match the new Site's "creation date" string
68
+ @creation_date = right_now[:sakai]
69
+
70
+ on SiteSetup do |site_setup|
71
+ site_setup.search(Regexp.escape(@title))
72
+
73
+ # Get the site id for storage
74
+ @browser.frame(:class=>"portletMainIframe").link(:href=>/xsl-portal.site/, :index=>0).href =~ /(?<=\/site\/).+/
75
+ @id = $~.to_s
76
+ end
77
+ end
78
+
79
+ def edit opts={}
80
+
81
+ set_options(opts)
82
+ end
83
+
84
+ def view
85
+
86
+ end
87
+
88
+ def delete
89
+
90
+ end
91
+
92
+ def add_official_participants(role, *participants)
93
+ list_of_ids=participants.join("\n")
94
+ open_my_site_by_name @title
95
+ site_editor
96
+ on SiteEditor do |site|
97
+ site.add_participants
98
+ end
99
+ on SiteSetupAddParticipants do |add|
100
+ add.official_participants.set list_of_ids
101
+ add.continue
102
+ end
103
+ on SiteSetupChooseRole do |choose|
104
+ choose.radio_button(role).set
105
+ choose.continue
106
+ end
107
+ on SiteSetupParticipantEmail do |send|
108
+ send.continue
109
+ end
110
+ on SiteSetupParticipantConfirm do |confirm|
111
+ confirm.finish
112
+ end
113
+ if @participants.has_key?(role)
114
+ @participants[role].insert(-1, participants).flatten!
115
+ else
116
+ @participants.store(role, participants)
117
+ end
118
+ end
119
+
120
+ end