kuality-coeus 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/Gemfile +1 -1
- data/Gemfile.lock +2 -2
- data/features/grants_gov/grants_gov_forms/code_and_form_mapping.feature +1 -1
- data/features/grants_gov/grants_gov_forms/s2s_questionnaire.feature +8 -12
- data/features/grants_gov/s2s_submission.feature +7 -4
- data/features/grants_gov/s2s_validation.feature +3 -3
- data/features/proposal_development/create_proposal.feature +2 -9
- data/features/proposal_development/key_personnel_validations.feature +1 -7
- data/features/proposal_development/proposal_permissions.feature +1 -28
- data/features/proposal_development/proposal_workflow.feature +1 -7
- data/features/roles/roles.feature +14 -0
- data/features/step_definitions/awards/create_award.rb +15 -0
- data/features/step_definitions/budget_versions/budget_versions.rb +8 -1
- data/features/step_definitions/grants_gov/s2s_submission.rb +2 -2
- data/features/step_definitions/groups.rb +13 -0
- data/features/step_definitions/maintenance.rb +7 -0
- data/features/step_definitions/proposal_development/budget_versions.rb +98 -0
- data/features/step_definitions/proposal_development/edit_proposal.rb +4 -0
- data/features/step_definitions/proposal_development/key_personnel_validations.rb +7 -7
- data/features/step_definitions/proposal_development/proposal_permissions.rb +20 -2
- data/features/step_definitions/proposal_logs/create_proposal_log.rb +13 -0
- data/features/step_definitions/protocol_development/irb_create_protocol.rb +28 -0
- data/features/step_definitions/roles.rb +17 -0
- data/features/step_definitions/users.rb +42 -7
- data/features/support/env.rb +16 -1
- data/kuality-coeus.gemspec +2 -2
- data/lib/kuality-coeus.rb +1 -0
- data/lib/kuality-coeus/data_objects/award/award.rb +13 -14
- data/lib/kuality-coeus/data_objects/award/award_transaction.rb +3 -1
- data/lib/kuality-coeus/data_objects/budget/budget_periods.rb +17 -3
- data/lib/kuality-coeus/data_objects/budget/budget_versions.rb +9 -12
- data/lib/kuality-coeus/data_objects/budget/cost_sharing.rb +56 -0
- data/lib/kuality-coeus/data_objects/budget/personnel.rb +3 -3
- data/lib/kuality-coeus/data_objects/budget/subaward_budget.rb +2 -2
- data/lib/kuality-coeus/data_objects/committee_document/committee_document.rb +2 -2
- data/lib/kuality-coeus/data_objects/committee_document/committee_members.rb +4 -2
- data/lib/kuality-coeus/data_objects/committee_document/committee_schedule.rb +3 -1
- data/lib/kuality-coeus/data_objects/committee_document/member_roles.rb +3 -1
- data/lib/kuality-coeus/data_objects/compliance_and_protocol/irb_protocol_development.rb +86 -0
- data/lib/kuality-coeus/data_objects/identity/group.rb +22 -8
- data/lib/kuality-coeus/{page_objects/identity/assignee.rb → data_objects/identity/group_assignee.rb} +4 -4
- data/lib/kuality-coeus/data_objects/identity/role.rb +124 -0
- data/lib/kuality-coeus/data_objects/identity/role_assignee.rb +43 -0
- data/lib/kuality-coeus/data_objects/institutional_proposal/institutional_proposal.rb +87 -4
- data/lib/kuality-coeus/data_objects/institutional_proposal/ip_cost_sharing.rb +61 -0
- data/lib/kuality-coeus/data_objects/institutional_proposal/project_personnel.rb +35 -0
- data/lib/kuality-coeus/data_objects/institutional_proposal/unrecovered_fa.rb +64 -0
- data/lib/kuality-coeus/data_objects/maintenance/budget_column.rb +89 -0
- data/lib/kuality-coeus/data_objects/navigation.rb +12 -0
- data/lib/kuality-coeus/data_objects/proposal_development/degrees.rb +2 -2
- data/lib/kuality-coeus/data_objects/proposal_development/key_personnel.rb +6 -5
- data/lib/kuality-coeus/data_objects/proposal_development/personnel_attachments.rb +3 -3
- data/lib/kuality-coeus/data_objects/proposal_development/proposal_attachments.rb +3 -3
- data/lib/kuality-coeus/data_objects/proposal_development/proposal_development.rb +28 -34
- data/lib/kuality-coeus/data_objects/proposal_development/special_review.rb +3 -1
- data/lib/kuality-coeus/data_objects/proposal_log/proposal_log.rb +73 -0
- data/lib/kuality-coeus/data_objects/rates/institute_rate.rb +1 -0
- data/lib/kuality-coeus/data_objects/{user.rb → user/user.rb} +164 -146
- data/lib/kuality-coeus/data_objects/user/user_group.rb +36 -0
- data/lib/kuality-coeus/data_objects/user/user_role.rb +45 -0
- data/lib/kuality-coeus/page_objects/000_base_page.rb +27 -6
- data/lib/kuality-coeus/page_objects/budget/distribution_income.rb +14 -0
- data/lib/kuality-coeus/page_objects/central_admin.rb +2 -3
- data/lib/kuality-coeus/page_objects/identity/group.rb +2 -2
- data/lib/kuality-coeus/page_objects/identity/person.rb +7 -3
- data/lib/kuality-coeus/page_objects/identity/role.rb +38 -0
- data/lib/kuality-coeus/page_objects/institute_rates_maintenance.rb +18 -0
- data/lib/kuality-coeus/page_objects/institutional_proposal/institutional_proposal.rb +2 -0
- data/lib/kuality-coeus/page_objects/kc_protocol.rb +2 -0
- data/lib/kuality-coeus/page_objects/login.rb +1 -1
- data/lib/kuality-coeus/page_objects/lookup_pages/000_lookups.rb +1 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/award_lookup.rb +5 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/award_status_lookup.rb +5 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/budget_columns_to_alter_lookup.rb +7 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/campus_lookup.rb +10 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/campus_type_lookup.rb +6 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/group_lookup.rb +2 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/institutional_proposal_lookup.rb +9 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/institutional_proposal_person_lookup.rb +3 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/kim_type_lookup.rb +6 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/proposal_development_document_lookup.rb +5 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/proposal_log_lookup.rb +5 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/proposal_status_lookup.rb +5 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/proposal_type_lookup.rb +5 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/research_areas_lookup.rb +5 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/role_lookup.rb +2 -2
- data/lib/kuality-coeus/page_objects/lookup_pages/sponsor_type_lookup.rb +6 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/unit_lookup.rb +2 -0
- data/lib/kuality-coeus/page_objects/maintenance.rb +1 -1
- data/lib/kuality-coeus/page_objects/maintenance/budget_column_to_alter.rb +12 -0
- data/lib/kuality-coeus/page_objects/proposal_development/proposal_actions.rb +9 -0
- data/lib/kuality-coeus/page_objects/proposal_development/s2s.rb +1 -1
- data/lib/kuality-coeus/page_objects/proposal_log/proposal_log.rb +23 -0
- data/lib/kuality-coeus/page_objects/protocol/protocol_actions.rb +7 -0
- data/lib/kuality-coeus/page_objects/protocol/protocol_overview.rb +55 -0
- data/lib/kuality-coeus/page_objects/researcher.rb +1 -1
- data/lib/kuality-coeus/page_objects/system_admin.rb +1 -1
- data/lib/kuality-coeus/utilities.rb +8 -1
- metadata +45 -10
- data/features/proposal_development/special_review_validations.feature +0 -12
- data/features/step_definitions/delete_proposals.rb +0 -9
- data/features/step_definitions/test.rb +0 -12
- data/features/test.feature +0 -8
@@ -0,0 +1,36 @@
|
|
1
|
+
class UserGroupObject
|
2
|
+
|
3
|
+
include Foundry
|
4
|
+
include DataFactory
|
5
|
+
include StringFactory
|
6
|
+
|
7
|
+
attr_accessor :id, :user_name
|
8
|
+
|
9
|
+
def initialize(browser, opts={})
|
10
|
+
@browser = browser
|
11
|
+
|
12
|
+
defaults = {
|
13
|
+
|
14
|
+
}
|
15
|
+
set_options defaults.merge(opts)
|
16
|
+
requires :user_name
|
17
|
+
end
|
18
|
+
|
19
|
+
# All navigation is done in the parent, UserObject.
|
20
|
+
# IMPORTANT: This includes saving the changes!
|
21
|
+
def create
|
22
|
+
on Person do |create|
|
23
|
+
create.group_id.set @id
|
24
|
+
create.add_group
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
class UserGroupsCollection < CollectionsFactory
|
31
|
+
|
32
|
+
contains UserGroupObject
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
class UserRoleObject
|
2
|
+
|
3
|
+
include Foundry
|
4
|
+
include DataFactory
|
5
|
+
include StringFactory
|
6
|
+
|
7
|
+
attr_accessor :id, :namespace, :name, :type, :qualifiers,
|
8
|
+
:user_name
|
9
|
+
|
10
|
+
def initialize(browser, opts={})
|
11
|
+
@browser = browser
|
12
|
+
|
13
|
+
defaults = {
|
14
|
+
id: '106',
|
15
|
+
name: 'unassigned',
|
16
|
+
qualifiers: [{:unit=>'000001'}]
|
17
|
+
}
|
18
|
+
set_options defaults.merge(opts)
|
19
|
+
requires :user_name
|
20
|
+
end
|
21
|
+
|
22
|
+
# All navigation is done in the parent, UserObject.
|
23
|
+
# IMPORTANT: This includes saving the changes!
|
24
|
+
def create
|
25
|
+
on Person do |create|
|
26
|
+
create.description.set random_alphanums
|
27
|
+
create.role_id.set @id
|
28
|
+
create.add_role
|
29
|
+
@qualifiers.each do |unit|
|
30
|
+
create.unit_number(@id).set unit[:unit]
|
31
|
+
create.descends_hierarchy(@id).fit unit[:descends_hierarchy]
|
32
|
+
create.add_role_qualifier(@id)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
class UserRolesCollection < CollectionsFactory
|
40
|
+
|
41
|
+
contains UserRoleObject
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
end
|
@@ -2,7 +2,8 @@ class BasePage < PageFactory
|
|
2
2
|
|
3
3
|
action(:use_new_tab) { |b| b.windows.last.use }
|
4
4
|
action(:return_to_portal) { |b| b.portal_window.use }
|
5
|
-
action(:
|
5
|
+
action(:close_extra_windows) { |b| b.close_children if b.windows.length > 1 }
|
6
|
+
action(:close_children) { |b| b.windows[0].use; b.windows[1..-1].each{ |w| w.close} }
|
6
7
|
action(:close_parents) { |b| b.windows[0..-2].each{ |w| w.close} }
|
7
8
|
action(:loading) { |b| b.frm.image(alt: 'working...').wait_while_present }
|
8
9
|
element(:logout_button) { |b| b.button(title: 'Click to logout.') }
|
@@ -31,11 +32,15 @@ class BasePage < PageFactory
|
|
31
32
|
alias_method :disposition, :initiator
|
32
33
|
value(:last_updated) {|p| p.headerinfo_table[1][3].text }
|
33
34
|
alias_method :created, :last_updated
|
35
|
+
alias_method :submission_status, :last_updated
|
34
36
|
value(:committee_id) { |p| p.headerinfo_table[2][1].text }
|
35
37
|
alias_method :sponsor_name, :committee_id
|
36
38
|
alias_method :budget_name, :committee_id
|
39
|
+
alias_method :protocol_number, :committee_id
|
37
40
|
value(:committee_name) { |p| p.headerinfo_table[2][3].text }
|
38
41
|
alias_method :pi, :committee_name
|
42
|
+
alias_method :expiration_date, :committee_name
|
43
|
+
|
39
44
|
end
|
40
45
|
|
41
46
|
# Included here because this is such a common field in KC
|
@@ -74,14 +79,17 @@ class BasePage < PageFactory
|
|
74
79
|
def search_results_table
|
75
80
|
element(:results_table) { |b| b.frm.table(id: 'row') }
|
76
81
|
|
77
|
-
action(:edit_item) { |match, p| p.results_table.row(text: /#{match}/m).link(text: 'edit').click;
|
82
|
+
action(:edit_item) { |match, p| p.results_table.row(text: /#{match}/m).link(text: 'edit').click; p.use_new_tab; p.close_parents }
|
78
83
|
alias_method :edit_person, :edit_item
|
79
84
|
|
85
|
+
action(:edit_first_item) { |b| b.frm.link(text: 'edit').click; b.use_new_tab; b.close_parents }
|
86
|
+
|
80
87
|
action(:item_row) { |match, b| b.results_table.row(text: /#{match}/m) }
|
81
88
|
action(:open_item) { |match, b| b.item_row(match).link(text: /#{match}/).click; b.use_new_tab; b.close_parents }
|
82
89
|
action(:delete_item) { |match, p| p.item_row(match).link(text: 'delete').click; p.use_new_tab; p.close_parents }
|
83
90
|
|
84
91
|
action(:return_value) { |match, p| p.item_row(match).link(text: 'return value').click }
|
92
|
+
action(:select_item) { |match, p| p.item_row(match).link(text: 'select').click }
|
85
93
|
action(:return_random) { |b| b.return_value_links[rand(b.return_value_links.length)].click }
|
86
94
|
element(:return_value_links) { |b| b.results_table.links(text: 'return value') }
|
87
95
|
end
|
@@ -133,13 +141,13 @@ class BasePage < PageFactory
|
|
133
141
|
|
134
142
|
action(:add) { |b| b.frm.button(name: 'methodToCall.addSpecialReview.anchorSpecialReview').click }
|
135
143
|
|
136
|
-
element(:save_button) { |b| b.frm.button(name: 'methodToCall.save') }
|
144
|
+
element(:save_button) { |b| b.frm.button(name: 'methodToCall.save') } # TODO: Remove. This doesn't belong here!
|
137
145
|
end
|
138
146
|
|
139
147
|
def custom_data
|
140
148
|
element(:graduate_student_count) { |b| b.target_row('Graduate Student Count').text_field }
|
141
149
|
element(:billing_element) { |b| b.target_row('Billing Element').text_field }
|
142
|
-
element(:save_button) { |b| b.frm.button(name: 'methodToCall.save') }
|
150
|
+
element(:save_button) { |b| b.frm.button(name: 'methodToCall.save') } # TODO: Remove. This doesn't belong here!
|
143
151
|
element(:asdf_tab) { |b| b.frm.div(id: 'tab-asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdf-div') }
|
144
152
|
action(:target_row) { |text, b| b.frm.trs(class: 'datatable').find { |row| row.text.include? text } }
|
145
153
|
end
|
@@ -188,15 +196,28 @@ class BasePage < PageFactory
|
|
188
196
|
element(:validation_err_war_fields) { |b| b.frm.tds(width: '94%') }
|
189
197
|
end
|
190
198
|
|
199
|
+
# ========
|
200
|
+
private
|
201
|
+
# ========
|
202
|
+
|
191
203
|
def links(*links_text)
|
192
204
|
links_text.each { |link| elementate(:link, link) }
|
193
205
|
end
|
194
206
|
|
195
207
|
def buttons(*buttons_text)
|
196
|
-
|
208
|
+
buttons_text.each { |button| elementate(:button, button) }
|
197
209
|
end
|
198
210
|
|
199
|
-
|
211
|
+
# Use this to define methods to click on the green
|
212
|
+
# buttons on the page, all of which can be identified
|
213
|
+
# by the title tag. The method takes a hash, where the key
|
214
|
+
# will become the method name, and the value is the string
|
215
|
+
# that matches the green button's link title tag.
|
216
|
+
def green_buttons(links={})
|
217
|
+
links.each_pair do |name, title|
|
218
|
+
action(name) { |b| b.frm.link(title: title).click; b.loading }
|
219
|
+
end
|
220
|
+
end
|
200
221
|
|
201
222
|
# A helper method that converts the passed string into snake case. See the StringFactory
|
202
223
|
# module for more info.
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class DistributionAndIncome < BudgetDocument
|
2
|
+
|
3
|
+
element(:add_cost_share_period) { |b| b.frm.text_field(name: 'newBudgetCostShare.projectPeriod') }
|
4
|
+
element(:add_cost_share_percentage) { |b| b.frm.text_field(name: 'newBudgetCostShare.sharePercentage') }
|
5
|
+
element(:add_cost_share_source_account) { |b| b.frm.text_field(name: 'newBudgetCostShare.sourceAccount') }
|
6
|
+
element(:add_cost_share_amount) { |b| b.frm.text_field(name: 'newBudgetCostShare.shareAmount') }
|
7
|
+
action(:add_cost_share) { |b| b.frm.button(name: 'methodToCall.addCostShare').click; b.loading }
|
8
|
+
|
9
|
+
action(:cost_sharing_project_period) { |index, b| b.frm.text_field(name: "document.budget.budgetCostShare[#{index}].projectPeriod") }
|
10
|
+
action(:cost_sharing_percentage) { |index, b| b.frm.text_field(name: "document.budget.budgetCostShare[#{index}].sharePercentage") }
|
11
|
+
action(:cost_sharing_source_account) { |index, b| b.frm.text_field(name: "document.budget.budgetCostShare[#{index}].sourceAccount") }
|
12
|
+
action(:cost_sharing_amount) { |index, b| b.frm.text_field(name: "document.budget.budgetCostShare[#{index}].shareAmount") }
|
13
|
+
|
14
|
+
end
|
@@ -2,8 +2,7 @@ class CentralAdmin < BasePage
|
|
2
2
|
|
3
3
|
page_url "#{$base_url}portal.do?selectedTab=portalCentralAdminBody"
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
action(:create_award) { |b| b.frm.link(title: 'Award').click; b.loading }
|
5
|
+
green_buttons create_award: 'Award', create_proposal_log: 'Proposal Log',
|
6
|
+
create_institutional_proposal: 'Institutional Proposal'
|
8
7
|
|
9
8
|
end
|
@@ -12,14 +12,14 @@ class Group < BasePage
|
|
12
12
|
# editable fields or text strings, depending on whether you're creating
|
13
13
|
# or editing the group...
|
14
14
|
element(:namespace) { |b| b.gnspc_select.present? ? b.gnspc_select : b.gnsp_ro }
|
15
|
-
element(:name) { |b| b.gr_nm.present? b.gr_nm : b.
|
15
|
+
element(:name) { |b| b.gr_nm.present? ? b.gr_nm : b.gr_nm_ro }
|
16
16
|
|
17
17
|
element(:type_code) { |b| b.frm.select(name: 'member.memberTypeCode') }
|
18
18
|
element(:member_identifier) { |b| b.frm.text_field(name: 'member.memberId') }
|
19
19
|
element(:member_name) { |b| b.frm.text_field(name: 'member.memberName') }
|
20
20
|
action(:add_member) { |b| b.frm.button(name: 'methodToCall.addMember.anchorAssignees').click; b.loading }
|
21
21
|
|
22
|
-
action(inactivate_member) { |member, b| b.assignees_table.row(text: /#{member}/).button(name: /methodToCall.deleteMember/).click; b.loading }
|
22
|
+
action(:inactivate_member) { |member, b| b.assignees_table.row(text: /#{member}/).button(name: /methodToCall.deleteMember/).click; b.loading }
|
23
23
|
|
24
24
|
# =========
|
25
25
|
private
|
@@ -19,7 +19,7 @@ class Person < BasePage
|
|
19
19
|
element(:employee_type) { |b| b.frm.select(id: 'document.affiliations[0].newEmpInfo.employmentTypeCode') }
|
20
20
|
element(:primary_employment) { |b| b.frm.checkbox(id: 'document.affiliations[0].newEmpInfo.primary') }
|
21
21
|
element(:base_salary) { |b| b.frm.text_field(id: 'document.affiliations[0].newEmpInfo.baseSalaryAmount') }
|
22
|
-
element(:
|
22
|
+
element(:primary_department_code) { |b| b.frm.text_field(name: 'document.affiliations[0].newEmpInfo.primaryDepartmentCode') }
|
23
23
|
action(:add_employment_information) { |b| b.frm.button(name: 'methodToCall.addEmpInfo.line0.anchor').click; b.loading }
|
24
24
|
action(:add_name) { |b| b.frm.button(name: 'methodToCall.addName.anchor').click }
|
25
25
|
element(:address_type) { |b| b.frm.select(id: 'newAddress.addressTypeCode') }
|
@@ -40,18 +40,22 @@ class Person < BasePage
|
|
40
40
|
element(:email_type) { |b| b.frm.select(name: 'newEmail.emailTypeCode') }
|
41
41
|
element(:email_default) { |b| b.frm.checkbox(name: 'newEmail.dflt') }
|
42
42
|
action(:add_email) { |b| b.frm.button(name: 'methodToCall.addEmail.anchor').click; b.loading }
|
43
|
+
|
43
44
|
element(:role_id) { |b| b.frm.text_field(id: 'newRole.roleId') }
|
44
45
|
action(:add_role) { |b| b.frm.button(name: 'methodToCall.addRole.anchor').click; b.loading }
|
46
|
+
|
45
47
|
element(:group_id) { |b| b.frm.text_field(id: 'newGroup.groupId') }
|
46
48
|
action(:add_group) { |b| b.frm.button(name: 'methodToCall.addGroup.anchor').click; b.loading }
|
47
49
|
|
48
|
-
action(:unit_number) { |role, b| b.
|
49
|
-
action(:
|
50
|
+
action(:unit_number) { |role, b| b.target_row(role).text_field(title: '* Unit Number') }
|
51
|
+
action(:descends_hierarchy) { |role, b| b.target_row(role).checkbox(title: 'Descends Hierarchy') }
|
52
|
+
action(:add_role_qualifier) { |role, b| b.target_row(role).button(name: /methodToCall.addRoleQualifier.line\d+.anchor/).click; b.loading }
|
50
53
|
|
51
54
|
# =========
|
52
55
|
private
|
53
56
|
# =========
|
54
57
|
|
58
|
+
action(:target_row) { |role, b| b.frm.div(id: 'tab-Roles-div').table(index: 0).rows[b.role_row(role)+1] }
|
55
59
|
action(:role_row) { |role, b| b.frm.div(id: 'tab-Roles-div').table(index: 0).rows.find_index{ |row| row.text.include?(role.to_s) } }
|
56
60
|
|
57
61
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
class Role < BasePage
|
2
|
+
|
3
|
+
description_field
|
4
|
+
error_messages
|
5
|
+
global_buttons
|
6
|
+
tab_buttons
|
7
|
+
|
8
|
+
value(:id) { |b| b.overview_tab.table[0][1].text }
|
9
|
+
value(:type) { |b| b.overview_tab.table[0][3].text }
|
10
|
+
|
11
|
+
element(:namespace) { |b| b.nmsp_ed.present? ? b.nmsp_ed : b.nmsp_ro }
|
12
|
+
element(:name) { |b| b.frm.text_field(name: 'document.roleName') }
|
13
|
+
|
14
|
+
element(:add_permission_id) { |b| b.frm.text_field(name: 'permission.permissionId') }
|
15
|
+
action(:add_permission) { |b| b.frm.button(name: 'methodToCall.addPermission.anchorPermissions').click; b.loading }
|
16
|
+
|
17
|
+
element(:add_responsibility_id) { |b| b.frm.text_field(name: 'responsibility.responsibilityId') }
|
18
|
+
action(:add_responsibility) { |b| b.frm.button(name: 'methodToCall.addResponsibility.anchorResponsibilities').click; b.loading }
|
19
|
+
|
20
|
+
element(:assignee_type_code) { |b| b.frm.select(name: 'member.memberTypeCode') }
|
21
|
+
element(:assignee_id) { |b| b.frm.text_field(name: 'member.memberId') }
|
22
|
+
element(:assignee_unit_number) { |b| b.frm.text_field(id: /^member/, title: '* Unit Number') }
|
23
|
+
action(:add_assignee) { |b| b.frm.button(name: 'methodToCall.addMember.anchorAssignees').click; b.loading }
|
24
|
+
|
25
|
+
element(:delegation_type_code) { |b| b.frm.select(name: 'delegationMember.memberTypeCode') }
|
26
|
+
element(:delegation_id) { |b| b.frm.text_field(name: 'delegationMember.memberId') }
|
27
|
+
element(:delegation_unit_number) { |b| b.frm.text_field(id: /^delegationMember/, title: '* Unit Number') }
|
28
|
+
action(:add_delegation) { |b| b.frm.button(name: 'methodToCall.addDelegationMember.anchorDelegations').click; b.loading }
|
29
|
+
|
30
|
+
# ===========
|
31
|
+
private
|
32
|
+
# ===========
|
33
|
+
|
34
|
+
element(:overview_tab) { |b| b.frm.div(id: 'tab-Overview-div') }
|
35
|
+
element(:nmsp_ed) { |b| b.frm.select(name: 'document.roleNamespace') }
|
36
|
+
element(:nmsp_ro) { |b| b.overview_tab.table[1][1].text }
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class InstituteRatesMaintenance < BasePage
|
2
|
+
|
3
|
+
global_buttons
|
4
|
+
document_header_elements
|
5
|
+
error_messages
|
6
|
+
description_field
|
7
|
+
|
8
|
+
element(:activity_type_code) { |b| b.frm.text_field(name: 'document.newMaintainableObject.activityTypeCode') }
|
9
|
+
element(:fiscal_year) { |b| b.frm.text_field(name: 'document.newMaintainableObject.fiscalYear') }
|
10
|
+
element(:on_off_campus_flag) { |b| b.frm.checkbox(name: 'document.newMaintainableObject.onOffCampusFlag') }
|
11
|
+
element(:rate_class_code) { |b| b.frm.text_field(name: 'document.newMaintainableObject.rateClassCode') }
|
12
|
+
element(:rate_type_code) { |b| b.frm.text_field(name: 'document.newMaintainableObject.rateTypeCode') }
|
13
|
+
element(:start_date) { |b| b.frm.text_field(name: 'document.newMaintainableObject.startDate') }
|
14
|
+
element(:unit_number) { |b| b.frm.text_field(name: 'document.newMaintainableObject.unitNumber') }
|
15
|
+
element(:rate) { |b| b.frm.text_field(name: 'document.newMaintainableObject.instituteRate') }
|
16
|
+
element(:active) { |b| b.frm.checkbox(name: 'document.newMaintainableObject.active') }
|
17
|
+
|
18
|
+
end
|
@@ -6,10 +6,12 @@ class InstitutionalProposal < KCInstitutionalProposal
|
|
6
6
|
value(:institutional_proposal_number) { |b| b.institutional_proposal_tab.table[0][1].text }
|
7
7
|
value(:status_ro) { |b| b.institutional_proposal_tab.table[2][3].text }
|
8
8
|
element(:status) { |b| b.frm.select(name: 'document.institutionalProposal.statusCode') }
|
9
|
+
element(:award_id) { |b| b.frm.text_field(name: 'document.institutionalProposalList[0].currentAwardNumber') }
|
9
10
|
element(:proposal_type) { |b| b.frm.select(name: 'document.institutionalProposalList[0].proposalTypeCode') }
|
10
11
|
element(:activity_type) { |b| b.frm.select(name: 'document.institutionalProposalList[0].activityTypeCode') }
|
11
12
|
element(:project_title) { |b| b.frm.text_field(name: 'document.institutionalProposalList[0].title') }
|
12
13
|
element(:sponsor_id) { |b| b.frm.text_field(name: 'document.institutionalProposalList[0].sponsorCode') }
|
14
|
+
action(:find_sponsor_code) { |b| b.frm.button(name: 'methodToCall.performLookup.(!!org.kuali.kra.bo.Sponsor!!).(((sponsorCode:document.institutionalProposalList[0].sponsorCode,sponsorName:document.institutionalProposalList[0].sponsor.sponsorName))).((``)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;;::::).anchorSponsorProgramInformation').click }
|
13
15
|
|
14
16
|
# ===========
|
15
17
|
private
|
@@ -5,6 +5,7 @@ class Lookups < BasePage
|
|
5
5
|
|
6
6
|
element(:last_name) { |b| b.frm.text_field(id: 'lastName') }
|
7
7
|
element(:first_name) { |b| b.frm.text_field(id: 'firstName') }
|
8
|
+
element(:full_name) { |b| b.frm.text_field(id: 'fullName') }
|
8
9
|
element(:user_name) { |b| b.frm.text_field(id: 'userName') }
|
9
10
|
element(:create_button) { |b| b.frm.link(title: 'Create a new record') }
|
10
11
|
action(:create_new) { |b| b.create_button.click; b.loading }
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class CampusLookup < Lookups
|
2
|
+
|
3
|
+
element(:campus_code) { |b| b.frm.text_field(name: 'code') }
|
4
|
+
element(:campus_name) { |b| b.frm.text_field(name: 'name') }
|
5
|
+
element(:campus_short_name) { |b| b.frm.text_field(name: 'shortName') }
|
6
|
+
element(:campus_type_code) { |b| b.frm.select(name: 'campusTypeCode') }
|
7
|
+
action(:campus_type_code_lookup) { |b| b.frm.select(name: 'methodToCall.performLookup.(!!org.kuali.rice.location.impl.campus.CampusTypeBo!!).(((code:campusTypeCode))).((`campusTypeCode:code`)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;https://qa.research.rsmart.com:/kc-dev/kr/lookup.do;::::).anchor').click }
|
8
|
+
#TODO: Define 'yes, no, both' options for Active Indicator
|
9
|
+
|
10
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class InstitutionalProposalLookup < Lookups
|
2
|
+
|
3
|
+
element(:institutional_proposal_number) { |b| b.frm.text_field(name: 'proposalNumber') }
|
4
|
+
element(:institutional_proposal_status) { |b| b.frm.select(name: 'statusCode') }
|
5
|
+
element(:account_id) { |b| b.frm.text_field(name: 'currentAccountNumber') }
|
6
|
+
element(:sponsor_id) { |b| b.frm.text_field(name: 'sponsorCode') }
|
7
|
+
element(:sponsor_name) { |b| b.frm.button(name: 'sponsor.sponsorName') }
|
8
|
+
|
9
|
+
end
|