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,451 @@
|
|
|
1
|
+
##############################################################################
|
|
2
|
+
# File:: workflow_detail_page.rb
|
|
3
|
+
# Purpose:: Stage detail page for AdminModule
|
|
4
|
+
#
|
|
5
|
+
# Author:: Jeff McAffee 2013-12-12
|
|
6
|
+
#
|
|
7
|
+
##############################################################################
|
|
8
|
+
require 'page-object'
|
|
9
|
+
require 'nokogiri'
|
|
10
|
+
|
|
11
|
+
module AdminModule::Pages
|
|
12
|
+
|
|
13
|
+
class WorkflowDetailPage
|
|
14
|
+
include PageObject
|
|
15
|
+
|
|
16
|
+
#page_url(:get_dynamic_url)
|
|
17
|
+
|
|
18
|
+
def get_dynamic_url
|
|
19
|
+
AdminModule.configuration.url(WorkflowDetailPage)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Tabs
|
|
23
|
+
|
|
24
|
+
link(:details_tab,
|
|
25
|
+
text: 'Details')
|
|
26
|
+
|
|
27
|
+
link(:transition_reasons_tab,
|
|
28
|
+
text: 'Transition Reasons')
|
|
29
|
+
|
|
30
|
+
link(:transition_to_states_tab,
|
|
31
|
+
text: 'Transition To States')
|
|
32
|
+
|
|
33
|
+
link(:groups_tab,
|
|
34
|
+
text: 'Groups')
|
|
35
|
+
|
|
36
|
+
link(:tasks_tab,
|
|
37
|
+
text: 'Tasks')
|
|
38
|
+
|
|
39
|
+
link(:workflow_events_tab,
|
|
40
|
+
text: 'Workflow Events')
|
|
41
|
+
|
|
42
|
+
link(:data_clearing_definitions_tab,
|
|
43
|
+
text: 'Data Clearing Definitions')
|
|
44
|
+
|
|
45
|
+
# Controls
|
|
46
|
+
|
|
47
|
+
# Details Tab
|
|
48
|
+
|
|
49
|
+
text_field( :name,
|
|
50
|
+
id: 'ctl00_cntPlh_txtStateName')
|
|
51
|
+
|
|
52
|
+
# Transition To States Tab
|
|
53
|
+
|
|
54
|
+
select_list(:available_states,
|
|
55
|
+
id: 'ctl00_cntPlh_tsStates_lstAvailable')
|
|
56
|
+
|
|
57
|
+
select_list(:selected_states,
|
|
58
|
+
id: 'ctl00_cntPlh_tsStates_lstSelected')
|
|
59
|
+
|
|
60
|
+
button(:add_state_button,
|
|
61
|
+
id: 'ctl00_cntPlh_tsStates_btnAdd')
|
|
62
|
+
|
|
63
|
+
button(:add_all_states_button,
|
|
64
|
+
id: 'ctl00_cntPlh_tsStates_btnAddAll')
|
|
65
|
+
|
|
66
|
+
button(:remove_state_button,
|
|
67
|
+
id: 'ctl00_cntPlh_tsStates_btnRemove')
|
|
68
|
+
|
|
69
|
+
button(:remove_all_states_button,
|
|
70
|
+
id: 'ctl00_cntPlh_tsStates_btnRemoveAll')
|
|
71
|
+
|
|
72
|
+
# Groups Tab
|
|
73
|
+
|
|
74
|
+
select_list(:available_groups,
|
|
75
|
+
id: 'ctl00_cntPlh_tsGroups_lstAvailable')
|
|
76
|
+
|
|
77
|
+
select_list(:selected_groups,
|
|
78
|
+
id: 'ctl00_cntPlh_tsGroups_lstSelected')
|
|
79
|
+
|
|
80
|
+
button(:add_group_button,
|
|
81
|
+
id: 'ctl00_cntPlh_tsGroups_btnAdd')
|
|
82
|
+
|
|
83
|
+
button(:add_all_groups_button,
|
|
84
|
+
id: 'ctl00_cntPlh_tsGroups_btnAddAll')
|
|
85
|
+
|
|
86
|
+
button(:remove_group_button,
|
|
87
|
+
id: 'ctl00_cntPlh_tsGroups_btnRemove')
|
|
88
|
+
|
|
89
|
+
button(:remove_all_groups_button,
|
|
90
|
+
id: 'ctl00_cntPlh_tsGroups_btnRemoveAll')
|
|
91
|
+
|
|
92
|
+
# Tasks Tab
|
|
93
|
+
|
|
94
|
+
select_list(:available_tasks,
|
|
95
|
+
id: 'ctl00_cntPlh_tsTasks_lstAvailable')
|
|
96
|
+
|
|
97
|
+
select_list(:selected_tasks,
|
|
98
|
+
id: 'ctl00_cntPlh_tsTasks_lstSelected')
|
|
99
|
+
|
|
100
|
+
button(:add_task_button,
|
|
101
|
+
id: 'ctl00_cntPlh_tsTasks_btnAdd')
|
|
102
|
+
|
|
103
|
+
button(:add_all_task_button,
|
|
104
|
+
id: 'ctl00_cntPlh_tsTasks_btnAddAll')
|
|
105
|
+
|
|
106
|
+
button(:remove_task_button,
|
|
107
|
+
id: 'ctl00_cntPlh_tsTasks_btnRemove')
|
|
108
|
+
|
|
109
|
+
button(:remove_all_tasks_button,
|
|
110
|
+
id: 'ctl00_cntPlh_tsTasks_btnRemoveAll')
|
|
111
|
+
|
|
112
|
+
button(:additional_details_button,
|
|
113
|
+
text: 'Manage Addl Details')
|
|
114
|
+
|
|
115
|
+
button(:screen_mappings_button,
|
|
116
|
+
text: 'Manage Screen Mappings')
|
|
117
|
+
|
|
118
|
+
button(:version_button,
|
|
119
|
+
text: 'Version')
|
|
120
|
+
|
|
121
|
+
# Data Clearing Definitions Tab
|
|
122
|
+
|
|
123
|
+
select_list(:data_clearing_definition,
|
|
124
|
+
id: 'ctl00_cntPlh_ddlDataClearing')
|
|
125
|
+
|
|
126
|
+
text_field( :data_clearing_days,
|
|
127
|
+
id: 'ctl00_cntPlh_txtDays')
|
|
128
|
+
|
|
129
|
+
select_list(:data_clearing_days_type,
|
|
130
|
+
id: 'ctl00_cntPlh_ddlDays')
|
|
131
|
+
|
|
132
|
+
button(:version_dc_button,
|
|
133
|
+
id: 'ctl00_cntPlh_btnDataVersion')
|
|
134
|
+
|
|
135
|
+
# Errors Span
|
|
136
|
+
|
|
137
|
+
span(:errors_span,
|
|
138
|
+
id: 'ctl00_cntPlh_ctlErrors_lblError')
|
|
139
|
+
|
|
140
|
+
# Save/Cancel buttons
|
|
141
|
+
button(:save_button,
|
|
142
|
+
id: 'ctl00_cntPlh_btnSave')
|
|
143
|
+
|
|
144
|
+
button(:cancel_button,
|
|
145
|
+
id: 'ctl00_cntPlh_btnCancel')
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def get_stage_data
|
|
149
|
+
stage_data = {}
|
|
150
|
+
|
|
151
|
+
self.details_tab
|
|
152
|
+
stage_data[:name] = self.name
|
|
153
|
+
|
|
154
|
+
self.transition_to_states_tab
|
|
155
|
+
stage_data[:transition_to] = get_selected_state_options
|
|
156
|
+
|
|
157
|
+
self.groups_tab
|
|
158
|
+
stage_data[:groups] = get_selected_group_options
|
|
159
|
+
|
|
160
|
+
stage_data[:tasks] = get_tasks
|
|
161
|
+
|
|
162
|
+
self.workflow_events_tab
|
|
163
|
+
stage_data[:events] = capture_events
|
|
164
|
+
|
|
165
|
+
self.data_clearing_definitions_tab
|
|
166
|
+
stage_data[:dc] = Hash.new
|
|
167
|
+
stage_data[:dc][:definition] = self.data_clearing_definition
|
|
168
|
+
stage_data[:dc][:days] = self.data_clearing_days
|
|
169
|
+
stage_data[:dc][:days_type] = self.data_clearing_days_type
|
|
170
|
+
|
|
171
|
+
stage_data
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
class WorkflowEvent
|
|
176
|
+
attr_reader :guideline
|
|
177
|
+
attr_reader :event
|
|
178
|
+
attr_reader :id
|
|
179
|
+
|
|
180
|
+
def initialize(cells)
|
|
181
|
+
@event = cells[0].text.strip
|
|
182
|
+
@guideline = get_selected_option(cells[1].css('select'))
|
|
183
|
+
@id = cells[1].css('select').attribute('id').value
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
def get_selected_option elem
|
|
187
|
+
elem.children.each do |c|
|
|
188
|
+
if c.attributes.has_key? 'selected'
|
|
189
|
+
return c.text
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def workflow_events
|
|
197
|
+
events = []
|
|
198
|
+
|
|
199
|
+
Nokogiri::HTML(@browser.html).css("table#ctl00_cntPlh_DatagridEvents").each do |tbl|
|
|
200
|
+
rows = tbl.css('tr')
|
|
201
|
+
rows.each do |r|
|
|
202
|
+
next if r.attribute('class').value == 'GridHeader'
|
|
203
|
+
cells = r.css('td')
|
|
204
|
+
|
|
205
|
+
events << WorkflowEvent.new(cells)
|
|
206
|
+
end # ech row
|
|
207
|
+
end # nokogiri
|
|
208
|
+
|
|
209
|
+
events
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def capture_events
|
|
213
|
+
captured_events = {}
|
|
214
|
+
|
|
215
|
+
workflow_events.each do |ev|
|
|
216
|
+
captured_events[ev.event] = ev.guideline
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
captured_events
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
def set_stage_data data
|
|
223
|
+
# Set tasks first - Save button on Addl Details and/or Version button
|
|
224
|
+
# causes a refresh which discards changes made in other tabs.
|
|
225
|
+
set_tasks data[:tasks] if data.key?(:tasks)
|
|
226
|
+
|
|
227
|
+
# Version button on DC tab may cause a refresh which discards changes
|
|
228
|
+
# made in other tabs.
|
|
229
|
+
set_data_clearing data[:dc] if data.key?(:dc)
|
|
230
|
+
|
|
231
|
+
set_name data[:name] if data.key?(:name)
|
|
232
|
+
|
|
233
|
+
set_transitions data[:transition_to] if data.key?(:transition_to)
|
|
234
|
+
|
|
235
|
+
set_groups data[:groups] if data.key?(:groups)
|
|
236
|
+
|
|
237
|
+
set_events data[:events] if data.key?(:events)
|
|
238
|
+
|
|
239
|
+
self
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
def save
|
|
243
|
+
self.save_button
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
def set_name name
|
|
247
|
+
self.details_tab
|
|
248
|
+
self.name = name
|
|
249
|
+
|
|
250
|
+
self
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
def set_transitions trans
|
|
254
|
+
self.transition_to_states_tab
|
|
255
|
+
set_transition_states trans
|
|
256
|
+
|
|
257
|
+
self
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
def set_groups groups
|
|
261
|
+
self.groups_tab
|
|
262
|
+
set_group_data groups
|
|
263
|
+
|
|
264
|
+
self
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
def get_tasks
|
|
268
|
+
self.tasks_tab
|
|
269
|
+
|
|
270
|
+
tasks = Array.new
|
|
271
|
+
selected_tasks_options.each do |task_name|
|
|
272
|
+
tasks << { name: task_name }
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
# Open the Addl Details page and update the settings
|
|
276
|
+
self.additional_details_button
|
|
277
|
+
addtl_page = WorkflowDetailTaskAddlDetailPage.new(@browser, false)
|
|
278
|
+
|
|
279
|
+
addl_data = addtl_page.get_data
|
|
280
|
+
addtl_page.cancel
|
|
281
|
+
|
|
282
|
+
# Merge addl detail data
|
|
283
|
+
tasks.collect! do |task|
|
|
284
|
+
task[:sequence] = addl_data[task[:name]][:sequence]
|
|
285
|
+
task[:predecessors] = addl_data[task[:name]][:predecessors]
|
|
286
|
+
task[:regenerate] = addl_data[task[:name]][:regenerate]
|
|
287
|
+
task
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
# Open the screen mappings page and update the mappings
|
|
291
|
+
self.screen_mappings_button
|
|
292
|
+
mappings_page = WorkflowDetailTaskMappingsPage.new(@browser, false)
|
|
293
|
+
|
|
294
|
+
mapping_data = mappings_page.get_data
|
|
295
|
+
mappings_page.back
|
|
296
|
+
|
|
297
|
+
tasks.collect! do |task|
|
|
298
|
+
task[:mapped_screens] = mapping_data[task[:name]][:mapped_screens]
|
|
299
|
+
task
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
# Merge mapping data in to the task data structure
|
|
303
|
+
tasks
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
def set_tasks tasks
|
|
307
|
+
self.tasks_tab
|
|
308
|
+
|
|
309
|
+
has_existing_tasks = (selected_tasks_options.count > 0)
|
|
310
|
+
|
|
311
|
+
if has_existing_tasks
|
|
312
|
+
# Open the Addl Details page and clear all settings
|
|
313
|
+
self.additional_details_button
|
|
314
|
+
addtl_page = WorkflowDetailTaskAddlDetailPage.new(@browser, false)
|
|
315
|
+
|
|
316
|
+
addtl_page.clear_data
|
|
317
|
+
addtl_page.save
|
|
318
|
+
|
|
319
|
+
self.version_button
|
|
320
|
+
end
|
|
321
|
+
|
|
322
|
+
# Remove all tasks, then add back the requested tasks.
|
|
323
|
+
self.remove_all_tasks_button
|
|
324
|
+
tasks.each do |task|
|
|
325
|
+
available_tasks_element.select(task[:name])
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
if tasks.count > 0
|
|
329
|
+
self.add_task_button
|
|
330
|
+
# Version the added tasks before opening Addtl Details screen
|
|
331
|
+
self.version_button
|
|
332
|
+
|
|
333
|
+
# Open the Addl Details page and update the settings
|
|
334
|
+
self.additional_details_button
|
|
335
|
+
addtl_page = WorkflowDetailTaskAddlDetailPage.new(@browser, false)
|
|
336
|
+
|
|
337
|
+
addtl_page.set_data tasks
|
|
338
|
+
addtl_page.save
|
|
339
|
+
|
|
340
|
+
# Open the screen mappings page and update the mappings
|
|
341
|
+
self.screen_mappings_button
|
|
342
|
+
mappings_page = WorkflowDetailTaskMappingsPage.new(@browser, false)
|
|
343
|
+
|
|
344
|
+
mappings_page.set_data tasks
|
|
345
|
+
mappings_page.back
|
|
346
|
+
|
|
347
|
+
# Click the version button to save the changes
|
|
348
|
+
self.version_button
|
|
349
|
+
end
|
|
350
|
+
end
|
|
351
|
+
|
|
352
|
+
def set_events events
|
|
353
|
+
self.workflow_events_tab
|
|
354
|
+
|
|
355
|
+
current_events = {}
|
|
356
|
+
workflow_events.each do |ev|
|
|
357
|
+
current_events[ev.event] = ev
|
|
358
|
+
end
|
|
359
|
+
|
|
360
|
+
events.each do |event, gdl|
|
|
361
|
+
current_event = current_events[event]
|
|
362
|
+
|
|
363
|
+
unless current_event.nil?
|
|
364
|
+
id = current_event.id
|
|
365
|
+
current_gdl = current_event.guideline
|
|
366
|
+
|
|
367
|
+
if gdl != current_gdl
|
|
368
|
+
sel = select_list_elements(id: id)[0]
|
|
369
|
+
|
|
370
|
+
unless sel.nil?
|
|
371
|
+
sel.select gdl
|
|
372
|
+
end
|
|
373
|
+
end
|
|
374
|
+
end
|
|
375
|
+
end
|
|
376
|
+
|
|
377
|
+
self
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
def set_data_clearing dc
|
|
381
|
+
self.data_clearing_definitions_tab
|
|
382
|
+
|
|
383
|
+
# No need to make changes if none need to be made
|
|
384
|
+
return if dc[:definition].empty? && self.data_clearing_definition.empty?
|
|
385
|
+
|
|
386
|
+
self.data_clearing_definition_element.select dc[:definition]
|
|
387
|
+
self.data_clearing_days = dc[:days]
|
|
388
|
+
self.data_clearing_days_type_element.select dc[:days_type]
|
|
389
|
+
|
|
390
|
+
self.version_dc_button
|
|
391
|
+
end
|
|
392
|
+
|
|
393
|
+
private
|
|
394
|
+
|
|
395
|
+
include SelectListSyncable
|
|
396
|
+
|
|
397
|
+
def get_available_state_options
|
|
398
|
+
vars = []
|
|
399
|
+
Nokogiri::HTML(@browser.html).css('#ctl00_cntPlh_tsStates_lstAvailable > option').each do |elem|
|
|
400
|
+
vars << elem.text
|
|
401
|
+
end
|
|
402
|
+
vars
|
|
403
|
+
end
|
|
404
|
+
|
|
405
|
+
def get_selected_state_options
|
|
406
|
+
vars = []
|
|
407
|
+
Nokogiri::HTML(@browser.html).css('#ctl00_cntPlh_tsStates_lstSelected > option').each do |elem|
|
|
408
|
+
vars << elem.text
|
|
409
|
+
end
|
|
410
|
+
vars
|
|
411
|
+
end
|
|
412
|
+
|
|
413
|
+
def set_transition_states data
|
|
414
|
+
sync_available_and_selected_lists get_available_state_options,
|
|
415
|
+
available_states_element,
|
|
416
|
+
get_selected_state_options,
|
|
417
|
+
selected_states_element,
|
|
418
|
+
add_state_button_element,
|
|
419
|
+
remove_state_button_element,
|
|
420
|
+
data
|
|
421
|
+
end
|
|
422
|
+
|
|
423
|
+
def get_available_group_options
|
|
424
|
+
vars = []
|
|
425
|
+
Nokogiri::HTML(@browser.html).css('#ctl00_cntPlh_tsGroups_lstAvailable > option').each do |elem|
|
|
426
|
+
vars << elem.text
|
|
427
|
+
end
|
|
428
|
+
vars
|
|
429
|
+
end
|
|
430
|
+
|
|
431
|
+
def get_selected_group_options
|
|
432
|
+
vars = []
|
|
433
|
+
Nokogiri::HTML(@browser.html).css('#ctl00_cntPlh_tsGroups_lstSelected > option').each do |elem|
|
|
434
|
+
vars << elem.text
|
|
435
|
+
end
|
|
436
|
+
vars
|
|
437
|
+
end
|
|
438
|
+
|
|
439
|
+
def set_group_data data
|
|
440
|
+
sync_available_and_selected_lists get_available_group_options,
|
|
441
|
+
available_groups_element,
|
|
442
|
+
get_selected_group_options,
|
|
443
|
+
selected_groups_element,
|
|
444
|
+
add_group_button_element,
|
|
445
|
+
remove_group_button_element,
|
|
446
|
+
data
|
|
447
|
+
end
|
|
448
|
+
end # class WorkflowDetailPage
|
|
449
|
+
|
|
450
|
+
end # module Pages
|
|
451
|
+
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
##############################################################################
|
|
2
|
+
# File:: workflow_detail_task_addl_detail_page.rb
|
|
3
|
+
# Purpose:: Stage Task Additional 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 WorkflowDetailTaskAddlDetailPage
|
|
14
|
+
include PageObject
|
|
15
|
+
|
|
16
|
+
#page_url(:get_dynamic_url)
|
|
17
|
+
|
|
18
|
+
# The only access is through the Tasks tab Manage Addl Details 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
|
+
button(:save_button,
|
|
30
|
+
id: 'ctl00_cntPlh_btnSave')
|
|
31
|
+
|
|
32
|
+
button(:cancel_button,
|
|
33
|
+
id: 'ctl00_cntPlh_btnCancel')
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def get_data
|
|
37
|
+
get_tasks_details
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def set_data data
|
|
41
|
+
set_tasks_details data
|
|
42
|
+
|
|
43
|
+
self
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def clear_data
|
|
47
|
+
clear_tasks_details
|
|
48
|
+
|
|
49
|
+
self
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def save
|
|
53
|
+
# If there are no tasks, the error span will be populated and the Save
|
|
54
|
+
# button will not be available.
|
|
55
|
+
# In this case, click the Cancel button and move on.
|
|
56
|
+
if error_span? && error_span.include?('No task defined')
|
|
57
|
+
self.cancel_button
|
|
58
|
+
return
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
self.save_button
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def cancel
|
|
65
|
+
self.cancel_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_tasks_details details
|
|
85
|
+
capture_details.each do |item|
|
|
86
|
+
details.each do |dtl|
|
|
87
|
+
if dtl[:name] == item.name
|
|
88
|
+
# We've found a match, get the field
|
|
89
|
+
txt = text_field_elements(id: item.pred_id)[0]
|
|
90
|
+
# set the predecessors field to the stored value
|
|
91
|
+
txt.value = dtl[:predecessors]
|
|
92
|
+
|
|
93
|
+
# Get the checkbox field
|
|
94
|
+
ck = checkbox_elements(id: item.reg_id)[0]
|
|
95
|
+
# Check/uncheck it
|
|
96
|
+
if dtl[:regenerate]
|
|
97
|
+
ck.check
|
|
98
|
+
else
|
|
99
|
+
ck.uncheck
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
break
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
self
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def clear_tasks_details
|
|
111
|
+
capture_details.each do |item|
|
|
112
|
+
# set the predecessors field to blank
|
|
113
|
+
txt = text_field_elements(id: item.pred_id)[0]
|
|
114
|
+
txt.value = ''
|
|
115
|
+
|
|
116
|
+
# Clear the checkbox field
|
|
117
|
+
ck = checkbox_elements(id: item.reg_id)[0]
|
|
118
|
+
ck.uncheck
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
self
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
class TaskDetail
|
|
125
|
+
attr_accessor :sequence
|
|
126
|
+
attr_accessor :name
|
|
127
|
+
attr_accessor :predecessors
|
|
128
|
+
attr_accessor :pred_id
|
|
129
|
+
attr_accessor :regenerate
|
|
130
|
+
attr_accessor :reg_id
|
|
131
|
+
|
|
132
|
+
def to_hsh
|
|
133
|
+
{
|
|
134
|
+
sequence: @sequence,
|
|
135
|
+
name: @name,
|
|
136
|
+
predecessors: @predecessors,
|
|
137
|
+
regenerate: @regenerate,
|
|
138
|
+
}
|
|
139
|
+
end
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
###
|
|
143
|
+
# Build a list of objects containing task detail data.
|
|
144
|
+
#
|
|
145
|
+
# We use this method even though we don't need to (for get_xxx) because we'll
|
|
146
|
+
# need the captured field ids for *setting* values.
|
|
147
|
+
#
|
|
148
|
+
|
|
149
|
+
def capture_details
|
|
150
|
+
details = []
|
|
151
|
+
|
|
152
|
+
Nokogiri::HTML(@browser.html).css("#ctl00_cntPlh_gvTask>tbody>tr").each do |tr|
|
|
153
|
+
# Skip the header row
|
|
154
|
+
next if tr['class'] == 'GridHeader'
|
|
155
|
+
|
|
156
|
+
detail = TaskDetail.new
|
|
157
|
+
detail.sequence = tr.css("td:nth-child(1)").text
|
|
158
|
+
detail.name = tr.css("td:nth-child(2)").text
|
|
159
|
+
detail.predecessors = tr.css("td:nth-child(3)>input").text
|
|
160
|
+
detail.pred_id = tr.css("td:nth-child(3)>input")[0]['id']
|
|
161
|
+
detail.regenerate = tr.css("td:nth-child(4)>input")[0]['checked'] == 'checked'
|
|
162
|
+
detail.reg_id = tr.css("td:nth-child(4)>input")[0]['id']
|
|
163
|
+
|
|
164
|
+
details << detail
|
|
165
|
+
end # css
|
|
166
|
+
|
|
167
|
+
details
|
|
168
|
+
end
|
|
169
|
+
end # class WorkflowDetailTaskAddlDetailPage
|
|
170
|
+
|
|
171
|
+
end # module Pages
|
|
172
|
+
|