sakai-cle-test-api 0.0.7 → 0.0.9
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/lib/sakai-cle-test-api.rb +7 -2
- data/lib/sakai-cle-test-api/add_files.rb +198 -0
- data/lib/sakai-cle-test-api/admin_page_elements.rb +7 -3
- data/lib/sakai-cle-test-api/announcements.rb +274 -7
- data/lib/sakai-cle-test-api/assessments.rb +930 -27
- data/lib/sakai-cle-test-api/assignments.rb +769 -13
- data/lib/sakai-cle-test-api/basic_lti.rb +5 -1
- data/lib/sakai-cle-test-api/blogs.rb +54 -2
- data/lib/sakai-cle-test-api/calendar.rb +423 -8
- data/lib/sakai-cle-test-api/chat_room.rb +0 -0
- data/lib/sakai-cle-test-api/common_page_elements.rb +69 -172
- data/lib/sakai-cle-test-api/core-ext.rb +90 -0
- data/lib/sakai-cle-test-api/data_objects/announcement.rb +38 -0
- data/lib/sakai-cle-test-api/data_objects/assessment.rb +32 -0
- data/lib/sakai-cle-test-api/data_objects/assignment.rb +62 -0
- data/lib/sakai-cle-test-api/data_objects/event.rb +86 -0
- data/lib/sakai-cle-test-api/data_objects/lesson.rb +137 -0
- data/lib/sakai-cle-test-api/data_objects/resource.rb +174 -0
- data/lib/sakai-cle-test-api/data_objects/site.rb +213 -0
- data/lib/sakai-cle-test-api/data_objects/syllabus.rb +7 -0
- data/lib/sakai-cle-test-api/data_objects/topic.rb +0 -0
- data/lib/sakai-cle-test-api/data_objects/web_content_tool.rb +52 -0
- data/lib/sakai-cle-test-api/data_objects/wiki.rb +7 -0
- data/lib/sakai-cle-test-api/drop_box.rb +21 -0
- data/lib/sakai-cle-test-api/email_archive.rb +15 -1
- data/lib/sakai-cle-test-api/forums.rb +282 -8
- data/lib/sakai-cle-test-api/gem_ext.rb +45 -0
- data/lib/sakai-cle-test-api/gradebook.rb +19 -1
- data/lib/sakai-cle-test-api/gradebook2.rb +15 -1
- data/lib/sakai-cle-test-api/lessons.rb +440 -0
- data/lib/sakai-cle-test-api/messages.rb +551 -15
- data/lib/sakai-cle-test-api/news.rb +3 -1
- data/lib/sakai-cle-test-api/polls.rb +65 -3
- data/lib/sakai-cle-test-api/profile.rb +36 -2
- data/lib/sakai-cle-test-api/profile2.rb +315 -6
- data/lib/sakai-cle-test-api/resources.rb +138 -0
- data/lib/sakai-cle-test-api/rich_text.rb +13 -0
- data/lib/sakai-cle-test-api/sections.rb +198 -8
- data/lib/sakai-cle-test-api/site_page_elements.rb +4 -441
- data/lib/sakai-cle-test-api/syllabus.rb +149 -7
- data/lib/sakai-cle-test-api/tools_menu.rb +3 -20
- data/lib/sakai-cle-test-api/utilities.rb +260 -0
- data/sakai-cle-test-api.gemspec +2 -3
- metadata +21 -19
File without changes
|
@@ -143,11 +143,12 @@ class EditEvaluationAssignment
|
|
143
143
|
end
|
144
144
|
|
145
145
|
def check_group(title)
|
146
|
+
frm.table(:class=>"listHier lines nolines").wait_until_present
|
146
147
|
frm.table(:class=>"listHier lines nolines").row(:text=>/#{Regexp.escape(title)}/).checkbox(:name=>"selectedGroupIDs").set
|
147
148
|
end
|
148
149
|
|
149
150
|
in_frame(:class=>"portletMainIframe") do |frame|
|
150
|
-
|
151
|
+
link(:assign_to_evaluation_groups, :text=>"Assign to Evaluation Groups", :frame=>frame)
|
151
152
|
end
|
152
153
|
end
|
153
154
|
|
@@ -226,11 +227,6 @@ class Home
|
|
226
227
|
button(:update_announcements, :name=>"eventSubmit_doUpdate", :frame=>frame)
|
227
228
|
end
|
228
229
|
|
229
|
-
# The Home class should be instantiated whenever the user
|
230
|
-
# context is a given Site or the Administration Workspace.
|
231
|
-
# In that context, the frame index is 1.
|
232
|
-
$frame_index=1
|
233
|
-
|
234
230
|
# Gets the text of the displayed announcements, for
|
235
231
|
# test case verification
|
236
232
|
def announcements_list
|
@@ -302,135 +298,7 @@ class MyWorkspace
|
|
302
298
|
|
303
299
|
end
|
304
300
|
|
305
|
-
#================
|
306
|
-
# Resources Pages
|
307
|
-
#================
|
308
|
-
|
309
|
-
# New class template. For quick class creation...
|
310
|
-
class ResourcesUploadFiles
|
311
|
-
|
312
|
-
include ToolsMenu
|
313
|
-
|
314
|
-
@@filex=0
|
315
|
-
|
316
|
-
# Enters the specified folder/filename value into
|
317
|
-
# the file field on the page. Note that files are
|
318
|
-
# assumed to be in the relative path ../../data/sakai-cle-test-api
|
319
|
-
# The method will throw an error if the specified file
|
320
|
-
# is not found.
|
321
|
-
#
|
322
|
-
# This method is designed to be able to use
|
323
|
-
# multiple times, but it assumes
|
324
|
-
# that the add_another_file method is used
|
325
|
-
# before it, every time except before the first time.
|
326
|
-
def file_to_upload(file_name, file_path="")
|
327
|
-
frm.file_field(:id, "content_#{@@filex}").set(file_path + file_name)
|
328
|
-
@@filex+=1
|
329
|
-
end
|
330
|
-
|
331
|
-
# Clicks the Upload Files Now button, resets the
|
332
|
-
# @@filex class variable back to zero, and instantiates
|
333
|
-
# the Resources page class.
|
334
|
-
def upload_files_now
|
335
|
-
frm.button(:value=>"Upload Files Now").click
|
336
|
-
@@filex=0
|
337
|
-
Resources.new(@browser)
|
338
|
-
end
|
339
|
-
|
340
|
-
# Clicks the Add Another File link.
|
341
|
-
def add_another_file
|
342
|
-
frm.link(:text=>"Add Another File").click
|
343
|
-
end
|
344
|
-
|
345
|
-
end
|
346
|
-
|
347
|
-
class EditFileDetails
|
348
|
-
|
349
|
-
include ToolsMenu
|
350
|
-
|
351
|
-
# Clicks the Update button, then instantiates
|
352
|
-
# the Resources page class.
|
353
|
-
def update
|
354
|
-
frm.button(:value=>"Update").click
|
355
|
-
Resources.new(@browser)
|
356
|
-
end
|
357
|
-
|
358
|
-
# Enters the specified string into the title field.
|
359
|
-
def title=(title)
|
360
|
-
frm.text_field(:id=>"displayName_0").set(title)
|
361
|
-
end
|
362
|
-
|
363
|
-
# Enters the specified string into the description field.
|
364
|
-
def description=(description)
|
365
|
-
frm.text_field(:id=>"description_0").set(description)
|
366
|
-
end
|
367
|
-
|
368
|
-
# Sets the radio button for publically viewable.
|
369
|
-
def select_publicly_viewable
|
370
|
-
frm.radio(:id=>"access_mode_public_0").set
|
371
|
-
end
|
372
|
-
|
373
|
-
# Checks the checkbox for showing only on the specifed
|
374
|
-
# condition.
|
375
|
-
def check_show_only_if_condition
|
376
|
-
frm.checkbox(:id=>"cbCondition_0")
|
377
|
-
end
|
378
|
-
|
379
|
-
# Selects the specified Gradebook item value in the
|
380
|
-
# select list.
|
381
|
-
def gradebook_item=(item)
|
382
|
-
frm.select(:id=>"selectResource_0").select(item)
|
383
|
-
end
|
384
|
-
|
385
|
-
# Selects the specified value in the item condition
|
386
|
-
# field.
|
387
|
-
def item_condition=(condition)
|
388
|
-
frm.select(:id=>"selectCondition_0").select(condition)
|
389
|
-
end
|
390
|
-
|
391
|
-
# Sets the Grade field to the specified value.
|
392
|
-
def assignment_grade=(grade)
|
393
|
-
frm.text_field(:id=>"assignment_grade_0").set(grade)
|
394
|
-
end
|
395
|
-
end
|
396
|
-
|
397
|
-
class CreateFolders #FIXME - Need to add functions for adding multiple folders
|
398
|
-
|
399
|
-
include ToolsMenu
|
400
|
-
|
401
|
-
# Clicks the Create Folders Now button, then
|
402
|
-
# instantiates the Resources page class.
|
403
|
-
def create_folders_now
|
404
|
-
frm.button(:value=>"Create Folders Now").click
|
405
|
-
Resources.new(@browser)
|
406
|
-
end
|
407
|
-
|
408
|
-
# Enters the specified string in the Folder Name
|
409
|
-
# text field.
|
410
|
-
def folder_name=(name)
|
411
|
-
frm.text_field(:id=>"content_0").set(name)
|
412
|
-
end
|
413
|
-
|
414
|
-
end
|
415
|
-
|
416
|
-
# Resources page for a given Site, in the Course Tools menu
|
417
|
-
class Resources < AddFiles
|
418
301
|
|
419
|
-
include ToolsMenu
|
420
|
-
|
421
|
-
def initialize(browser)
|
422
|
-
@browser = browser
|
423
|
-
|
424
|
-
@@classes = {
|
425
|
-
:this=> "Resources",
|
426
|
-
:parent => "Resources",
|
427
|
-
:file_details => "EditFileDetails",
|
428
|
-
:create_folders => "CreateFolders",
|
429
|
-
:upload_files => "ResourcesUploadFiles"
|
430
|
-
}
|
431
|
-
end
|
432
|
-
|
433
|
-
end
|
434
302
|
|
435
303
|
#================
|
436
304
|
# Administrative Search Pages
|
@@ -514,7 +382,11 @@ class SiteSetup
|
|
514
382
|
|
515
383
|
include PageObject
|
516
384
|
include ToolsMenu
|
517
|
-
|
385
|
+
|
386
|
+
def search_field
|
387
|
+
frm.text_field(:id, "search")
|
388
|
+
end
|
389
|
+
|
518
390
|
# Clicks the "New" link on the Site Setup page.
|
519
391
|
# instantiates the SiteType class.
|
520
392
|
def new
|
@@ -527,7 +399,7 @@ class SiteSetup
|
|
527
399
|
# Then clicks the Edit button and instantiates
|
528
400
|
# The SiteSetupEdit class.
|
529
401
|
def edit(site_name)
|
530
|
-
|
402
|
+
search_field.value=Regexp.escape(site_name)
|
531
403
|
frm.button(:value=>"Search").click
|
532
404
|
frm.div(:class=>"portletBody").checkbox(:name=>"selectedMembers").set
|
533
405
|
frm.div(:class=>"portletBody").link(:text, "Edit").click
|
@@ -538,7 +410,7 @@ class SiteSetup
|
|
538
410
|
# field, clicks the Search button, then reinstantiates
|
539
411
|
# the Class due to the page refresh.
|
540
412
|
def search(site_name)
|
541
|
-
|
413
|
+
search_field.set site_name
|
542
414
|
frm.button(:value, "Search").click
|
543
415
|
SiteSetup.new(@browser)
|
544
416
|
end
|
@@ -547,7 +419,7 @@ class SiteSetup
|
|
547
419
|
# checks the site, clicks the delete button,
|
548
420
|
# and instantiates the DeleteSite class.
|
549
421
|
def delete(site_name)
|
550
|
-
|
422
|
+
search_field.value=site_name
|
551
423
|
frm.button(:value=>"Search").click
|
552
424
|
frm.checkbox(:name=>"selectedMembers").set
|
553
425
|
frm.div(:class=>"portletBody").link(:text, "Delete").click
|
@@ -603,11 +475,17 @@ class SiteEditor
|
|
603
475
|
frm.button(:value=>"Update Participants").click
|
604
476
|
SiteEditor.new(@browser)
|
605
477
|
end
|
606
|
-
|
478
|
+
|
479
|
+
def return_button
|
480
|
+
frm.button(:name=>"back")
|
481
|
+
end
|
482
|
+
|
483
|
+
def return_to_sites_list
|
484
|
+
return_button.click
|
485
|
+
end
|
486
|
+
|
607
487
|
in_frame(:class=>"portletMainIframe") do |frame|
|
608
488
|
button(:previous, :name=>"previous", :frame=>frame)
|
609
|
-
button(:return_to_sites_list, :name=>"", :frame=>frame)
|
610
|
-
button(:next, :name=>"", :frame=>frame)
|
611
489
|
link(:printable_version, :text=>"Printable Version", :frame=>frame)
|
612
490
|
select_list(:select_page_size, :name=>"selectPageSize", :frame=>frame)
|
613
491
|
button(:next, :name=>"eventSubmit_doList_next", :frame=>frame)
|
@@ -816,20 +694,8 @@ class EditSiteTools
|
|
816
694
|
include PageObject
|
817
695
|
include ToolsMenu
|
818
696
|
|
819
|
-
# Clicks the Continue button
|
820
|
-
|
821
|
-
def continue
|
822
|
-
frm.button(:value=>"Continue").click
|
823
|
-
# Logic for determining the new page class...
|
824
|
-
if frm.div(:class=>"portletBody").text =~ /^Add Multiple Tool/
|
825
|
-
AddMultipleTools.new(@browser)
|
826
|
-
elsif frm.div(:class=>"portletBody").text =~ /^Confirming site tools edits for/
|
827
|
-
ConfirmSiteToolsEdits.new(@browser)
|
828
|
-
else
|
829
|
-
puts "Something is wrong"
|
830
|
-
puts frm.div(:class=>"portletBody").text
|
831
|
-
end
|
832
|
-
end
|
697
|
+
# Clicks the Continue button.
|
698
|
+
action(:continue) { |b| b.frm.button(:value=>"Continue").click }
|
833
699
|
|
834
700
|
in_frame(:class=>"portletMainIframe") do |frame|
|
835
701
|
# This is a comprehensive list of all checkboxes and
|
@@ -894,16 +760,46 @@ class EditSiteTools
|
|
894
760
|
|
895
761
|
end
|
896
762
|
|
763
|
+
class ReUseMaterial
|
764
|
+
|
765
|
+
include PageObject
|
766
|
+
include ToolsMenu
|
767
|
+
|
768
|
+
thing(:announcements_checkbox) { |b| b.frm.checkbox(name: "sakai.announcements") }
|
769
|
+
thing(:calendar_checkbox) { |b| b.frm.checkbox(name: "sakai.schedule") }
|
770
|
+
thing(:discussion_forums_checkbox) { |b| b.frm.checkbox(name: "sakai.jforum.tool") }
|
771
|
+
thing(:forums_checkbox) { |b| b.frm.checkbox(name: "sakai.forums") }
|
772
|
+
thing(:chat_room_checkbox) { |b| b.frm.checkbox(name: "sakai.chat") }
|
773
|
+
thing(:polls_checkbox) { |b| b.frm.checkbox(name: "sakai.poll") }
|
774
|
+
thing(:syllabus_checkbox) { |b| b.frm.checkbox(name: "sakai.syllabus") }
|
775
|
+
thing(:lessons_checkbox) { |b| b.frm.checkbox(name: "sakai.melete") }
|
776
|
+
thing(:resources_checkbox) { |b| b.frm.checkbox(name: "sakai.resources") }
|
777
|
+
thing(:assignments_checkbox) { |b| b.frm.checkbox(name: "sakai.assignment.grades") }
|
778
|
+
thing(:tests_and_quizzes_checkbox) { |b| b.frm.checkbox(name: "sakai.samigo") }
|
779
|
+
thing(:gradebook_checkbox) { |b| b.frm.checkbox(name: "sakai.gradebook.tool") }
|
780
|
+
thing(:gradebook2_checkbox) { |b| b.frm.checkbox(name: "sakai.gradebook.gwt.rpc") }
|
781
|
+
thing(:wiki_checkbox) { |b| b.frm.checkbox(name: "sakai.rwiki") }
|
782
|
+
thing(:news_checkbox) { |b| b.frm.checkbox(name: "sakai.news") }
|
783
|
+
thing(:web_content_checkbox) { |b| b.frm.checkbox(name: "sakai.iframe") }
|
784
|
+
thing(:site_statistics_checkbox) { |b| b.frm.checkbox(name: "sakai.sitestats") }
|
785
|
+
action(:continue) { |b| b.frm.button(name: "eventSubmit_doContinue").click }
|
786
|
+
|
787
|
+
end
|
788
|
+
|
897
789
|
# Confirmation page when editing site tools in Site Setup
|
898
790
|
class ConfirmSiteToolsEdits
|
899
791
|
|
900
792
|
include PageObject
|
901
793
|
include ToolsMenu
|
902
|
-
|
794
|
+
|
795
|
+
def finish_button
|
796
|
+
frm.button(:value=>"Finish")
|
797
|
+
end
|
798
|
+
|
903
799
|
# Clicks the Finish button, then instantiates
|
904
800
|
# the SiteSetupEdit class.
|
905
801
|
def finish
|
906
|
-
|
802
|
+
finish_button.click
|
907
803
|
SiteEditor.new(@browser)
|
908
804
|
end
|
909
805
|
|
@@ -993,20 +889,8 @@ class AddMultipleTools
|
|
993
889
|
include PageObject
|
994
890
|
include ToolsMenu
|
995
891
|
|
996
|
-
# Clicks the Continue button
|
997
|
-
|
998
|
-
# appears.
|
999
|
-
def continue
|
1000
|
-
frm.button(:value=>"Continue").click
|
1001
|
-
# Logic to determine the new page class
|
1002
|
-
if frm.div(:class=>"portletBody").text =~ /Course Site Access/
|
1003
|
-
SiteAccess.new(@browser)
|
1004
|
-
elsif frm.div(:class=>"portletBody").text =~ /^Confirming site tools edits/
|
1005
|
-
ConfirmSiteToolsEdits.new(@browser)
|
1006
|
-
else
|
1007
|
-
puts "There's another path to define"
|
1008
|
-
end
|
1009
|
-
end
|
892
|
+
# Clicks the Continue button.
|
893
|
+
action(:continue) { |b| b.frm.button(:value=>"Continue").click }
|
1010
894
|
|
1011
895
|
in_frame(:class=>"portletMainIframe") do |frame|
|
1012
896
|
# Note that the text field definitions included here
|
@@ -1142,7 +1026,20 @@ class CourseSiteInfo
|
|
1142
1026
|
|
1143
1027
|
include PageObject
|
1144
1028
|
include ToolsMenu
|
1145
|
-
|
1029
|
+
include FCKEditor
|
1030
|
+
|
1031
|
+
def editor
|
1032
|
+
frm.frame(:id=>"description___Frame")
|
1033
|
+
end
|
1034
|
+
|
1035
|
+
def description=(text)
|
1036
|
+
editor.td(:id, "xEditingArea").frame(:index=>0).send_keys text
|
1037
|
+
end
|
1038
|
+
|
1039
|
+
def source=(text)
|
1040
|
+
editor.td(:id, "xEditingArea").text_field(:class=>"SourceField").set text
|
1041
|
+
end
|
1042
|
+
|
1146
1043
|
# Clicks the Continue button, then
|
1147
1044
|
# instantiates the EditSiteTools Class.
|
1148
1045
|
def continue
|
@@ -0,0 +1,90 @@
|
|
1
|
+
class Time
|
2
|
+
|
3
|
+
# Using the :year_range option (or no option), this method creates a
|
4
|
+
# Time object of a random value, within
|
5
|
+
# the year range specified (default is 5 years in the past).
|
6
|
+
#
|
7
|
+
# Using the :series option, this method returns an array
|
8
|
+
# containing a randomized Time object as its first element (limited by
|
9
|
+
# the specified :year_range value). Subsequent elements will be Time objects
|
10
|
+
# with values putting them later than the prior element, within the specified
|
11
|
+
# range value (see examples).
|
12
|
+
#
|
13
|
+
# Usage Examples:
|
14
|
+
# @example
|
15
|
+
# a random date...
|
16
|
+
# ?> Time.random
|
17
|
+
# => Tue Aug 05 00:00:00 EDT 2007
|
18
|
+
#
|
19
|
+
# birthdays, anyone?...
|
20
|
+
# 5.times { p Time.random(:year_range=>80) }
|
21
|
+
# Wed Feb 06 00:00:00 EDT 1974
|
22
|
+
# Tue Dec 22 00:00:00 EST 1992
|
23
|
+
# Fri Apr 14 00:00:00 EWT 1944
|
24
|
+
# Thu Jul 01 00:00:00 EDT 1993
|
25
|
+
# Wed Oct 02 00:00:00 EDT 2002
|
26
|
+
#
|
27
|
+
# A series of dates are useful for account-related info...
|
28
|
+
# ?> Time.random(:series=>[20.days, 3.years])
|
29
|
+
# => [Sat Jan 22 00:00:00 EST 2005,
|
30
|
+
# Sat Jan 29 12:58:45 EST 2005,
|
31
|
+
# Fri Sep 08 09:34:58 EDT 2006]
|
32
|
+
#
|
33
|
+
# or maybe to simulate events during an hour?...
|
34
|
+
# ?> Time.random(:series=>[1.hour,1.hour,1.hour])
|
35
|
+
# => [Wed Apr 21 00:00:00 EDT 2004,
|
36
|
+
# Wed Apr 21 00:45:59 EDT 2004,
|
37
|
+
# Wed Apr 21 01:02:47 EDT 2004,
|
38
|
+
# Wed Apr 21 01:31:00 EDT 2004]
|
39
|
+
def self.random(params={})
|
40
|
+
years_back = params[:year_range] || 5
|
41
|
+
year = (rand * (years_back)).ceil + (Time.now.year - years_back)
|
42
|
+
month = (rand * 12).ceil
|
43
|
+
day = (rand * 31).ceil
|
44
|
+
series = [date = Time.local(year, month, day)]
|
45
|
+
if params[:series]
|
46
|
+
params[:series].each do |some_time_after|
|
47
|
+
series << series.last + (rand * some_time_after).ceil
|
48
|
+
end
|
49
|
+
return series
|
50
|
+
end
|
51
|
+
date
|
52
|
+
end
|
53
|
+
|
54
|
+
end # Time
|
55
|
+
|
56
|
+
module Enumerable
|
57
|
+
|
58
|
+
# Use for getting a natural sort order instead of the ASCII
|
59
|
+
# sort order.
|
60
|
+
def alphabetize
|
61
|
+
sort { |a, b| grouped_compare(a, b) }
|
62
|
+
end
|
63
|
+
|
64
|
+
# Use for sorting an Enumerable object in place.
|
65
|
+
def alphabetize!
|
66
|
+
sort! { |a, b| grouped_compare(a, b) }
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
def grouped_compare(a, b)
|
71
|
+
loop {
|
72
|
+
a_chunk, a = extract_alpha_or_number_group(a)
|
73
|
+
b_chunk, b = extract_alpha_or_number_group(b)
|
74
|
+
ret = a_chunk <=> b_chunk
|
75
|
+
return -1 if a_chunk == ''
|
76
|
+
return ret if ret != 0
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
def extract_alpha_or_number_group(item)
|
81
|
+
test_item = item.downcase
|
82
|
+
matchdata = /([a-z]+|[\d]+)/.match(test_item)
|
83
|
+
if matchdata.nil?
|
84
|
+
["", ""]
|
85
|
+
else
|
86
|
+
[matchdata[0], test_item = test_item[matchdata.offset(0)[1] .. -1]]
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
end # Enumerable
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class AnnouncementObject
|
2
|
+
|
3
|
+
include PageObject
|
4
|
+
include Utilities
|
5
|
+
include ToolsMenu
|
6
|
+
|
7
|
+
attr_accessor :title, :body, :site, :link
|
8
|
+
|
9
|
+
def initialize(browser, opts={})
|
10
|
+
@browser = browser
|
11
|
+
|
12
|
+
defaults = {
|
13
|
+
:title=>random_alphanums,
|
14
|
+
:body=>random_multiline(500, 10, :alpha)
|
15
|
+
}
|
16
|
+
options = defaults.merge(opts)
|
17
|
+
@title=options[:title]
|
18
|
+
@body=options[:body]
|
19
|
+
@site=options[:site]
|
20
|
+
raise "You must specify a Site for the announcement" if @site==nil
|
21
|
+
end
|
22
|
+
|
23
|
+
def create
|
24
|
+
my_workspace.open_my_site_by_name @site unless @browser.title=~/#{@site}/
|
25
|
+
announcements unless @browser.title=~/Announcements$/
|
26
|
+
on_page Announcements do |page|
|
27
|
+
page.add
|
28
|
+
end
|
29
|
+
on_page AddEditAnnouncements do |page|
|
30
|
+
page.title=@title
|
31
|
+
page.body=@body
|
32
|
+
page.add_announcement
|
33
|
+
end
|
34
|
+
on_page Announcements do |page|
|
35
|
+
@link = page.href(@title)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|