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.
Files changed (104) hide show
  1. checksums.yaml +8 -8
  2. data/Gemfile +1 -1
  3. data/Gemfile.lock +2 -2
  4. data/features/grants_gov/grants_gov_forms/code_and_form_mapping.feature +1 -1
  5. data/features/grants_gov/grants_gov_forms/s2s_questionnaire.feature +8 -12
  6. data/features/grants_gov/s2s_submission.feature +7 -4
  7. data/features/grants_gov/s2s_validation.feature +3 -3
  8. data/features/proposal_development/create_proposal.feature +2 -9
  9. data/features/proposal_development/key_personnel_validations.feature +1 -7
  10. data/features/proposal_development/proposal_permissions.feature +1 -28
  11. data/features/proposal_development/proposal_workflow.feature +1 -7
  12. data/features/roles/roles.feature +14 -0
  13. data/features/step_definitions/awards/create_award.rb +15 -0
  14. data/features/step_definitions/budget_versions/budget_versions.rb +8 -1
  15. data/features/step_definitions/grants_gov/s2s_submission.rb +2 -2
  16. data/features/step_definitions/groups.rb +13 -0
  17. data/features/step_definitions/maintenance.rb +7 -0
  18. data/features/step_definitions/proposal_development/budget_versions.rb +98 -0
  19. data/features/step_definitions/proposal_development/edit_proposal.rb +4 -0
  20. data/features/step_definitions/proposal_development/key_personnel_validations.rb +7 -7
  21. data/features/step_definitions/proposal_development/proposal_permissions.rb +20 -2
  22. data/features/step_definitions/proposal_logs/create_proposal_log.rb +13 -0
  23. data/features/step_definitions/protocol_development/irb_create_protocol.rb +28 -0
  24. data/features/step_definitions/roles.rb +17 -0
  25. data/features/step_definitions/users.rb +42 -7
  26. data/features/support/env.rb +16 -1
  27. data/kuality-coeus.gemspec +2 -2
  28. data/lib/kuality-coeus.rb +1 -0
  29. data/lib/kuality-coeus/data_objects/award/award.rb +13 -14
  30. data/lib/kuality-coeus/data_objects/award/award_transaction.rb +3 -1
  31. data/lib/kuality-coeus/data_objects/budget/budget_periods.rb +17 -3
  32. data/lib/kuality-coeus/data_objects/budget/budget_versions.rb +9 -12
  33. data/lib/kuality-coeus/data_objects/budget/cost_sharing.rb +56 -0
  34. data/lib/kuality-coeus/data_objects/budget/personnel.rb +3 -3
  35. data/lib/kuality-coeus/data_objects/budget/subaward_budget.rb +2 -2
  36. data/lib/kuality-coeus/data_objects/committee_document/committee_document.rb +2 -2
  37. data/lib/kuality-coeus/data_objects/committee_document/committee_members.rb +4 -2
  38. data/lib/kuality-coeus/data_objects/committee_document/committee_schedule.rb +3 -1
  39. data/lib/kuality-coeus/data_objects/committee_document/member_roles.rb +3 -1
  40. data/lib/kuality-coeus/data_objects/compliance_and_protocol/irb_protocol_development.rb +86 -0
  41. data/lib/kuality-coeus/data_objects/identity/group.rb +22 -8
  42. data/lib/kuality-coeus/{page_objects/identity/assignee.rb → data_objects/identity/group_assignee.rb} +4 -4
  43. data/lib/kuality-coeus/data_objects/identity/role.rb +124 -0
  44. data/lib/kuality-coeus/data_objects/identity/role_assignee.rb +43 -0
  45. data/lib/kuality-coeus/data_objects/institutional_proposal/institutional_proposal.rb +87 -4
  46. data/lib/kuality-coeus/data_objects/institutional_proposal/ip_cost_sharing.rb +61 -0
  47. data/lib/kuality-coeus/data_objects/institutional_proposal/project_personnel.rb +35 -0
  48. data/lib/kuality-coeus/data_objects/institutional_proposal/unrecovered_fa.rb +64 -0
  49. data/lib/kuality-coeus/data_objects/maintenance/budget_column.rb +89 -0
  50. data/lib/kuality-coeus/data_objects/navigation.rb +12 -0
  51. data/lib/kuality-coeus/data_objects/proposal_development/degrees.rb +2 -2
  52. data/lib/kuality-coeus/data_objects/proposal_development/key_personnel.rb +6 -5
  53. data/lib/kuality-coeus/data_objects/proposal_development/personnel_attachments.rb +3 -3
  54. data/lib/kuality-coeus/data_objects/proposal_development/proposal_attachments.rb +3 -3
  55. data/lib/kuality-coeus/data_objects/proposal_development/proposal_development.rb +28 -34
  56. data/lib/kuality-coeus/data_objects/proposal_development/special_review.rb +3 -1
  57. data/lib/kuality-coeus/data_objects/proposal_log/proposal_log.rb +73 -0
  58. data/lib/kuality-coeus/data_objects/rates/institute_rate.rb +1 -0
  59. data/lib/kuality-coeus/data_objects/{user.rb → user/user.rb} +164 -146
  60. data/lib/kuality-coeus/data_objects/user/user_group.rb +36 -0
  61. data/lib/kuality-coeus/data_objects/user/user_role.rb +45 -0
  62. data/lib/kuality-coeus/page_objects/000_base_page.rb +27 -6
  63. data/lib/kuality-coeus/page_objects/budget/distribution_income.rb +14 -0
  64. data/lib/kuality-coeus/page_objects/central_admin.rb +2 -3
  65. data/lib/kuality-coeus/page_objects/identity/group.rb +2 -2
  66. data/lib/kuality-coeus/page_objects/identity/person.rb +7 -3
  67. data/lib/kuality-coeus/page_objects/identity/role.rb +38 -0
  68. data/lib/kuality-coeus/page_objects/institute_rates_maintenance.rb +18 -0
  69. data/lib/kuality-coeus/page_objects/institutional_proposal/institutional_proposal.rb +2 -0
  70. data/lib/kuality-coeus/page_objects/kc_protocol.rb +2 -0
  71. data/lib/kuality-coeus/page_objects/login.rb +1 -1
  72. data/lib/kuality-coeus/page_objects/lookup_pages/000_lookups.rb +1 -0
  73. data/lib/kuality-coeus/page_objects/lookup_pages/award_lookup.rb +5 -0
  74. data/lib/kuality-coeus/page_objects/lookup_pages/award_status_lookup.rb +5 -0
  75. data/lib/kuality-coeus/page_objects/lookup_pages/budget_columns_to_alter_lookup.rb +7 -0
  76. data/lib/kuality-coeus/page_objects/lookup_pages/campus_lookup.rb +10 -0
  77. data/lib/kuality-coeus/page_objects/lookup_pages/campus_type_lookup.rb +6 -0
  78. data/lib/kuality-coeus/page_objects/lookup_pages/group_lookup.rb +2 -0
  79. data/lib/kuality-coeus/page_objects/lookup_pages/institutional_proposal_lookup.rb +9 -0
  80. data/lib/kuality-coeus/page_objects/lookup_pages/institutional_proposal_person_lookup.rb +3 -0
  81. data/lib/kuality-coeus/page_objects/lookup_pages/kim_type_lookup.rb +6 -0
  82. data/lib/kuality-coeus/page_objects/lookup_pages/proposal_development_document_lookup.rb +5 -0
  83. data/lib/kuality-coeus/page_objects/lookup_pages/proposal_log_lookup.rb +5 -0
  84. data/lib/kuality-coeus/page_objects/lookup_pages/proposal_status_lookup.rb +5 -0
  85. data/lib/kuality-coeus/page_objects/lookup_pages/proposal_type_lookup.rb +5 -0
  86. data/lib/kuality-coeus/page_objects/lookup_pages/research_areas_lookup.rb +5 -0
  87. data/lib/kuality-coeus/page_objects/lookup_pages/role_lookup.rb +2 -2
  88. data/lib/kuality-coeus/page_objects/lookup_pages/sponsor_type_lookup.rb +6 -0
  89. data/lib/kuality-coeus/page_objects/lookup_pages/unit_lookup.rb +2 -0
  90. data/lib/kuality-coeus/page_objects/maintenance.rb +1 -1
  91. data/lib/kuality-coeus/page_objects/maintenance/budget_column_to_alter.rb +12 -0
  92. data/lib/kuality-coeus/page_objects/proposal_development/proposal_actions.rb +9 -0
  93. data/lib/kuality-coeus/page_objects/proposal_development/s2s.rb +1 -1
  94. data/lib/kuality-coeus/page_objects/proposal_log/proposal_log.rb +23 -0
  95. data/lib/kuality-coeus/page_objects/protocol/protocol_actions.rb +7 -0
  96. data/lib/kuality-coeus/page_objects/protocol/protocol_overview.rb +55 -0
  97. data/lib/kuality-coeus/page_objects/researcher.rb +1 -1
  98. data/lib/kuality-coeus/page_objects/system_admin.rb +1 -1
  99. data/lib/kuality-coeus/utilities.rb +8 -1
  100. metadata +45 -10
  101. data/features/proposal_development/special_review_validations.feature +0 -12
  102. data/features/step_definitions/delete_proposals.rb +0 -9
  103. data/features/step_definitions/test.rb +0 -12
  104. 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(:close_children) { |b| b.windows[1..-1].each{ |w| w.close} }
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; b.use_new_tab; b.close_parents }
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
- buttons_text.each { |button| elementate(:button, button) }
208
+ buttons_text.each { |button| elementate(:button, button) }
197
209
  end
198
210
 
199
- private
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
- links 'Create Committee'
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.gr_nm.ro }
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(:primary_dept_code) { |b| b.frm.text_field(name: 'document.affiliations[0].newEmpInfo.primaryDepartmentCode') }
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.frm.div(id: 'tab-Roles-div').table(index: 0).rows[b.role_row(role)+1].text_field(title: '* Unit Number') }
49
- action(:add_role_qualifier) { |role, b| b.frm.div(id: 'tab-Roles-div').table(index: 0).rows[b.role_row(role)+1].button(name: /methodToCall.addRoleQualifier.line\d+.anchor/).click; b.loading }
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
@@ -1,7 +1,9 @@
1
1
  class KCProtocol < BasePage
2
2
 
3
+ document_header_elements
3
4
  tab_buttons
4
5
  global_buttons
6
+ error_messages
5
7
 
6
8
  class << self
7
9
 
@@ -1,6 +1,6 @@
1
1
  class Login < BasePage
2
2
 
3
- page_url "#{$base_url}portal.do?"
3
+ page_url "#{$base_url}backdoorlogin.do"
4
4
 
5
5
  element(:username) { |b| b.text_field(name: '__login_user') }
6
6
  button 'Login'
@@ -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,5 @@
1
+ class AwardLookup < Lookups
2
+
3
+ element(:award_id) { |b| b.frm.text_field(name: 'awardNumber') }
4
+
5
+ end
@@ -0,0 +1,5 @@
1
+ class AwardStatusLookup < Lookups
2
+
3
+ element(:status_code) { |b| b.frm.text_field(name: 'statusCode') }
4
+
5
+ end
@@ -0,0 +1,7 @@
1
+ class BudgetColumnsToAlterLookup < Lookups
2
+
3
+ element(:column_name) { |b| b.frm.select(name: 'columnName') }
4
+ element(:lookup_argument) { |b| b.frm.select(name: 'lookupClass') }
5
+ element(:lookup_return) { |b| b.frm.select(name: 'lookupReturn') }
6
+
7
+ end
@@ -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,6 @@
1
+ class CampusTypeLookup < Lookups
2
+
3
+ element(:campus_type_code) { |b| b.frm.text_field(name: 'code') }
4
+ element(:campus_type_name) { |b| b.frm.text_field(name: 'name') }
5
+
6
+ end
@@ -1,3 +1,5 @@
1
1
  class GroupLookup < Lookups
2
2
 
3
+ element(:group_id) { |b| b.frm.text_field(name: 'id') }
4
+
3
5
  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
@@ -0,0 +1,3 @@
1
+ class InstitutionalProposalPersonLookup < Lookups
2
+
3
+ end
@@ -0,0 +1,6 @@
1
+ class KimTypeLookup < Lookups
2
+
3
+ element(:namespace_code) { |b| b.frm.select(name: 'namespaceCode') }
4
+ element(:type_name) { |b| b.frm.text_field(name: 'name') }
5
+
6
+ end
@@ -0,0 +1,5 @@
1
+ class ProposalDevelopmentDocumentLookup < Lookups
2
+
3
+ element(:proposal_number) { |b| b.frm.text_field(name: 'proposalNumber') }
4
+
5
+ end
@@ -0,0 +1,5 @@
1
+ class ProposalLogLookup < Lookups
2
+
3
+ element(:proposal_number) { |b| b.frm.text_field(name: 'proposalNumber') }
4
+
5
+ end