admin_module 0.1.4
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.
- checksums.yaml +7 -0
- data/.gitignore +19 -0
- data/.rspec +3 -0
- data/Gemfile +14 -0
- data/Guardfile +24 -0
- data/LICENSE +22 -0
- data/README.md +281 -0
- data/Rakefile +98 -0
- data/admin_module.gemspec +34 -0
- data/bin/admin_module +13 -0
- data/lib/admin_module.rb +260 -0
- data/lib/admin_module/cli.rb +54 -0
- data/lib/admin_module/cli/cli_guideline.rb +80 -0
- data/lib/admin_module/cli/cli_lock.rb +149 -0
- data/lib/admin_module/cli/cli_parameter.rb +66 -0
- data/lib/admin_module/cli/cli_task.rb +149 -0
- data/lib/admin_module/cli_old.rb +92 -0
- data/lib/admin_module/client.rb +146 -0
- data/lib/admin_module/command.rb +25 -0
- data/lib/admin_module/command/client_access.rb +43 -0
- data/lib/admin_module/command/config.rb +310 -0
- data/lib/admin_module/command/dc.rb +110 -0
- data/lib/admin_module/command/gdl.rb +71 -0
- data/lib/admin_module/command/lock.rb +110 -0
- data/lib/admin_module/command/ppm.rb +142 -0
- data/lib/admin_module/command/rule.rb +77 -0
- data/lib/admin_module/command/ruleset.rb +56 -0
- data/lib/admin_module/command/snapshot.rb +110 -0
- data/lib/admin_module/command/stage.rb +131 -0
- data/lib/admin_module/command/task.rb +110 -0
- data/lib/admin_module/config_helper.rb +33 -0
- data/lib/admin_module/dc.rb +133 -0
- data/lib/admin_module/guideline.rb +86 -0
- data/lib/admin_module/locks.rb +142 -0
- data/lib/admin_module/page_factory.rb +55 -0
- data/lib/admin_module/pages.rb +120 -0
- data/lib/admin_module/pages/dc_definitions_page.rb +73 -0
- data/lib/admin_module/pages/dc_detail_page.rb +187 -0
- data/lib/admin_module/pages/guideline_page.rb +35 -0
- data/lib/admin_module/pages/guideline_version_page.rb +140 -0
- data/lib/admin_module/pages/guidelines_page.rb +59 -0
- data/lib/admin_module/pages/guidelines_version_all_page.rb +116 -0
- data/lib/admin_module/pages/lock_definition_page.rb +178 -0
- data/lib/admin_module/pages/lock_definitions_page.rb +69 -0
- data/lib/admin_module/pages/login_page.rb +75 -0
- data/lib/admin_module/pages/parameter_page.rb +62 -0
- data/lib/admin_module/pages/parameters_page.rb +46 -0
- data/lib/admin_module/pages/ppms_page.rb +110 -0
- data/lib/admin_module/pages/rule_page.rb +68 -0
- data/lib/admin_module/pages/rules_page.rb +74 -0
- data/lib/admin_module/pages/ruleset_page.rb +64 -0
- data/lib/admin_module/pages/rulesets_page.rb +60 -0
- data/lib/admin_module/pages/select_list_syncable.rb +64 -0
- data/lib/admin_module/pages/snapshot_definitions_page.rb +73 -0
- data/lib/admin_module/pages/snapshot_detail_page.rb +246 -0
- data/lib/admin_module/pages/workflow_detail_page.rb +451 -0
- data/lib/admin_module/pages/workflow_detail_task_addl_detail_page.rb +172 -0
- data/lib/admin_module/pages/workflow_detail_task_mappings_page.rb +163 -0
- data/lib/admin_module/pages/workflow_detail_task_screens_page.rb +75 -0
- data/lib/admin_module/pages/workflow_details_page.rb +67 -0
- data/lib/admin_module/pages/workflow_task_page.rb +107 -0
- data/lib/admin_module/pages/workflow_tasks_page.rb +111 -0
- data/lib/admin_module/ppms.rb +78 -0
- data/lib/admin_module/rake.rb +22 -0
- data/lib/admin_module/rake/dc_tasks.rb +185 -0
- data/lib/admin_module/rake/deploy_task.rb +59 -0
- data/lib/admin_module/rake/gdl_tasks.rb +189 -0
- data/lib/admin_module/rake/lock_tasks.rb +189 -0
- data/lib/admin_module/rake/parameter_task.rb +86 -0
- data/lib/admin_module/rake/ppm_tasks.rb +248 -0
- data/lib/admin_module/rake/rule_tasks.rb +157 -0
- data/lib/admin_module/rake/snapshot_tasks.rb +223 -0
- data/lib/admin_module/rake/stage_tasks.rb +197 -0
- data/lib/admin_module/rake/stages_task.rb +197 -0
- data/lib/admin_module/rake/task_tasks.rb +189 -0
- data/lib/admin_module/rules.rb +50 -0
- data/lib/admin_module/rulesets.rb +42 -0
- data/lib/admin_module/snapshots.rb +133 -0
- data/lib/admin_module/stages.rb +171 -0
- data/lib/admin_module/tasks.rb +147 -0
- data/lib/admin_module/version.rb +3 -0
- data/old_spec/lib/admin_module/cli_configuration_spec.rb +126 -0
- data/old_spec/lib/admin_module/cli_create_stage_spec.rb +89 -0
- data/old_spec/lib/admin_module/cli_delete_rule_spec.rb +57 -0
- data/old_spec/lib/admin_module/cli_deploy_spec.rb +57 -0
- data/old_spec/lib/admin_module/cli_export_locks_spec.rb +62 -0
- data/old_spec/lib/admin_module/cli_export_stages_spec.rb +62 -0
- data/old_spec/lib/admin_module/cli_guidelines_version_all_spec.rb +58 -0
- data/old_spec/lib/admin_module/cli_import_locks_spec.rb +153 -0
- data/old_spec/lib/admin_module/cli_import_stages_spec.rb +173 -0
- data/old_spec/lib/admin_module/cli_modify_locks_spec.rb +128 -0
- data/old_spec/lib/admin_module/cli_modify_stages_spec.rb +88 -0
- data/old_spec/lib/admin_module/cli_rename_rule_spec.rb +53 -0
- data/old_spec/lib/admin_module/cli_rename_ruleset_spec.rb +53 -0
- data/old_spec/lib/admin_module/cli_var_spec.rb +41 -0
- data/old_spec/lib/admin_module/rake/deploy_task_spec.rb +85 -0
- data/old_spec/lib/admin_module/rake/parameter_task_spec.rb +58 -0
- data/old_spec/lib/admin_module/rake/rules_task_spec.rb +75 -0
- data/spec/data/build/test1.xml +0 -0
- data/spec/data/build/test2.xml +1 -0
- data/spec/data/import_dcs.yml +31 -0
- data/spec/data/import_locks.yml +4 -0
- data/spec/data/import_snapshots.yml +35 -0
- data/spec/data/import_stages.yml +4 -0
- data/spec/data/import_tasks.yml +25 -0
- data/spec/data/patch-test.xml +1 -0
- data/spec/data/remove_test_del_rule.xml +1 -0
- data/spec/data/stages.yml +518 -0
- data/spec/data/test_del_rule.xml +1 -0
- data/spec/lib/admin_module/admin_module_spec.rb +175 -0
- data/spec/lib/admin_module/cli_spec.rb +36 -0
- data/spec/lib/admin_module/client_spec.rb +158 -0
- data/spec/lib/admin_module/command/config_spec.rb +477 -0
- data/spec/lib/admin_module/command/dc_spec.rb +202 -0
- data/spec/lib/admin_module/command/gdl_spec.rb +139 -0
- data/spec/lib/admin_module/command/lock_spec.rb +207 -0
- data/spec/lib/admin_module/command/rule_spec.rb +163 -0
- data/spec/lib/admin_module/command/ruleset_spec.rb +124 -0
- data/spec/lib/admin_module/command/snapshot_spec.rb +202 -0
- data/spec/lib/admin_module/command/stage_spec.rb +259 -0
- data/spec/lib/admin_module/command/task_spec.rb +207 -0
- data/spec/lib/admin_module/dc_spec.rb +192 -0
- data/spec/lib/admin_module/guideline_spec.rb +177 -0
- data/spec/lib/admin_module/locks_spec.rb +188 -0
- data/spec/lib/admin_module/rules_spec.rb +110 -0
- data/spec/lib/admin_module/rulesets_spec.rb +85 -0
- data/spec/lib/admin_module/snapshot_spec.rb +192 -0
- data/spec/lib/admin_module/stages_spec.rb +179 -0
- data/spec/lib/admin_module/tasks_spec.rb +196 -0
- data/spec/spec_helper.rb +54 -0
- data/spec/support/asserts.rb +13 -0
- data/spec/support/data_clearing.rb +28 -0
- data/spec/support/dirs.rb +54 -0
- data/spec/support/helpers.rb +83 -0
- data/spec/support/lock.rb +23 -0
- data/spec/support/mocks.rb +213 -0
- data/spec/support/snapshot.rb +28 -0
- data/spec/support/stage.rb +22 -0
- data/spec/support/stage_factory.rb +138 -0
- data/spec/support/task.rb +23 -0
- metadata +381 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
##############################################################################
|
|
2
|
+
# File:: workflow_detail_task_mappings_page.rb
|
|
3
|
+
# Purpose:: Stage Task Screen Mappings page for AdminModule
|
|
4
|
+
#
|
|
5
|
+
# Author:: Jeff McAffee 2015-04-20
|
|
6
|
+
#
|
|
7
|
+
##############################################################################
|
|
8
|
+
require 'page-object'
|
|
9
|
+
require 'nokogiri'
|
|
10
|
+
|
|
11
|
+
module AdminModule::Pages
|
|
12
|
+
|
|
13
|
+
class WorkflowDetailTaskMappingsPage
|
|
14
|
+
include PageObject
|
|
15
|
+
|
|
16
|
+
#page_url(:get_dynamic_url)
|
|
17
|
+
|
|
18
|
+
# The only access is through the Tasks tab Manage Screen Mappings button
|
|
19
|
+
|
|
20
|
+
#def get_dynamic_url
|
|
21
|
+
# AdminModule.configuration.url(WorkflowDetailPage)
|
|
22
|
+
#end
|
|
23
|
+
|
|
24
|
+
# Controls
|
|
25
|
+
|
|
26
|
+
span(:error_span,
|
|
27
|
+
id: 'ctl00_cntPlh_ctlErrors_lblError')
|
|
28
|
+
|
|
29
|
+
# Details Tab
|
|
30
|
+
|
|
31
|
+
text_field( :name,
|
|
32
|
+
id: 'ctl00_cntPlh_txtStateName')
|
|
33
|
+
|
|
34
|
+
# Transition To States Tab
|
|
35
|
+
|
|
36
|
+
select_list(:available_states,
|
|
37
|
+
id: 'ctl00_cntPlh_tsStates_lstAvailable')
|
|
38
|
+
|
|
39
|
+
select_list(:selected_states,
|
|
40
|
+
id: 'ctl00_cntPlh_tsStates_lstSelected')
|
|
41
|
+
|
|
42
|
+
button(:add_state_button,
|
|
43
|
+
id: 'ctl00_cntPlh_tsStates_btnAdd')
|
|
44
|
+
|
|
45
|
+
button(:add_all_states_button,
|
|
46
|
+
id: 'ctl00_cntPlh_tsStates_btnAddAll')
|
|
47
|
+
|
|
48
|
+
button(:back_button,
|
|
49
|
+
id: 'ctl00_cntPlh_btnCancel')
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def get_data
|
|
53
|
+
get_tasks_details
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def set_data data
|
|
57
|
+
if !error_span? || !error_span.include?('No task defined')
|
|
58
|
+
set_tasks_details data
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
self
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def back
|
|
65
|
+
self.back_button
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
private
|
|
69
|
+
|
|
70
|
+
def details_table
|
|
71
|
+
table_elements[0].table_elements[1]
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def get_tasks_details
|
|
75
|
+
details = Hash.new
|
|
76
|
+
|
|
77
|
+
capture_details.each do |item|
|
|
78
|
+
details[item.name] = item.to_hsh
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
details
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def set_screen_mappings btn_id, screens
|
|
85
|
+
btn = button_elements(id: btn_id)[0]
|
|
86
|
+
btn.click
|
|
87
|
+
|
|
88
|
+
WorkflowDetailTaskScreensPage.new(@browser, false)
|
|
89
|
+
.set_screens(screens)
|
|
90
|
+
.save
|
|
91
|
+
|
|
92
|
+
self
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def set_tasks_details details
|
|
96
|
+
capture_details.each do |item|
|
|
97
|
+
details.each do |dtl|
|
|
98
|
+
if dtl[:name] == item.name
|
|
99
|
+
# We've found a match, see if the mapping screens value matches
|
|
100
|
+
if item.screens != dtl[:mapped_screens]
|
|
101
|
+
# Not a match, we need to change it so find the button
|
|
102
|
+
set_screen_mappings item.edit_button_id, dtl[:mapped_screens]
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
break
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
self
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
class TaskDetail
|
|
114
|
+
attr_accessor :sequence
|
|
115
|
+
attr_accessor :name
|
|
116
|
+
attr_accessor :mapped_screens
|
|
117
|
+
attr_accessor :edit_button_id
|
|
118
|
+
|
|
119
|
+
def to_hsh
|
|
120
|
+
{
|
|
121
|
+
sequence: @sequence,
|
|
122
|
+
name: @name,
|
|
123
|
+
mapped_screens: screens,
|
|
124
|
+
}
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def screens
|
|
128
|
+
# Clean up the screens list by splitting into an array
|
|
129
|
+
screens = @mapped_screens.split(', ')
|
|
130
|
+
# and removing whitespace (specifically, non-breaking spaces)
|
|
131
|
+
screens.collect! { |scr| scr.gsub("\u00A0",'').strip }
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
###
|
|
136
|
+
# Build a list of objects containing task detail data.
|
|
137
|
+
#
|
|
138
|
+
# We use this method even though we don't need to (for get_xxx) because we'll
|
|
139
|
+
# need the captured field ids for *setting* values.
|
|
140
|
+
#
|
|
141
|
+
|
|
142
|
+
def capture_details
|
|
143
|
+
details = []
|
|
144
|
+
|
|
145
|
+
Nokogiri::HTML(@browser.html).css("#ctl00_cntPlh_gvScreenMapping>tbody>tr").each do |tr|
|
|
146
|
+
# Skip the header row
|
|
147
|
+
next if tr['class'] == 'GridHeader'
|
|
148
|
+
|
|
149
|
+
detail = TaskDetail.new
|
|
150
|
+
detail.sequence = tr.css("td:nth-child(1)").text
|
|
151
|
+
detail.name = tr.css("td:nth-child(2)").text
|
|
152
|
+
detail.mapped_screens = tr.css("td:nth-child(3)").text
|
|
153
|
+
detail.edit_button_id = tr.css("td:nth-child(4)>input")[0]['id']
|
|
154
|
+
|
|
155
|
+
details << detail
|
|
156
|
+
end # css
|
|
157
|
+
|
|
158
|
+
details
|
|
159
|
+
end
|
|
160
|
+
end # class WorkflowDetailTaskMappingsPage
|
|
161
|
+
|
|
162
|
+
end # module Pages
|
|
163
|
+
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
##############################################################################
|
|
2
|
+
# File:: workflow_detail_task_screens_page.rb
|
|
3
|
+
# Purpose:: Stage Task Screens detail page for AdminModule
|
|
4
|
+
#
|
|
5
|
+
# Author:: Jeff McAffee 2015-04-20
|
|
6
|
+
#
|
|
7
|
+
##############################################################################
|
|
8
|
+
require 'page-object'
|
|
9
|
+
require 'nokogiri'
|
|
10
|
+
|
|
11
|
+
module AdminModule::Pages
|
|
12
|
+
|
|
13
|
+
class WorkflowDetailTaskScreensPage
|
|
14
|
+
include PageObject
|
|
15
|
+
|
|
16
|
+
#page_url(:get_dynamic_url)
|
|
17
|
+
|
|
18
|
+
# The only access is through the Tasks tab Manage Screen Mappings button
|
|
19
|
+
|
|
20
|
+
#def get_dynamic_url
|
|
21
|
+
# AdminModule.configuration.url(WorkflowDetailTaskScreensPage)
|
|
22
|
+
#end
|
|
23
|
+
|
|
24
|
+
# Controls
|
|
25
|
+
|
|
26
|
+
select_list(:available_screens,
|
|
27
|
+
id: 'ctl00_cntPlh_tsTaskScreen_lstAvailable')
|
|
28
|
+
|
|
29
|
+
select_list(:selected_screens,
|
|
30
|
+
id: 'ctl00_cntPlh_tsTaskScreen_lstSelected')
|
|
31
|
+
|
|
32
|
+
button(:add_screen_button,
|
|
33
|
+
id: 'ctl00_cntPlh_tsTaskScreen_btnAdd')
|
|
34
|
+
|
|
35
|
+
button(:add_all_screens_button,
|
|
36
|
+
id: 'ctl00_cntPlh_tsTaskScreen_btnAddAll')
|
|
37
|
+
|
|
38
|
+
button(:remove_screen_button,
|
|
39
|
+
id: 'ctl00_cntPlh_tsTaskScreen_btnRemove')
|
|
40
|
+
|
|
41
|
+
button(:remove_all_screens_button,
|
|
42
|
+
id: 'ctl00_cntPlh_tsTaskScreen_btnRemoveAll')
|
|
43
|
+
|
|
44
|
+
# Save/Cancel buttons
|
|
45
|
+
button(:save_button,
|
|
46
|
+
id: 'ctl00_cntPlh_btnSave')
|
|
47
|
+
|
|
48
|
+
button(:cancel_button,
|
|
49
|
+
id: 'ctl00_cntPlh_btnCancel')
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def set_screens data
|
|
53
|
+
# Remove all screens, then add back the requested sreens.
|
|
54
|
+
self.remove_all_screens_button
|
|
55
|
+
data.each do |t|
|
|
56
|
+
unless t.nil? or t.empty?
|
|
57
|
+
available_screens_element.select(t)
|
|
58
|
+
self.add_screen_button
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
self
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def save
|
|
66
|
+
self.save_button
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def cancel
|
|
70
|
+
self.cancel_button
|
|
71
|
+
end
|
|
72
|
+
end # class WorkflowDetailTaskScreensPage
|
|
73
|
+
|
|
74
|
+
end # module Pages
|
|
75
|
+
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
##############################################################################
|
|
2
|
+
# File:: workflow_details_page.rb
|
|
3
|
+
# Purpose:: Guidelines page for AdminModule
|
|
4
|
+
#
|
|
5
|
+
# Author:: Jeff McAffee 2013-12-12
|
|
6
|
+
#
|
|
7
|
+
##############################################################################
|
|
8
|
+
require 'page-object'
|
|
9
|
+
|
|
10
|
+
module AdminModule::Pages
|
|
11
|
+
class WorkflowDetailsPage
|
|
12
|
+
include PageObject
|
|
13
|
+
|
|
14
|
+
page_url(:get_dynamic_url)
|
|
15
|
+
|
|
16
|
+
def get_dynamic_url
|
|
17
|
+
AdminModule.configuration.base_url + "/admin/security/workflows.aspx"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
select_list(:states,
|
|
21
|
+
id: 'ctl00_cntPlh_elStates_lstItems')
|
|
22
|
+
|
|
23
|
+
button(:add_button,
|
|
24
|
+
id: 'ctl00_cntPlh_elStates_btnAdd')
|
|
25
|
+
|
|
26
|
+
button(:modify_button,
|
|
27
|
+
id: 'ctl00_cntPlh_elStates_btnModify')
|
|
28
|
+
|
|
29
|
+
button(:delete_button,
|
|
30
|
+
id: 'ctl00_cntPlh_elStates_btnDelete')
|
|
31
|
+
|
|
32
|
+
def get_stages
|
|
33
|
+
stage_list = []
|
|
34
|
+
Nokogiri::HTML(@browser.html).css("select#ctl00_cntPlh_elStates_lstItems>option").each do |elem|
|
|
35
|
+
stage_list << elem.text
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
stage_list
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def modify stage_name
|
|
42
|
+
states_element.select stage_name
|
|
43
|
+
self.modify_button
|
|
44
|
+
|
|
45
|
+
# Return the page object of the next page.
|
|
46
|
+
WorkflowDetailPage.new(@browser, false)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def delete stage_name
|
|
50
|
+
raise ArgumentError, "Missing stage name" if stage_name.nil? || stage_name.empty?
|
|
51
|
+
raise ArgumentError, "Stage name '#{name}' does not exist" if !states_options.include?(stage_name)
|
|
52
|
+
|
|
53
|
+
states_element.select stage_name
|
|
54
|
+
self.delete_button
|
|
55
|
+
|
|
56
|
+
self
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def add
|
|
60
|
+
self.add_button
|
|
61
|
+
|
|
62
|
+
# Return the page object of the next page.
|
|
63
|
+
WorkflowDetailPage.new(@browser, false)
|
|
64
|
+
end
|
|
65
|
+
end # class
|
|
66
|
+
end # module
|
|
67
|
+
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
##############################################################################
|
|
2
|
+
# File:: workflow_task_page.rb
|
|
3
|
+
# Purpose:: Task definition edit page for AdminModule
|
|
4
|
+
#
|
|
5
|
+
# Author:: Jeff McAffee 2015-04-19
|
|
6
|
+
#
|
|
7
|
+
##############################################################################
|
|
8
|
+
require 'page-object'
|
|
9
|
+
|
|
10
|
+
module AdminModule::Pages
|
|
11
|
+
|
|
12
|
+
class WorkflowTaskPage
|
|
13
|
+
include PageObject
|
|
14
|
+
|
|
15
|
+
#page_url(:get_dynamic_url)
|
|
16
|
+
|
|
17
|
+
#def get_dynamic_url
|
|
18
|
+
# AdminModule.configuration.url(DcDetailPage)
|
|
19
|
+
#end
|
|
20
|
+
|
|
21
|
+
text_field(:name,
|
|
22
|
+
id: 'ctl00_cntPlh_txtTaskName')
|
|
23
|
+
|
|
24
|
+
select_list(:schedule,
|
|
25
|
+
id: 'ctl00_cntPlh_ddlSchedule')
|
|
26
|
+
|
|
27
|
+
select_list(:priority,
|
|
28
|
+
id: 'ctl00_cntPlh_ddlPriority')
|
|
29
|
+
|
|
30
|
+
text_field(:due_days,
|
|
31
|
+
id: 'ctl00_cntPlh_txtDueDays')
|
|
32
|
+
|
|
33
|
+
select_list(:due_hours,
|
|
34
|
+
id: 'ctl00_cntPlh_ddlDueHours')
|
|
35
|
+
|
|
36
|
+
select_list(:due_minutes,
|
|
37
|
+
id: 'ctl00_cntPlh_ddlDueMinutes')
|
|
38
|
+
|
|
39
|
+
select_list(:followup,
|
|
40
|
+
id: 'ctl00_cntPlh_ddlFollowupOptions')
|
|
41
|
+
|
|
42
|
+
select_list(:assignedto,
|
|
43
|
+
id: 'ctl00_cntPlh_ddlScheduleFor')
|
|
44
|
+
|
|
45
|
+
text_field(:fees,
|
|
46
|
+
id: 'ctl00_cntPlh_txtFeesAssigned')
|
|
47
|
+
|
|
48
|
+
text_area(:details,
|
|
49
|
+
id: 'ctl00_cntPlh_txtTaskDescription')
|
|
50
|
+
|
|
51
|
+
select_list(:letter_agreement,
|
|
52
|
+
id: 'ctl00_cntPlh_ddlLetterAgreement')
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
button(:save_button,
|
|
57
|
+
id: 'ctl00_cntPlh_btnSave')
|
|
58
|
+
|
|
59
|
+
button(:cancel_button,
|
|
60
|
+
id: 'ctl00_cntPlh_btnCancel')
|
|
61
|
+
|
|
62
|
+
def get_task_data
|
|
63
|
+
data = { name: self.name,
|
|
64
|
+
schedule: self.schedule_element.selected_options[0],
|
|
65
|
+
priority: self.priority_element.selected_options[0],
|
|
66
|
+
due_days: self.due_days,
|
|
67
|
+
due_hours: self.due_hours_element.selected_options[0],
|
|
68
|
+
due_minutes: self.due_minutes_element.selected_options[0],
|
|
69
|
+
followup: self.followup_element.selected_options[0],
|
|
70
|
+
assignedto: self.assignedto_element.selected_options[0],
|
|
71
|
+
fees: self.fees,
|
|
72
|
+
details: self.details,
|
|
73
|
+
letter_agreement: self.letter_agreement_element.selected_options[0],
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
data
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def set_task_data data
|
|
80
|
+
self.name = data[:name]
|
|
81
|
+
self.schedule_element.select data[:schedule]
|
|
82
|
+
self.priority_element.select data[:priority]
|
|
83
|
+
self.due_days = data[:due_days]
|
|
84
|
+
self.due_hours_element.select data[:due_hours]
|
|
85
|
+
self.due_minutes_element.select data[:due_minutes]
|
|
86
|
+
self.followup_element.select data[:followup]
|
|
87
|
+
self.assignedto_element.select data[:assignedto]
|
|
88
|
+
self.fees = data[:fees]
|
|
89
|
+
self.details = data[:details]
|
|
90
|
+
self.letter_agreement_element.select data[:letter_agreement]
|
|
91
|
+
|
|
92
|
+
self
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def save
|
|
96
|
+
self.save_button
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def set_name name
|
|
100
|
+
self.name = name
|
|
101
|
+
|
|
102
|
+
self
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
end # module Pages
|
|
107
|
+
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
##############################################################################
|
|
2
|
+
# File:: workflow_tasks_page.rb
|
|
3
|
+
# Purpose:: Workflow Tasks page
|
|
4
|
+
#
|
|
5
|
+
# admin/security/WorkflowTasks.aspx?act=2
|
|
6
|
+
#
|
|
7
|
+
# Author:: Jeff McAffee 2015-04-19
|
|
8
|
+
#
|
|
9
|
+
##############################################################################
|
|
10
|
+
require 'page-object'
|
|
11
|
+
|
|
12
|
+
module AdminModule
|
|
13
|
+
module Pages
|
|
14
|
+
class WorkflowTasksPage
|
|
15
|
+
include PageObject
|
|
16
|
+
|
|
17
|
+
page_url(:get_dynamic_url)
|
|
18
|
+
|
|
19
|
+
def get_dynamic_url
|
|
20
|
+
AdminModule.configuration.base_url + "/admin/security/WorkflowTasks.aspx?act=2"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
button(:add_button,
|
|
24
|
+
id: 'ctl00_cntPlh_btnAdd')
|
|
25
|
+
|
|
26
|
+
button(:modify_button,
|
|
27
|
+
id: 'ctl00_cntPlh_btnModify')
|
|
28
|
+
|
|
29
|
+
button(:delete_button,
|
|
30
|
+
id: 'ctl00_cntPlh_btnDelete')
|
|
31
|
+
|
|
32
|
+
###
|
|
33
|
+
# Return an array of task names
|
|
34
|
+
#
|
|
35
|
+
|
|
36
|
+
def get_tasks
|
|
37
|
+
get_tasks_and_ids.keys
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
###
|
|
41
|
+
# Modify a task - browses to the task details page.
|
|
42
|
+
#
|
|
43
|
+
# Returns the Task Details page object (so methods can be chained).
|
|
44
|
+
#
|
|
45
|
+
|
|
46
|
+
def modify name
|
|
47
|
+
tasks = get_tasks_and_ids
|
|
48
|
+
|
|
49
|
+
detail_page tasks[name]
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
###
|
|
53
|
+
# Add a task - browses to the 'new' task page.
|
|
54
|
+
#
|
|
55
|
+
# Returns the Task Details page object (so methods can be chained).
|
|
56
|
+
#
|
|
57
|
+
|
|
58
|
+
def add
|
|
59
|
+
self.add_button
|
|
60
|
+
|
|
61
|
+
# Return the page object of the next page.
|
|
62
|
+
detail_page
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
private
|
|
66
|
+
|
|
67
|
+
###
|
|
68
|
+
# Not used at this time, but this is a valid reference to the task details table.
|
|
69
|
+
#
|
|
70
|
+
|
|
71
|
+
def tasks_table
|
|
72
|
+
table_elements[0].table_elements[1]
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
###
|
|
76
|
+
# Return a hash of task names and ids
|
|
77
|
+
#
|
|
78
|
+
# ex: { 'Some Task Name' => 24 }
|
|
79
|
+
#
|
|
80
|
+
# The ID can be used to edit a specific task.
|
|
81
|
+
#
|
|
82
|
+
|
|
83
|
+
def get_tasks_and_ids
|
|
84
|
+
task_names = Hash.new
|
|
85
|
+
|
|
86
|
+
Nokogiri::HTML(@browser.html).css("#ctl00_cntPlh_dgrTasks>tbody>tr").each do |tr|
|
|
87
|
+
id = tr['taskid']
|
|
88
|
+
name = tr.css("td:nth-child(1)").text
|
|
89
|
+
task_names[name] = id
|
|
90
|
+
end # css
|
|
91
|
+
|
|
92
|
+
task_names
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
###
|
|
96
|
+
# Return a page object for the Task Detail page
|
|
97
|
+
#
|
|
98
|
+
# To edit a specific task, pass an id. The browser will navigate to the task edit url.
|
|
99
|
+
#
|
|
100
|
+
|
|
101
|
+
def detail_page id = nil
|
|
102
|
+
unless id.nil?
|
|
103
|
+
navigate_to AdminModule.configuration.base_url + "/admin/security/WorkflowTask.aspx?TaskID=#{id}"
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
WorkflowTaskPage.new(@browser, false)
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|