sambal-cle 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|