sambal-cle 0.1.3
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.
- data/README.md +4 -0
- data/lib/sambal-cle/base_page.rb +20 -0
- data/lib/sambal-cle/core-ext.rb +90 -0
- data/lib/sambal-cle/data_objects/announcement.rb +82 -0
- data/lib/sambal-cle/data_objects/assessment.rb +32 -0
- data/lib/sambal-cle/data_objects/assignment.rb +205 -0
- data/lib/sambal-cle/data_objects/blog.rb +46 -0
- data/lib/sambal-cle/data_objects/blogger.rb +49 -0
- data/lib/sambal-cle/data_objects/chat_room.rb +54 -0
- data/lib/sambal-cle/data_objects/event.rb +89 -0
- data/lib/sambal-cle/data_objects/forum.rb +212 -0
- data/lib/sambal-cle/data_objects/lesson.rb +185 -0
- data/lib/sambal-cle/data_objects/message.rb +57 -0
- data/lib/sambal-cle/data_objects/poll.rb +74 -0
- data/lib/sambal-cle/data_objects/resource.rb +209 -0
- data/lib/sambal-cle/data_objects/site.rb +295 -0
- data/lib/sambal-cle/data_objects/syllabus.rb +73 -0
- data/lib/sambal-cle/data_objects/web_content_tool.rb +51 -0
- data/lib/sambal-cle/data_objects/wiki.rb +63 -0
- data/lib/sambal-cle/date_makers.rb +118 -0
- data/lib/sambal-cle/gem_ext.rb +23 -0
- data/lib/sambal-cle/page_helper.rb +22 -0
- data/lib/sambal-cle/page_maker.rb +48 -0
- data/lib/sambal-cle/page_objects/account.rb +111 -0
- data/lib/sambal-cle/page_objects/aliases.rb +43 -0
- data/lib/sambal-cle/page_objects/announcements.rb +190 -0
- data/lib/sambal-cle/page_objects/assessments.rb +874 -0
- data/lib/sambal-cle/page_objects/assignments.rb +770 -0
- data/lib/sambal-cle/page_objects/basic_lti.rb +6 -0
- data/lib/sambal-cle/page_objects/blogger.rb +205 -0
- data/lib/sambal-cle/page_objects/blogs.rb +60 -0
- data/lib/sambal-cle/page_objects/calendar.rb +330 -0
- data/lib/sambal-cle/page_objects/calendar_summary.rb +1 -0
- data/lib/sambal-cle/page_objects/chat_room.rb +22 -0
- data/lib/sambal-cle/page_objects/drop_box.rb +9 -0
- data/lib/sambal-cle/page_objects/email_archive.rb +22 -0
- data/lib/sambal-cle/page_objects/entity_picker.rb +62 -0
- data/lib/sambal-cle/page_objects/evaluations.rb +158 -0
- data/lib/sambal-cle/page_objects/feedback.rb +36 -0
- data/lib/sambal-cle/page_objects/forms.rb +120 -0
- data/lib/sambal-cle/page_objects/forums.rb +254 -0
- data/lib/sambal-cle/page_objects/glossary.rb +117 -0
- data/lib/sambal-cle/page_objects/gradebook.rb +29 -0
- data/lib/sambal-cle/page_objects/gradebook2.rb +17 -0
- data/lib/sambal-cle/page_objects/home.rb +36 -0
- data/lib/sambal-cle/page_objects/jforums.rb +444 -0
- data/lib/sambal-cle/page_objects/job_scheduler.rb +121 -0
- data/lib/sambal-cle/page_objects/lessons.rb +361 -0
- data/lib/sambal-cle/page_objects/login.rb +28 -0
- data/lib/sambal-cle/page_objects/matrix.rb +241 -0
- data/lib/sambal-cle/page_objects/media_gallery.rb +13 -0
- data/lib/sambal-cle/page_objects/messages.rb +622 -0
- data/lib/sambal-cle/page_objects/my_workspace.rb +44 -0
- data/lib/sambal-cle/page_objects/news.rb +8 -0
- data/lib/sambal-cle/page_objects/podcasts.rb +27 -0
- data/lib/sambal-cle/page_objects/polls.rb +69 -0
- data/lib/sambal-cle/page_objects/portfolio_templates.rb +161 -0
- data/lib/sambal-cle/page_objects/portfolios.rb +162 -0
- data/lib/sambal-cle/page_objects/post_em.rb +1 -0
- data/lib/sambal-cle/page_objects/profile.rb +51 -0
- data/lib/sambal-cle/page_objects/profile2.rb +344 -0
- data/lib/sambal-cle/page_objects/public_search.rb +61 -0
- data/lib/sambal-cle/page_objects/realms.rb +19 -0
- data/lib/sambal-cle/page_objects/resources.rb +326 -0
- data/lib/sambal-cle/page_objects/resources_roster.rb +0 -0
- data/lib/sambal-cle/page_objects/rosters.rb +70 -0
- data/lib/sambal-cle/page_objects/rwiki.rb +34 -0
- data/lib/sambal-cle/page_objects/search.rb +34 -0
- data/lib/sambal-cle/page_objects/sections.rb +295 -0
- data/lib/sambal-cle/page_objects/single_user.rb +1 -0
- data/lib/sambal-cle/page_objects/site_setup.rb +621 -0
- data/lib/sambal-cle/page_objects/site_statistics.rb +1 -0
- data/lib/sambal-cle/page_objects/sites.rb +255 -0
- data/lib/sambal-cle/page_objects/styles.rb +74 -0
- data/lib/sambal-cle/page_objects/syllabus.rb +166 -0
- data/lib/sambal-cle/page_objects/user_membership.rb +57 -0
- data/lib/sambal-cle/page_objects/users.rb +88 -0
- data/lib/sambal-cle/randomizers.rb +117 -0
- data/lib/sambal-cle/rich_text.rb +38 -0
- data/lib/sambal-cle/utilities.rb +31 -0
- data/lib/sambal-cle/workflows.rb +223 -0
- data/lib/sambal-cle.rb +31 -0
- data/sambal-cle.gemspec +14 -0
- data/test/add_assignment_to_calendar_spec.rb +86 -0
- data/test/assignment_announcements_spec.rb +71 -0
- data/test/assignment_gradebook_spec.rb +98 -0
- data/test/config.yml.template +4 -0
- data/test/directory.yml.template +123 -0
- data/test/duplicate_site_spec.rb +244 -0
- metadata +167 -0
@@ -0,0 +1,62 @@
|
|
1
|
+
class EntityPicker < BasePage
|
2
|
+
|
3
|
+
def view_assignment_details(title)
|
4
|
+
unless self.div(:class=>"title", :text=>title).present?
|
5
|
+
self.link(:text=>"Assignments").wait_until_present(5)
|
6
|
+
self.link(:text=>"Assignments").click
|
7
|
+
self.link(:text=>title).wait_until_present(15)
|
8
|
+
self.link(:text=>title).click
|
9
|
+
end
|
10
|
+
self.div(:class=>"title", :text=>title).wait_until_present(5)
|
11
|
+
end
|
12
|
+
|
13
|
+
def select_assignment(title)
|
14
|
+
view_assignment_details(title)
|
15
|
+
self.link(:text=>"Select this item").click
|
16
|
+
self.window(:index=>0).use
|
17
|
+
self.frame(:index=>2).button(:id=>"btnOk").click
|
18
|
+
end
|
19
|
+
|
20
|
+
def close_picker
|
21
|
+
self.window.close
|
22
|
+
self.window(:index=>0).use
|
23
|
+
self.frame(:index=>2).button(:id=>"btnCancel").click
|
24
|
+
end
|
25
|
+
|
26
|
+
def view_forum_details(title)
|
27
|
+
unless self.span(:class=>"entity-item-label icon-sakai-entity-forum", :text=>title).present?
|
28
|
+
self.link(:class=>/entity-item-label icon-sakai-entity-forum/).wait_until_present(10)
|
29
|
+
self.link(:class=>/entity-item-label icon-sakai-entity-forum/).click
|
30
|
+
self.link(:text=>title).wait_until_present(10)
|
31
|
+
self.link(:text=>title).click
|
32
|
+
end
|
33
|
+
self.div(:class=>"title", :text=>title).wait_until_present
|
34
|
+
end
|
35
|
+
|
36
|
+
def view_topic_details(forum, topic)
|
37
|
+
unless self.span(:class=>"entity-item-label icon-sakai-entity-forum", :text=>title).present?
|
38
|
+
self.link(:class=>/entity-item-label icon-sakai-entity-forum/).wait_until_present(10)
|
39
|
+
self.link(:class=>/entity-item-label icon-sakai-entity-forum/).click
|
40
|
+
self.link(:text=>forum).wait_until_present(10)
|
41
|
+
self.link(:text=>forum).click
|
42
|
+
self.link(:text=>topic).wait_until_present(10)
|
43
|
+
self.link(:text=>topic).click
|
44
|
+
end
|
45
|
+
self.div(:class=>"title", :text=>topic).wait_until_present(10)
|
46
|
+
end
|
47
|
+
|
48
|
+
value(:url) { |b| b.td(text: "url").parent.td(class: "attrValue").text }
|
49
|
+
value(:portal_url) { |b| b.td(text: "portalURL").parent.td(class: "attrValue").text }
|
50
|
+
value(:direct_link) { |b| b.link(text: "Select this item").href }
|
51
|
+
value(:retract_time) { |b| b.td(text: "Retract Time").parent.td(class: "attrValue").text }
|
52
|
+
value(:time_due) { |b| b.td(text: "Time Due").parent.td(class: "attrValue").text }
|
53
|
+
value(:time_modified) { |b| b.td(text: "Time Modified").parent.td(class: "attrValue").text }
|
54
|
+
value(:description) { |b| b.td(text: "Description").parent.td(class: "attrValue").text }
|
55
|
+
value(:time_created) { |b| b.td(text: "Time Created").parent.td(class: "attrValue").text }
|
56
|
+
value(:date_created) { |b| b.td(text: "Date Created").parent.td(class: "attrValue").text }
|
57
|
+
value(:author) { |b| b.td(text: "Author").parent.td(class: "attrValue").text }
|
58
|
+
value(:moderated) { |b| b.td(text: "Moderated").parent.td(class: "attrValue").text }
|
59
|
+
value(:modified_by) { |b| b.td(text: "Modified By").parent.td(class: "attrValue").text }
|
60
|
+
value(:date_modified) { |b| b.td(text: "Date Modified").parent.td(class: "attrValue").text }
|
61
|
+
|
62
|
+
end
|
@@ -0,0 +1,158 @@
|
|
1
|
+
#================
|
2
|
+
# Evaluation System Pages
|
3
|
+
#================
|
4
|
+
|
5
|
+
# The "Evaluations Dashboard"
|
6
|
+
class EvaluationSystem < BasePage
|
7
|
+
|
8
|
+
frame_element
|
9
|
+
|
10
|
+
# MyTemplates
|
11
|
+
action(:my_templates) { |b| b.frm.link(:text=>"My Templates").click }
|
12
|
+
|
13
|
+
# AddTemplateTitle
|
14
|
+
action(:add_template) { |b| b.frm.link(:text=>"Add Template").click }
|
15
|
+
|
16
|
+
# TakeEvaluation
|
17
|
+
def take_evaluation(evaluation_name)
|
18
|
+
frm.div(:class=>"summaryBox").table(:text=>/#{Regexp.escape(evaluation_name)}/).link.click
|
19
|
+
TakeEvaluation.new(@browser)
|
20
|
+
end
|
21
|
+
|
22
|
+
def status_of(evaluation_name)
|
23
|
+
frm.div(:class=>"summaryBox").table(:text=>/#{Regexp.escape(evaluation_name)}/)[1][1].text
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
#
|
29
|
+
class AddTemplateTitle < BasePage
|
30
|
+
|
31
|
+
frame_element
|
32
|
+
|
33
|
+
def save
|
34
|
+
frm.button(:value=>"Save").click
|
35
|
+
EditTemplate.new(@browser)
|
36
|
+
end
|
37
|
+
|
38
|
+
element(:title) { |b| b.frm.text_field(:id=>"title") }
|
39
|
+
element(:description) { |b| b.frm.text_area(:id=>"description") }
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
#
|
45
|
+
class EditTemplate < BasePage
|
46
|
+
|
47
|
+
frame_element
|
48
|
+
|
49
|
+
def item_text=(text)
|
50
|
+
frm.frame(:id, "item-text___Frame").td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
|
51
|
+
end
|
52
|
+
|
53
|
+
action(:new_evaluation) { |b| b.frm.link(:text=>"New evaluation").click }
|
54
|
+
|
55
|
+
def add
|
56
|
+
frm.button(:value=>"Add").click
|
57
|
+
frm.frame(:id, "item-text___Frame").td(:id, "xEditingArea").wait_until_present
|
58
|
+
end
|
59
|
+
|
60
|
+
def save_item
|
61
|
+
frm.button(:value=>"Save item").click
|
62
|
+
frm.link(:text=>"New evaluation").wait_until_present
|
63
|
+
EditTemplate.new @browser
|
64
|
+
end
|
65
|
+
|
66
|
+
element(:item) { |b| b.frm.select_list(:id=>"add-item-control::add-item-classification-selection").click }
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
#
|
71
|
+
class NewEvaluation < BasePage
|
72
|
+
|
73
|
+
include FCKEditor
|
74
|
+
frame_element
|
75
|
+
|
76
|
+
expected_element :editor
|
77
|
+
|
78
|
+
element(:editor) { |b| b.frm.frame(:id, "instructions:1:input___Frame") }
|
79
|
+
|
80
|
+
def continue_to_settings
|
81
|
+
frm.button(:value=>"Continue to Settings").click
|
82
|
+
EvaluationSettings.new(@browser)
|
83
|
+
end
|
84
|
+
|
85
|
+
def instructions=(text)
|
86
|
+
frm.frame(:id, "instructions:1:input___Frame").td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
|
87
|
+
end
|
88
|
+
|
89
|
+
element(:title) { |b| b.frm.text_field(:id=>"title") }
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
|
94
|
+
#
|
95
|
+
class EvaluationSettings < BasePage
|
96
|
+
|
97
|
+
frame_element
|
98
|
+
|
99
|
+
def continue_to_assign_to_courses
|
100
|
+
frm.button(:value=>"Continue to Assign to Courses").click
|
101
|
+
EditEvaluationAssignment.new(@browser)
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
|
108
|
+
#
|
109
|
+
class EditEvaluationAssignment < BasePage
|
110
|
+
|
111
|
+
frame_element
|
112
|
+
|
113
|
+
def save_assigned_groups
|
114
|
+
frm.button(:value=>"Save Assigned Groups").click
|
115
|
+
ConfirmEvaluation.new(@browser)
|
116
|
+
end
|
117
|
+
|
118
|
+
def check_group(title)
|
119
|
+
frm.table(:class=>"listHier lines nolines").wait_until_present
|
120
|
+
frm.table(:class=>"listHier lines nolines").row(:text=>/#{Regexp.escape(title)}/).checkbox(:name=>"selectedGroupIDs").set
|
121
|
+
end
|
122
|
+
|
123
|
+
action(:assign_to_evaluation_groups) { |b| b.frm.link(:text=>"Assign to Evaluation Groups").click }
|
124
|
+
end
|
125
|
+
|
126
|
+
|
127
|
+
#
|
128
|
+
class ConfirmEvaluation < BasePage
|
129
|
+
|
130
|
+
frame_element
|
131
|
+
|
132
|
+
def done
|
133
|
+
frm.button(:value=>"Done").click
|
134
|
+
MyEvaluations.new(@browser)
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
|
139
|
+
#
|
140
|
+
class MyEvaluations < BasePage
|
141
|
+
|
142
|
+
frame_element
|
143
|
+
|
144
|
+
|
145
|
+
end
|
146
|
+
|
147
|
+
#
|
148
|
+
class TakeEvaluation < BasePage
|
149
|
+
|
150
|
+
frame_element
|
151
|
+
|
152
|
+
def submit_evaluation
|
153
|
+
frm.button(:value=>"Submit Evaluation").click
|
154
|
+
EvaluationSystem.new(@browser)
|
155
|
+
end
|
156
|
+
|
157
|
+
|
158
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#================
|
2
|
+
# Feedback pages
|
3
|
+
#================
|
4
|
+
|
5
|
+
#
|
6
|
+
class Feedback < BasePage
|
7
|
+
|
8
|
+
frame_element
|
9
|
+
|
10
|
+
def add
|
11
|
+
frm.link(:text=>"Add").click
|
12
|
+
AddUpdateFeedback.new(@browser)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Returns an array containing the titles
|
16
|
+
# of the Feedback items listed on the page.
|
17
|
+
def feedback_items
|
18
|
+
items = []
|
19
|
+
frm.table(:class=>"listHier lines nolines").rows.each_with_index do |row, index|
|
20
|
+
next if index == 0
|
21
|
+
items << row[0].text
|
22
|
+
end
|
23
|
+
return items
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
#
|
29
|
+
class AddUpdateFeedback < BasePage
|
30
|
+
|
31
|
+
frame_element
|
32
|
+
|
33
|
+
|
34
|
+
element(:title) { |b| b.frm.text_field(:id=>"_idJsp1:title") }
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
#================
|
2
|
+
# Forms Pages - Portfolio Site
|
3
|
+
#================
|
4
|
+
|
5
|
+
# The topmost page of Forms in a Portfolio Site.
|
6
|
+
class Forms < BasePage
|
7
|
+
|
8
|
+
frame_element
|
9
|
+
|
10
|
+
# Clicks the Add button and instantiates
|
11
|
+
# the AddForm Class.
|
12
|
+
def add
|
13
|
+
frm.link(:text=>"Add").click
|
14
|
+
AddForm.new(@browser)
|
15
|
+
end
|
16
|
+
|
17
|
+
# Clicks the Publish buton for the specified
|
18
|
+
# Form, then instantiates the PublishForm Class.
|
19
|
+
def publish(form_name)
|
20
|
+
frm.table(:class=>"listHier lines nolines").tr(:text, /#{Regexp.escape(form_name)}/).link(:text=>/Publish/).click
|
21
|
+
PublishForm.new(@browser)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Clicks the Import button, then
|
25
|
+
# instantiates the ImportForms Class.
|
26
|
+
def import
|
27
|
+
frm.link(:text=>"Import").click
|
28
|
+
ImportForms.new(@browser)
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
class ImportForms < BasePage
|
34
|
+
|
35
|
+
frame_element
|
36
|
+
|
37
|
+
def import
|
38
|
+
frm.button(:value=>"Import").click
|
39
|
+
Forms.new(@browser)
|
40
|
+
end
|
41
|
+
|
42
|
+
def select_file
|
43
|
+
frm.link(:text=>"Select File...").click
|
44
|
+
AttachFileFormImport.new(@browser)
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
class AddForm < BasePage
|
50
|
+
|
51
|
+
frame_element
|
52
|
+
|
53
|
+
def select_schema_file
|
54
|
+
frm.link(:text=>"Select Schema File").click
|
55
|
+
SelectSchemaFile.new(@browser)
|
56
|
+
end
|
57
|
+
|
58
|
+
def instruction=(text)
|
59
|
+
frm.frame(:id, "instruction___Frame").td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
|
60
|
+
end
|
61
|
+
|
62
|
+
def add_form
|
63
|
+
frm.button(:value=>"Add Form").click
|
64
|
+
Forms.new(@browser)
|
65
|
+
end
|
66
|
+
|
67
|
+
element(:name) { |b| b.frm.text_field(:id=>"description-id") }
|
68
|
+
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
class SelectSchemaFile < BasePage
|
73
|
+
|
74
|
+
frame_element
|
75
|
+
|
76
|
+
def show_other_sites
|
77
|
+
frm.link(:title=>"Show other sites").click
|
78
|
+
SelectSchemaFile.new(@browser)
|
79
|
+
end
|
80
|
+
|
81
|
+
def open_folder(name)
|
82
|
+
frm.link(:text=>name).click
|
83
|
+
SelectSchemaFile.new(@browser)
|
84
|
+
end
|
85
|
+
|
86
|
+
def select_file(filename)
|
87
|
+
index = file_names.index(filename)
|
88
|
+
frm.table(:class=>"listHier lines").tr(:text, /#{Regexp.escape(filename)}/).link(:text=>"Select").click
|
89
|
+
SelectSchemaFile.new(@browser)
|
90
|
+
end
|
91
|
+
|
92
|
+
def file_names #FIXME
|
93
|
+
names = []
|
94
|
+
resources_table = frm.table(:class=>"listHier lines")
|
95
|
+
1.upto(resources_table.rows.size-1) do |x|
|
96
|
+
if resources_table[x][0].link.exist? && resources_table[x][0].a(:index=>0).title=~/File Type/
|
97
|
+
names << resources_table[x][0].text
|
98
|
+
end
|
99
|
+
end
|
100
|
+
return names
|
101
|
+
end
|
102
|
+
|
103
|
+
def continue
|
104
|
+
frm.button(:value=>"Continue").click
|
105
|
+
frm.frame(:id, "instruction___Frame").td(:id, "xEditingArea").wait_until_present
|
106
|
+
AddForm.new(@browser)
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
110
|
+
|
111
|
+
class PublishForm < BasePage
|
112
|
+
|
113
|
+
frame_element
|
114
|
+
|
115
|
+
def yes
|
116
|
+
frm.button(:value=>"Yes").click
|
117
|
+
Forms.new(@browser)
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
@@ -0,0 +1,254 @@
|
|
1
|
+
class Forums < BasePage
|
2
|
+
|
3
|
+
frame_element
|
4
|
+
|
5
|
+
# Pass this method a string that matches
|
6
|
+
# the title of a Forum on the page, it returns
|
7
|
+
# True if the specified forum row has "DRAFT" in it.
|
8
|
+
def draft?(title)
|
9
|
+
frm.table(:id=>"msgForum:forums").row(:text=>/#{Regexp.escape(title)}/).span(:text=>"DRAFT").exist?
|
10
|
+
end
|
11
|
+
|
12
|
+
action(:new_forum) { |b| b.frm.link(:text=>"New Forum").click }
|
13
|
+
|
14
|
+
# AddEditTopic
|
15
|
+
def new_topic_for_forum(name)
|
16
|
+
index = forum_titles.index(name)
|
17
|
+
frm.link(:text=>"New Topic", :index=>index).click
|
18
|
+
end
|
19
|
+
|
20
|
+
# OrganizeForums
|
21
|
+
action(:organize) { |b| b.frm.link(:text=>"Organize").click }
|
22
|
+
|
23
|
+
# ForumTemplateSettings
|
24
|
+
action(:template_settings) { |b| b.frm.link(:text=>"Template Settings").click }
|
25
|
+
|
26
|
+
element(:forums_table) { |b| b.frm.div(:class=>"portletBody").table(:id=>"msgForum:forums") }
|
27
|
+
|
28
|
+
def forum_titles
|
29
|
+
titles = []
|
30
|
+
title_links = frm.div(:class=>"portletBody").links.find_all { |link| link.class_name=="title" && link.id=="" }
|
31
|
+
title_links.each { |link| titles << link.text }
|
32
|
+
return titles
|
33
|
+
end
|
34
|
+
|
35
|
+
def topic_titles
|
36
|
+
titles = []
|
37
|
+
title_links = frm.div(:class=>"portletBody").links.find_all { |link| link.class_name == "title" && link.id != "" }
|
38
|
+
title_links.each { |link| titles << link.text }
|
39
|
+
return titles
|
40
|
+
end
|
41
|
+
|
42
|
+
# EditForum
|
43
|
+
def forum_settings(name)
|
44
|
+
index = forum_titles.index(name)
|
45
|
+
frm.link(:text=>"Forum Settings", :index=>index).click
|
46
|
+
end
|
47
|
+
|
48
|
+
# AddEditTopic
|
49
|
+
def topic_settings(name)
|
50
|
+
index = topic_titles.index(name)
|
51
|
+
frm.link(:text=>"Topic Settings", :index=>index).click
|
52
|
+
end
|
53
|
+
|
54
|
+
# EditForum
|
55
|
+
def delete_forum(name)
|
56
|
+
index = forum_titles.index(name)
|
57
|
+
frm.link(:id=>/msgForum:forums:\d+:delete/,:text=>"Delete", :index=>index).click
|
58
|
+
end
|
59
|
+
|
60
|
+
# AddEditTopic
|
61
|
+
def delete_topic(name)
|
62
|
+
index = topic_titles.index(name)
|
63
|
+
frm.link(:id=>/topics:\d+:delete_confirm/, :text=>"Delete", :index=>index).click
|
64
|
+
end
|
65
|
+
|
66
|
+
def open_forum(title)
|
67
|
+
frm.link(:text=>/#{title}/).wait_until_present(7)
|
68
|
+
frm.link(:text=>/#{title}/).click
|
69
|
+
end
|
70
|
+
alias open_topic open_forum
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
class TopicPage < BasePage
|
75
|
+
|
76
|
+
frame_element
|
77
|
+
|
78
|
+
# ComposeForumMessage
|
79
|
+
action(:post_new_thread) { |b| b.frm.link(:text=>"Post New Thread").click }
|
80
|
+
|
81
|
+
def thread_titles
|
82
|
+
titles = []
|
83
|
+
message_table = frm.table(:id=>"msgForum:messagesInHierDataTable")
|
84
|
+
1.upto(message_table.rows.size-1) do |x|
|
85
|
+
titles << message_table[x][1].span(:class=>"firstChild").link(:index=>0).text
|
86
|
+
end
|
87
|
+
return titles
|
88
|
+
end
|
89
|
+
|
90
|
+
# ViewForumThread
|
91
|
+
def open_message(message_title)
|
92
|
+
frm.div(:class=>"portletBody").link(:text=>message_title).click
|
93
|
+
end
|
94
|
+
|
95
|
+
# TopicPage
|
96
|
+
action(:display_entire_message){ |b| b.frm.link(:text=>"Display Entire Message").click }
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
class ViewForumThread < BasePage
|
101
|
+
|
102
|
+
frame_element
|
103
|
+
|
104
|
+
# ComposeForumMessage
|
105
|
+
action(:reply_to_thread) { |b| b.frm.link(:text=>"Reply to Thread").click }
|
106
|
+
|
107
|
+
# ComposeForumMessage
|
108
|
+
# TODO: Figure out a better way to do this...
|
109
|
+
def reply_to_message(index)
|
110
|
+
frm.link(:text=>"Reply", :index=>(index.to_i - 1)).click
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
class ComposeForumMessage < BasePage
|
115
|
+
|
116
|
+
include FCKEditor
|
117
|
+
frame_element
|
118
|
+
|
119
|
+
expected_element :editor
|
120
|
+
|
121
|
+
# TopicPage, probably
|
122
|
+
action(:post_message) { |b| b.frm.button(:text=>"Post Message").click }
|
123
|
+
|
124
|
+
element(:editor) { |b| b.frm.frame(:id, "dfCompose:df_compose_body_inputRichText___Frame") }
|
125
|
+
|
126
|
+
def message=(text)
|
127
|
+
editor.td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
|
128
|
+
end
|
129
|
+
|
130
|
+
value(:reply_text) { |b| b.frame(:index=>1).div(:class=>"singleMessageReply").text }
|
131
|
+
|
132
|
+
action(:cancel) { |b| b.frm.button(:value=>"Cancel").click }
|
133
|
+
|
134
|
+
element(:title) { |b| b.frm.text_field(:id=>"dfCompose:df_compose_title") }
|
135
|
+
|
136
|
+
end
|
137
|
+
|
138
|
+
class ForumTemplateSettings < BasePage
|
139
|
+
|
140
|
+
frame_element
|
141
|
+
|
142
|
+
value(:page_title) { |b| b.frm.div(:class=>"portletBody").h3(:index=>0).text }
|
143
|
+
|
144
|
+
# Forums
|
145
|
+
action(:save) { |b| b.frm.button(:value=>"Save").click }
|
146
|
+
|
147
|
+
# Forums
|
148
|
+
action(:cancel) { |b| b.frm.button(:value=>"Cancel").click }
|
149
|
+
|
150
|
+
end
|
151
|
+
|
152
|
+
class OrganizeForums < BasePage
|
153
|
+
|
154
|
+
frame_element
|
155
|
+
|
156
|
+
# Forums
|
157
|
+
action(:save) { |b| b.frm.button(:value=>"Save").click }
|
158
|
+
|
159
|
+
# These are set to so that the user
|
160
|
+
# does not have to start the list at zero...
|
161
|
+
# TODO: Is there any chance there's a better way to do this? It's friggin' ugly!
|
162
|
+
def forum(index)
|
163
|
+
frm.select(:id, "revise:forums:#{index.to_i - 1}:forumIndex")
|
164
|
+
end
|
165
|
+
|
166
|
+
def topic(forumindex, topicindex)
|
167
|
+
frm.select(:id, "revise:forums:#{forumindex.to_i - 1}:topics:#{topicindex.to_i - 1}:topicIndex")
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
class EditForum < BasePage
|
172
|
+
|
173
|
+
include FCKEditor
|
174
|
+
frame_element
|
175
|
+
|
176
|
+
# Forums
|
177
|
+
action(:save) { |b| b.frm.button(:value=>"Save").click }
|
178
|
+
action(:cancel) { |b| b.frm.button(:value=>"Cancel").click }
|
179
|
+
|
180
|
+
# AddEditTopic
|
181
|
+
action(:save_and_add) { |b| b.frm.button(:value=>"Save Settings & Add Topic").click }
|
182
|
+
|
183
|
+
element(:editor) { |b| b.frm.div(:class=>"portletBody").frame(:id, "revise:df_compose_description_inputRichText___Frame") }
|
184
|
+
|
185
|
+
def description=(text)
|
186
|
+
editor.td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
|
187
|
+
end
|
188
|
+
|
189
|
+
#ForumsAddAttachments (or not, actually, now that I think of it)
|
190
|
+
action(:add_attachments) { |b| b.frm.button(:value=>/attachments/).click }
|
191
|
+
|
192
|
+
element(:title){ |b| b.frm.text_field(:id=>"revise:forum_title") }
|
193
|
+
element(:short_description){ |b| b.frm.text_field(:id=>"revise:forum_shortDescription") }
|
194
|
+
|
195
|
+
end
|
196
|
+
|
197
|
+
class AddEditTopic < BasePage
|
198
|
+
|
199
|
+
include FCKEditor
|
200
|
+
frame_element
|
201
|
+
|
202
|
+
@@table_index=0 # TODO: Seriously think about a better way to do this
|
203
|
+
|
204
|
+
def editor
|
205
|
+
frm.div(:class=>"portletBody").frame(:id, "revise:topic_description_inputRichText___Frame")
|
206
|
+
end
|
207
|
+
|
208
|
+
def description=(text)
|
209
|
+
editor.td(:id, "xEditingArea").frame(:index=>0).send_keys(text)
|
210
|
+
end
|
211
|
+
|
212
|
+
# Forums
|
213
|
+
action(:save) { |b| b.frm.button(:value=>"Save").click }
|
214
|
+
action(:cancel) { |b| b.frm.button(:value=>"Cancel").click }
|
215
|
+
|
216
|
+
action(:add_attachments) { |b| b.frm.button(:value=>/Add.+ttachment/).click }
|
217
|
+
|
218
|
+
def roles
|
219
|
+
roles=[]
|
220
|
+
options = frm.select(:id=>"revise:role").options.to_a
|
221
|
+
options.each { |option| roles << option.text }
|
222
|
+
return roles
|
223
|
+
end
|
224
|
+
|
225
|
+
def site_role=(role)
|
226
|
+
frm.select(:id=>"revise:role").select(role)
|
227
|
+
0.upto(frm.select(:id=>"revise:role").length - 1) do |x|
|
228
|
+
if frm.div(:class=>"portletBody").table(:class=>"permissionPanel jsfFormTable lines nolines", :index=>x).visible?
|
229
|
+
@@table_index = x
|
230
|
+
|
231
|
+
def permission_level=(value)
|
232
|
+
frm.select(:id=>"revise:perm:#{@@table_index}:level").select(value)
|
233
|
+
end
|
234
|
+
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
element(:title) { |b| b.frm.text_field(:id=>"revise:topic_title") }
|
240
|
+
element(:short_description) { |b| b.frm.text_field(:id=>"revise:topic_shortDescription") }
|
241
|
+
|
242
|
+
end
|
243
|
+
|
244
|
+
class ForumView < BasePage
|
245
|
+
|
246
|
+
frame_element
|
247
|
+
|
248
|
+
action(:view_full_description) { |b| b.frm.link(id: "msgForum:forum_extended_show").click }
|
249
|
+
action(:hide_full_description) { |b| b.frm.link(id: "msgForum:forum_extended_hide").click }
|
250
|
+
|
251
|
+
value(:short_description) { |b| b.frm.span(class: "shortDescription").text }
|
252
|
+
value(:description_html) { |b| b.frm.div(class: "toggle").div(class: "textPanel").html }
|
253
|
+
|
254
|
+
end
|