kuality-coeus 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (161) hide show
  1. data/Gemfile +1 -1
  2. data/Gemfile.lock +16 -18
  3. data/chromedriver.log +46 -0
  4. data/features/grants_gov/grants_gov_forms/code_and_form_mapping.feature +26 -0
  5. data/features/grants_gov/grants_gov_forms/forms_validation.feature +1 -0
  6. data/features/grants_gov/grants_gov_forms/s2s_questionnaire.feature +19 -0
  7. data/features/grants_gov/s2s_submission.feature +30 -0
  8. data/features/grants_gov/s2s_validation.feature +36 -0
  9. data/features/proposal_development/create_budget_versions.feature +31 -0
  10. data/features/proposal_development/create_proposal.feature +25 -0
  11. data/features/proposal_development/key_personnel_validations.feature +41 -0
  12. data/features/proposal_development/proposal_actions_validations.feature +46 -0
  13. data/features/proposal_development/proposal_permissions.feature +73 -0
  14. data/features/proposal_development/proposal_workflow.feature +105 -0
  15. data/features/proposal_development/special_review_validations.feature +12 -0
  16. data/features/step_definitions/action_list.rb +12 -0
  17. data/features/step_definitions/awards/create_award.rb +3 -0
  18. data/features/step_definitions/grants_gov/forms.rb +34 -0
  19. data/features/step_definitions/grants_gov/s2s_submission.rb +51 -0
  20. data/features/step_definitions/institutional_proposals/create_institutional_proposal.rb +3 -0
  21. data/features/step_definitions/proposal_development/budget_versions.rb +102 -0
  22. data/features/step_definitions/proposal_development/create_proposal.rb +157 -0
  23. data/features/step_definitions/proposal_development/edit_proposal.rb +79 -0
  24. data/features/step_definitions/proposal_development/institute_rates.rb +21 -0
  25. data/features/step_definitions/proposal_development/key_personnel_validations.rb +74 -0
  26. data/features/step_definitions/proposal_development/proposal_actions_validations.rb +73 -0
  27. data/features/step_definitions/proposal_development/proposal_permissions.rb +141 -0
  28. data/features/step_definitions/proposal_development/proposal_workflow.rb +81 -0
  29. data/features/step_definitions/proposal_development/s2s_validation.rb +30 -0
  30. data/features/step_definitions/proposal_development/special_review_validations.rb +7 -0
  31. data/features/step_definitions/test.rb +3 -0
  32. data/features/step_definitions/users.rb +65 -0
  33. data/features/support/env.rb +35 -0
  34. data/features/test.feature +13 -0
  35. data/kuality-coeus.gemspec +1 -1
  36. data/lib/chromedriver.log +4483 -0
  37. data/lib/kuality-coeus.rb +5 -2
  38. data/lib/kuality-coeus/core_extensions.rb +10 -0
  39. data/lib/kuality-coeus/data_objects/award/award.rb +126 -0
  40. data/lib/kuality-coeus/data_objects/award/award_transaction.rb +57 -0
  41. data/lib/kuality-coeus/data_objects/budget/budget_periods.rb +114 -0
  42. data/lib/kuality-coeus/data_objects/budget/budget_versions.rb +221 -0
  43. data/lib/kuality-coeus/data_objects/budget/subaward_budget.rb +65 -0
  44. data/lib/kuality-coeus/data_objects/committee_document/committee_document.rb +65 -0
  45. data/lib/kuality-coeus/data_objects/committee_document/committee_members.rb +30 -0
  46. data/lib/kuality-coeus/data_objects/committee_document/committee_schedule.rb +27 -0
  47. data/lib/kuality-coeus/data_objects/committee_document/member_roles.rb +28 -0
  48. data/lib/kuality-coeus/data_objects/conflict_of_interest/financial_entity.rb +48 -0
  49. data/lib/kuality-coeus/data_objects/grants_gov/phs_fellowship_questionnaire.rb +90 -0
  50. data/lib/kuality-coeus/data_objects/grants_gov/phs_training_budget_questionnaire.rb +5 -0
  51. data/lib/kuality-coeus/data_objects/institutional_proposal/institutional_proposal.rb +20 -0
  52. data/lib/kuality-coeus/data_objects/institutional_proposal/intellectual_property_review.rb +62 -0
  53. data/lib/kuality-coeus/data_objects/navigation.rb +64 -0
  54. data/lib/kuality-coeus/data_objects/proposal_development/compliance_questions.rb +47 -0
  55. data/lib/kuality-coeus/data_objects/proposal_development/custom_data.rb +41 -0
  56. data/lib/kuality-coeus/data_objects/proposal_development/degrees.rb +40 -0
  57. data/lib/kuality-coeus/data_objects/proposal_development/key_personnel.rb +299 -0
  58. data/lib/kuality-coeus/data_objects/proposal_development/kuali_university_questions.rb +58 -0
  59. data/lib/kuality-coeus/data_objects/proposal_development/permissions.rb +107 -0
  60. data/lib/kuality-coeus/data_objects/proposal_development/personnel_attachments.rb +46 -0
  61. data/lib/kuality-coeus/data_objects/proposal_development/proposal_attachments.rb +41 -0
  62. data/lib/kuality-coeus/data_objects/proposal_development/proposal_development.rb +301 -0
  63. data/lib/kuality-coeus/data_objects/proposal_development/proposal_questions.rb +52 -0
  64. data/lib/kuality-coeus/data_objects/proposal_development/s2s_questionnaire.rb +129 -0
  65. data/lib/kuality-coeus/data_objects/proposal_development/special_review.rb +79 -0
  66. data/lib/kuality-coeus/data_objects/rates/institute_rate.rb +209 -0
  67. data/lib/kuality-coeus/data_objects/user.rb +303 -33
  68. data/lib/kuality-coeus/gem_extensions.rb +26 -0
  69. data/lib/kuality-coeus/page_objects/000_base_page.rb +196 -14
  70. data/lib/kuality-coeus/page_objects/action_list.rb +32 -0
  71. data/lib/kuality-coeus/page_objects/award/award.rb +25 -0
  72. data/lib/kuality-coeus/page_objects/award/award_actions.rb +7 -0
  73. data/lib/kuality-coeus/page_objects/award/award_budget_versions.rb +9 -0
  74. data/lib/kuality-coeus/page_objects/award/commitments.rb +27 -0
  75. data/lib/kuality-coeus/page_objects/award/contacts.rb +19 -0
  76. data/lib/kuality-coeus/page_objects/award/custom_data.rb +6 -0
  77. data/lib/kuality-coeus/page_objects/award/payment_reports_terms.rb +26 -0
  78. data/lib/kuality-coeus/page_objects/award/special_review.rb +7 -0
  79. data/lib/kuality-coeus/page_objects/award/time_and_money.rb +36 -0
  80. data/lib/kuality-coeus/page_objects/budget/budget_actions.rb +31 -0
  81. data/lib/kuality-coeus/page_objects/budget/budget_versions.rb +13 -0
  82. data/lib/kuality-coeus/page_objects/budget/modular_budget.rb +16 -0
  83. data/lib/kuality-coeus/page_objects/budget/non-personnel.rb +11 -0
  84. data/lib/kuality-coeus/page_objects/budget/parameters.rb +65 -0
  85. data/lib/kuality-coeus/page_objects/budget/personnel.rb +56 -0
  86. data/lib/kuality-coeus/page_objects/budget/rates.rb +7 -0
  87. data/lib/kuality-coeus/page_objects/budget/summary.rb +5 -0
  88. data/lib/kuality-coeus/page_objects/budget_document.rb +19 -0
  89. data/lib/kuality-coeus/page_objects/central_admin.rb +4 -2
  90. data/lib/kuality-coeus/page_objects/committee/committee.rb +10 -10
  91. data/lib/kuality-coeus/page_objects/committee/members.rb +4 -4
  92. data/lib/kuality-coeus/page_objects/committee_document.rb +1 -6
  93. data/lib/kuality-coeus/page_objects/confirmation.rb +16 -0
  94. data/lib/kuality-coeus/page_objects/disclosure/disclosure.rb +56 -0
  95. data/lib/kuality-coeus/page_objects/disclosure/disclosure_actions.rb +9 -0
  96. data/lib/kuality-coeus/page_objects/document_header.rb +5 -0
  97. data/lib/kuality-coeus/page_objects/financial_entities.rb +1 -4
  98. data/lib/kuality-coeus/page_objects/financial_entities/my_financial_entities.rb +6 -0
  99. data/lib/kuality-coeus/page_objects/financial_entities/new_financial_entity.rb +11 -0
  100. data/lib/kuality-coeus/page_objects/financial_entities/reporter.rb +5 -3
  101. data/lib/kuality-coeus/page_objects/identity/person.rb +57 -0
  102. data/lib/kuality-coeus/page_objects/institute_rates_maintenance.rb +18 -0
  103. data/lib/kuality-coeus/page_objects/institutional_proposal.rb +18 -0
  104. data/lib/kuality-coeus/page_objects/institutional_proposal/contacts.rb +32 -0
  105. data/lib/kuality-coeus/page_objects/institutional_proposal/custom_data.rb +6 -0
  106. data/lib/kuality-coeus/page_objects/institutional_proposal/distribution.rb +20 -0
  107. data/lib/kuality-coeus/page_objects/institutional_proposal/institutional_proposal.rb +27 -0
  108. data/lib/kuality-coeus/page_objects/institutional_proposal/institutional_proposal_actions.rb +7 -0
  109. data/lib/kuality-coeus/page_objects/institutional_proposal/intellectual_property_review.rb +20 -0
  110. data/lib/kuality-coeus/page_objects/institutional_proposal/special_review.rb +6 -0
  111. data/lib/kuality-coeus/page_objects/kc_awards.rb +48 -0
  112. data/lib/kuality-coeus/page_objects/kc_protocol.rb +15 -0
  113. data/lib/kuality-coeus/page_objects/login.rb +4 -5
  114. data/lib/kuality-coeus/page_objects/lookup_pages/000_lookups.rb +10 -0
  115. data/lib/kuality-coeus/page_objects/lookup_pages/action_list_filter.rb +6 -0
  116. data/lib/kuality-coeus/page_objects/lookup_pages/address_book_lookup.rb +4 -0
  117. data/lib/kuality-coeus/page_objects/lookup_pages/development_proposal_lookup.rb +3 -0
  118. data/lib/kuality-coeus/page_objects/lookup_pages/document_search.rb +10 -0
  119. data/lib/kuality-coeus/page_objects/lookup_pages/group_lookup.rb +3 -0
  120. data/lib/kuality-coeus/page_objects/lookup_pages/institute_rates_lookup.rb +12 -0
  121. data/lib/kuality-coeus/page_objects/lookup_pages/opportunity_lookup.rb +6 -0
  122. data/lib/kuality-coeus/page_objects/lookup_pages/organization_lookup.rb +5 -0
  123. data/lib/kuality-coeus/page_objects/lookup_pages/person_extended_attributes.rb +5 -0
  124. data/lib/kuality-coeus/page_objects/lookup_pages/person_lookup.rb +10 -0
  125. data/lib/kuality-coeus/page_objects/lookup_pages/role_lookup.rb +6 -0
  126. data/lib/kuality-coeus/page_objects/lookup_pages/sponsor_lookup.rb +9 -0
  127. data/lib/kuality-coeus/page_objects/lookup_pages/unit_admin_lookup.rb +3 -0
  128. data/lib/kuality-coeus/page_objects/lookup_pages/unit_lookup.rb +3 -0
  129. data/lib/kuality-coeus/page_objects/maintenance.rb +7 -0
  130. data/lib/kuality-coeus/page_objects/notification_editor.rb +6 -0
  131. data/lib/kuality-coeus/page_objects/proposal_development.rb +7 -2
  132. data/lib/kuality-coeus/page_objects/proposal_development/abstracts_and_attachments.rb +54 -0
  133. data/lib/kuality-coeus/page_objects/proposal_development/key_personnel.rb +126 -0
  134. data/lib/kuality-coeus/page_objects/proposal_development/pd_custom_data.rb +6 -0
  135. data/lib/kuality-coeus/page_objects/proposal_development/permissions.rb +44 -0
  136. data/lib/kuality-coeus/page_objects/proposal_development/phs_fellowship_questionnaire.rb +44 -0
  137. data/lib/kuality-coeus/page_objects/proposal_development/phs_training_budget_questionnaire.rb +50 -0
  138. data/lib/kuality-coeus/page_objects/proposal_development/proposal.rb +47 -8
  139. data/lib/kuality-coeus/page_objects/proposal_development/proposal_actions.rb +62 -0
  140. data/lib/kuality-coeus/page_objects/proposal_development/proposal_summary.rb +9 -0
  141. data/lib/kuality-coeus/page_objects/proposal_development/questions.rb +111 -0
  142. data/lib/kuality-coeus/page_objects/proposal_development/s2s.rb +35 -0
  143. data/lib/kuality-coeus/page_objects/proposal_development/special_review.rb +6 -0
  144. data/lib/kuality-coeus/page_objects/protocol/custom_data.rb +6 -0
  145. data/lib/kuality-coeus/page_objects/protocol/permissions.rb +5 -0
  146. data/lib/kuality-coeus/page_objects/protocol/personnel.rb +5 -0
  147. data/lib/kuality-coeus/page_objects/protocol/protocol.rb +11 -0
  148. data/lib/kuality-coeus/page_objects/protocol/questionnaire.rb +5 -0
  149. data/lib/kuality-coeus/page_objects/protocol/special_review.rb +6 -0
  150. data/lib/kuality-coeus/page_objects/rejection_confirmation.rb +5 -0
  151. data/lib/kuality-coeus/page_objects/researcher.rb +4 -2
  152. data/lib/kuality-coeus/page_objects/shared/unit_administrator.rb +13 -0
  153. data/lib/kuality-coeus/page_objects/system/person_extended_attributes.rb +18 -0
  154. data/lib/kuality-coeus/page_objects/system_admin.rb +7 -0
  155. data/lib/kuality-coeus/page_objects/unit.rb +2 -4
  156. data/lib/kuality-coeus/utilities.rb +39 -0
  157. data/libpeerconnection.log +0 -0
  158. metadata +140 -5
  159. data/lib/kuality-coeus/data_objects/committee_document.rb +0 -65
  160. data/lib/kuality-coeus/data_objects/proposal_development.rb +0 -53
  161. data/lib/kuality-coeus/navigation.rb +0 -3
@@ -0,0 +1,6 @@
1
+ class IPSpecialReview < KCInstitutionalProposal
2
+
3
+ inst_prop_header_elements
4
+ special_review
5
+
6
+ end
@@ -0,0 +1,48 @@
1
+ class KCAwards < BasePage
2
+
3
+ tab_buttons
4
+ global_buttons
5
+
6
+ class << self
7
+
8
+ def award_header_elements
9
+ buttons 'Award', 'Contacts', 'Commitments', 'Budget Versions',
10
+ 'Payment, Reports & Terms', 'Special Review', 'Custom Data',
11
+ 'Comments, Notes & Attachments', 'Award Actions', 'Medusa'
12
+ action(:time_and_money) { |b| b.t_m_button.click; b.loading }
13
+ element(:t_m_button) { |b| b.frm.button(name: 'methodToCall.timeAndMoney') }
14
+ element(:headerinfo_table) { |b| b.frm.div(id: 'headerarea').table(class: 'headerinfo') }
15
+ # The 'header' prefix on these method names is to prevent collision...
16
+ value(:header_pi) { |b| b.headerinfo_table[0][1].text }
17
+ value(:header_lead_unit) { |b| b.headerinfo_table[1][1].text }
18
+ value(:header_sponsor_name) { |b| b.headerinfo_table[2][1].text }
19
+ value(:header_document_id) { |b| b.headerinfo_table[0][3].text[/\d+/] }
20
+ value(:header_status) { |b| b.headerinfo_table[0][3].text[/(?<=:).*/] }
21
+ value(:header_award_id) { |b| b.headerinfo_table[1][3].text[/.*(?=:)/] }
22
+ value(:header_account) { |b| b.headerinfo_table[][].text }
23
+ value(:header_last_update) { |b| b.headerinfo_table[][].text }
24
+ end
25
+
26
+ def report_types *types
27
+ types.each_with_index do |type, index|
28
+ name=damballa(type)
29
+ tag=type.gsub(/([\s\/])/,'')
30
+ element("#{name}_report_type".to_sym) { |b| b.frm.select(name: "awardReportsBean.newAwardReportTerms[#{index}].reportCode") }
31
+ element("#{name}_frequency".to_sym) { |b| b.frm.select(name: "awardReportsBean.newAwardReportTerms[#{index}].frequencyCode") }
32
+ element("#{name}_frequency_base".to_sym) { |b| b.frm.select(name: "awardReportsBean.newAwardReportTerms[#{index}].frequencyBaseCode") }
33
+ action("add_#{name}_report_term".to_sym) { |b| b.(name: /anchorReportClasses:#{tag}/).click; b.loading }
34
+ end
35
+ end
36
+
37
+ def terms *terms
38
+ terms.each_with_index do |term, index|
39
+ name=damballa(term)
40
+ tag=term.gsub(/([\s\/])/,'')
41
+ element("#{name}_code".to_sym) { |b| b.frm.text_field(name: "sponsorTermFormHelper.newSponsorTerms[#{index}].sponsorTermCode") }
42
+ action("add_#{name}_term") { |b| b.frm.button(name: /anchorAwardTerms:#{tag}Terms/).click; b.loading }
43
+ end
44
+ end
45
+
46
+ end
47
+
48
+ end
@@ -0,0 +1,15 @@
1
+ class KCProtocol < BasePage
2
+
3
+ tab_buttons
4
+ global_buttons
5
+
6
+ class << self
7
+
8
+ def protocol_header_elements
9
+ buttons 'Protocol', 'Personnel', 'Questionnaire', 'Custom Data', 'Special Review',
10
+ 'Permissions', 'Notes & Attachments', 'Protocol Actions', 'Medusa'
11
+ end
12
+
13
+ end
14
+
15
+ end
@@ -1,9 +1,8 @@
1
- class Login < PageFactory
1
+ class Login < BasePage
2
2
 
3
- page_url $base_url
4
- expected_title "Login"
3
+ page_url "#{$base_url}portal.do?"
5
4
 
6
- element(:username) { |b| b.text_field(name: "__login_user") }
7
- button "Login"
5
+ element(:username) { |b| b.text_field(name: '__login_user') }
6
+ button 'Login'
8
7
 
9
8
  end
@@ -0,0 +1,10 @@
1
+ class Lookups < BasePage
2
+
3
+ tiny_buttons
4
+ search_results_table
5
+
6
+ element(:create_button) { |b| b.frm.link(title: 'Create a new record') }
7
+ action(:create_new) { |b| b.create_button.click; b.loading }
8
+ alias_method :create, :create_new
9
+
10
+ end
@@ -0,0 +1,6 @@
1
+ class ActionListFilter < BasePage
2
+
3
+ element(:document_title) { |b| b.frm.text_field(name: 'filter.documentTitle') }
4
+ action(:filter) { |b| b.frm.button(name: 'methodToCall.filter').click; b.loading }
5
+
6
+ end
@@ -0,0 +1,4 @@
1
+ class AddressBookLookup < Lookups
2
+
3
+
4
+ end
@@ -0,0 +1,3 @@
1
+ class ProposalLookup < Lookups
2
+
3
+ end
@@ -0,0 +1,10 @@
1
+ class DocumentSearch < Lookups
2
+
3
+ page_url "#{$base_url}portal.do?channelTitle=Document%20Search&channelUrl=#{$base_url[/^.+com/]+':'+$base_url[/(?<=com)(\/.+\/)$/]}kew/DocumentSearch.do?"
4
+
5
+ element(:document_id) { |b| b.frm.text_field(id: 'documentId') }
6
+
7
+ action(:open_doc) { |document_id, b| b.frm.link(text: document_id).click; b.use_new_tab }
8
+ action(:doc_status) { |document_id, b| b.results_table.row(text: /#{document_id}/)[3].text }
9
+
10
+ end
@@ -0,0 +1,3 @@
1
+ class GroupLookup < Lookups
2
+
3
+ end
@@ -0,0 +1,12 @@
1
+ class InstituteRatesLookup < Lookups
2
+
3
+ element(:activity_type_code) { |b| b.frm.text_field(name: 'activityTypeCode') }
4
+ element(:fiscal_year) { |b| b.frm.text_field(name: 'fiscalYear') }
5
+ action(:on_off_campus) { |value, b| b.frm.radio(name: 'onOffCampusFlag', value: value).set }
6
+ element(:rate_class_code) { |b| b.frm.text_field(name: 'rateClassCode') }
7
+ element(:rate_type_code) { |b| b.frm.text_field(name: 'rateTypeCode') }
8
+ element(:rate) { |b| b.frm.text_field(name: 'instituteRate') }
9
+ element(:unit_number) { |b| b.frm.text_field(name: 'unitNumber') }
10
+ action(:active) { |val, b| b.frm.radio(name: 'active', value: val).set }
11
+
12
+ end
@@ -0,0 +1,6 @@
1
+ class OpportunityLookup < Lookups
2
+
3
+ element(:s2s_provider) { |b| b.frm.select(id: 'providerCode') }
4
+ element(:opportunity_id) { |b| b.frm.text_field(id: 'opportunityId') }
5
+
6
+ end
@@ -0,0 +1,5 @@
1
+ class OrganizationLookup < Lookups
2
+
3
+ element(:organization_id) { |b| b.frm.text_field(name: 'organizationId') }
4
+
5
+ end
@@ -0,0 +1,5 @@
1
+ class PersonExtendedAttributesLookup < Lookups
2
+
3
+ element(:person_id) { |b| b.frm.text_field(name: 'personId') }
4
+
5
+ end
@@ -0,0 +1,10 @@
1
+ class PersonLookup < Lookups
2
+
3
+ element(:kcperson_id) { |b| b.frm.text_field(name:'personId') }
4
+
5
+ element(:principal_name) { |b| b.frm.text_field(id: 'principalName') }
6
+ element(:principal_id) { |b| b.frm.text_field(id: 'principalId') }
7
+ element(:last_name) { |b| b.frm.text_field(id: 'lastName') }
8
+ element(:user_name) { |b| b.frm.text_field(id: 'userName') }
9
+
10
+ end
@@ -0,0 +1,6 @@
1
+ class RoleLookup < Lookups
2
+
3
+ element(:role_id) { |b| b.frm.text_field(name: 'id') }
4
+ element(:role_name) { |b| b.frm.text_field(name: 'name') }
5
+
6
+ end
@@ -0,0 +1,9 @@
1
+ class SponsorLookup < Lookups
2
+
3
+ element(:sponsor_name) { |b| b.frm.text_field(id: 'sponsorName') }
4
+ element(:sponsor_type_code) { |b| b.frm.select(id: 'sponsorTypeCode') }
5
+ element(:page_links) { |b| b.frm.span(class: 'pagelinks').links }
6
+
7
+ action(:get_sponsor_code) { |name, b| b.item_row(name).link(title: /Sponsor Code=/).text }
8
+
9
+ end
@@ -0,0 +1,3 @@
1
+ class UnitAdministratorLookup < Lookups
2
+
3
+ end
@@ -0,0 +1,3 @@
1
+ class UnitLookup < Lookups
2
+
3
+ end
@@ -0,0 +1,7 @@
1
+ class Maintenance < BasePage
2
+
3
+ page_url "#{$base_url}portal.do?selectedTab=portalMaintenanceBody"
4
+
5
+ links 'Institute Rate', 'Sponsor', 'Unit Administrator'
6
+
7
+ end
@@ -0,0 +1,6 @@
1
+ class NotificationEditor < BasePage
2
+
3
+ global_buttons
4
+ document_header_elements
5
+
6
+ end
@@ -1,11 +1,16 @@
1
1
  class ProposalDevelopmentDocument < BasePage
2
2
 
3
- frame_element
3
+ document_header_elements
4
+ tab_buttons
5
+ global_buttons
6
+ error_messages
4
7
 
5
8
  class << self
6
9
 
7
10
  def proposal_header_elements
8
-
11
+ buttons 'Proposal', 'S2S', 'Key Personnel', 'Special Review', 'Custom Data',
12
+ 'Abstracts and Attachments', 'Questions', 'Budget Versions', 'Permissions',
13
+ 'Proposal Summary', 'Proposal Actions', 'Medusa'
9
14
  end
10
15
 
11
16
  end
@@ -0,0 +1,54 @@
1
+ class AbstractsAndAttachments < ProposalDevelopmentDocument
2
+
3
+ proposal_header_elements
4
+
5
+ # Proposal Attachments
6
+ element(:proposal_attachment_type) { |b| b.frm.select(id: 'newNarrative.narrativeTypeCode') }
7
+ element(:attachment_status) { |b| b.frm.select(id: 'newNarrative.moduleStatusCode') }
8
+ element(:proposal_attachment_file_name) { |b| b.frm.file_field(name: 'newNarrative.narrativeFile') }
9
+ element(:contact_name) { |b| b.frm.text_field(id: 'newNarrative.contactName') }
10
+ element(:email_address) { |b| b.frm.text_field(id: 'newNarrative.emailAddress') }
11
+ element(:phone_number) { |b| b.frm.text_field(id: 'newNarrative.phoneNumber') }
12
+ element(:comments) { |b| b.frm.text_field(id: 'newNarrative.comments') }
13
+ element(:proposal_attachment_description) { |b| b.frm.text_field(id: 'newNarrative.moduleTitle') }
14
+ action(:add_proposal_attachment) { |b| b.frm.button(name: 'methodToCall.addProposalAttachment').click }
15
+
16
+ action(:edit_status) { |type, p| p.proposal_attachment_div(type).select(name: /moduleStatusCode/) }
17
+
18
+ action(:show_proposal_attachment) { |type, b| b.frm.button(alt: /#{type}/).click }
19
+ action(:proposal_attachment_div) { |type, b| b.frm.div(id: /tab-ProposalAttachments..#{type}Incomplete-div/) }
20
+
21
+ element(:save_button) { |b| b.frm.button(name: 'methodToCall.save') }
22
+
23
+ # Personnel Attachments
24
+ element(:person) { |b| b.frm.select(name: 'newPropPersonBio.proposalPersonNumber') }
25
+ element(:personnel_attachment_type) { |b| b.frm.select(id: 'newPropPersonBio.documentTypeCode') }
26
+ element(:personnel_attachment_description) { |b| b.frm.text_field(id: 'newPropPersonBio.description') }
27
+ element(:personnel_attachment_file_name) { |b| b.frm.file_field(name: 'newPropPersonBio.personnelAttachmentFile') }
28
+ action(:add_personnel_attachment) { |b| b.frm.button(name: /methodToCall.addPersonnelAttachment.anchorPersonnelAttachments/).click }
29
+
30
+ element(:personnel_attachment_table) { |b| b.frm.div(id: 'tab-PersonnelAttachments0-div').table }
31
+
32
+ # Internal Attachments
33
+ element(:internal_attachment_type) { |b| b.frm.select(id: 'newInstituteAttachment.institutionalAttachmentTypeCode') }
34
+ element(:internal_attachment_description) { |b| b.frm.text_field(id: 'newInstituteAttachment.moduleTitle') }
35
+ element(:internal_attachment_file_name) { |b| b.frm.file_field(name: 'newInstituteAttachment.narrativeFile') }
36
+ action(:add_internal_attachment) { |b| b.frm.button(name: /methodToCall.addInstitutionalAttachment.anchorInternalAttachments/).click }
37
+
38
+ element(:internal_attachments_table) { |b| b.frm.div(id: 'tab-InternalAttachments1-div').table }
39
+
40
+ # Abstracts
41
+ element(:abstract_type) { |b| b.frm.select(id: 'newProposalAbstract.abstractTypeCode') }
42
+ element(:abstract_details) { |b| b.frm.text_field(id: 'newProposalAbstract.abstractDetails') }
43
+ action(:add_abstract) { |b| b.frm.button(name: 'methodToCall.addAbstract.anchorAbstracts').click }
44
+
45
+ element(:abstracts_table) { |b| b.frm.table(id: 'abstracts-table') }
46
+
47
+ # Notes
48
+ element(:note_topic) { |b| b.frm.text_field(id: 'newNote.noteTopicText') }
49
+ element(:note_text) { |b| b.frm.text_field(id: 'newNote.noteText') }
50
+ action(:add_note) { |b| b.frm.button(name: 'methodToCall.insertBONote').click }
51
+
52
+ element(:notes_table) { |b| b.frm.table(summary: 'view/add notes') }
53
+
54
+ end
@@ -0,0 +1,126 @@
1
+ class KeyPersonnel < ProposalDevelopmentDocument
2
+
3
+ proposal_header_elements
4
+
5
+ action(:employee_search) { |b| b.frm.button(name: 'methodToCall.performLookup.(!!org.kuali.kra.bo.KcPerson!!).(((personId:newPersonId))).((``)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;;::::).anchor').click }
6
+ action(:non_employee_search) { |b| b.frm.button(name: 'methodToCall.performLookup.(!!org.kuali.kra.bo.NonOrganizationalRolodex!!).(((rolodexId:newRolodexId))).((``)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;;::::).anchor').click }
7
+ element(:proposal_role) { |b| b.frm.select(id: 'newProposalPerson.proposalPersonRoleId') }
8
+ element(:key_person_role) { |b| b.frm.text_field(id: 'newProposalPerson.projectRole') }
9
+ action(:add_person) { |b| b.frm.button(name: 'methodToCall.insertProposalPerson').click }
10
+ action(:clear) { |b| b.frm.button(name: 'methodToCall.clearProposalPerson').click }
11
+
12
+ element(:save_button) { |b| b.frm.button(name: 'methodToCall.save') }
13
+
14
+ value(:person_name) { |b| b.frm.table(class: 'grid')[0][1].text }
15
+
16
+ # Use to check if there are errors present or not...
17
+ element(:add_person_errors_div) { |b| b.frm.div(class: 'annotate-container').div(class: 'left-errmsg-tab').div }
18
+
19
+ # The catch-all container for all errors that appear on the page
20
+
21
+ value(:add_person_errors) { |b| b.frm.div(class: 'annotate-container').div(class: 'left-errmsg-tab').divs.collect{ |div| div.text} }
22
+ value(:add_validation_errors) { |b| b.frm.div(class: 'annotate-container').div(class: 'left-errmsg-tab', index: 1).lis.collect{ |li| li.text} }
23
+ value(:combined_credit_split_errors) { |b| b.frm.div(id: 'tab-CombinedCreditSplit-div').div(class: 'left-errmsg-tab').divs.collect{ |div| div.text } }
24
+
25
+ # Person info...
26
+
27
+ # Note this is a *setting* of the person's checkbox, since this method is only used
28
+ # in the context of deleting the person from the Personnel
29
+ action(:check_person) { |full_name, b| b.frm.h2(text: full_name).parent.checkbox(title: 'Generic Boolean Attribute').set }
30
+
31
+ action(:show_person) { |full_name, b| b.frm.button(title: "open #{twospace(full_name)}").click }
32
+
33
+ # Person Details...
34
+ action(:show_person_details) { |full_name, b| b.frm.button(id: "tab-#{nsp(full_name)}:PersonDetails-imageToggle").click }
35
+
36
+ # Note this method ONLY relates to the select list for the role, not
37
+ # the read-only field that appears when the role is "Key Person"
38
+ action(:role) { |full_name, p| p.person_div(full_name).select(name: /document.developmentProposalList[\d+].proposalPersons[\d+].proposalPersonRoleId/) }
39
+ action(:user_name) { |full_name, p| p.person_div(full_name).table[1][3].text }
40
+ action(:home_unit) { |full_name, p| p.person_div(full_name).table[8][1].text }
41
+ action(:era_commons_name) { |full_name, p| p.person_div(full_name).text_field(name: /eraCommonsUserName/) }
42
+
43
+ # Degrees...
44
+ action(:degree_type) { |full_name, p| p.degrees_div(full_name).select(name: 'newProposalPersonDegree[0].degreeCode') }
45
+ action(:degree_description) { |full_name, p| p.degrees_div(full_name).text_field(name: 'newProposalPersonDegree[0].degree') }
46
+ action(:graduation_year) { |full_name, p| p.degrees_div(full_name).text_field(name: 'newProposalPersonDegree[0].graduationYear') }
47
+ action(:school) { |full_name, p| p.degrees_div(full_name).text_field(name: 'newProposalPersonDegree[0].school') }
48
+ action(:add_degree) { |full_name, p| p.degrees_div(full_name).button(name: 'methodToCall.insertDegree.document.developmentProposalList[0].proposalPersons[0].line').click }
49
+
50
+ # Unit Details...
51
+ action(:unit_details_errors_div) { |full_name, p| p.unit_div(full_name).div(class: 'left-errmsg-tab').div }
52
+ action(:unit_details_errors) { |full_name, p| p.unit_details_errors_div(full_name).divs.collect { |div| div.text } }
53
+
54
+ # This button is only present in the context of a Key Person...
55
+ action(:add_unit_details) { |full_name, p| p.unit_div(full_name).button(title: 'Add Unit Details').click }
56
+
57
+ action(:show_unit_details) { |full_name, b| b.frm.button(id: "tab-#{nsp(full_name)}:UnitDetails-imageToggle").click }
58
+ action(:lookup_unit) { |full_name, p| p.unit_div(full_name).button(name: 'methodToCall.performLookup.(!!org.kuali.kra.bo.Unit!!).(((unitNumber:newProposalPersonUnit[0].unitNumber,unitName:newProposalPersonUnit[0].unitName))).((``)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;;::::).anchor').click }
59
+ action(:unit_number) { |full_name, p| p.unit_div(full_name).text_field(id: /unitNumber/) }
60
+ action(:add_unit) { |full_name, p| p.unit_div(full_name).button(title: 'Add Unit').click }
61
+ action(:delete_unit) { |full_name, unit_number, p| p.unit_div(full_name).table(class: 'tab').row(text: /#{unit_number}/).button(title: 'Remove Unit').click }
62
+
63
+ # This returns an array of hashes, like so:
64
+ # [{:name=>"Unit1 Name", :number=>"Unit1 Number"}, {:name=>"Unit2 Name", :number=>"Unit2 Number"}]
65
+ action(:units) { |full_name, p| units = []; p.unit_div(full_name).table.to_a[2..-1].each { |unit| units << {name: unit[1], number: unit[2]} }; units }
66
+
67
+ # Proposal Person Certification
68
+ action(:include_certification_questions) { |full_name, b| b.certification_div(full_name).button(title: 'Add Certification Question').click }
69
+ action(:show_proposal_person_certification) {}
70
+ # Questions...
71
+ {
72
+ :certify_info_true=>0,
73
+ :potential_for_conflict=>1,
74
+ :submitted_financial_disclosures=>2,
75
+ :lobbying_activities=>3,
76
+ :excluded_from_transactions=>4,
77
+ :familiar_with_pla=>5
78
+ }.each { |key, value| action(key) { |full_name, answer, p| p.questions_div(full_name).table(data_kc_questionindex: value.to_s).radio(value: answer).set } }
79
+
80
+ # Combined Credit Split
81
+ {
82
+ 'recognition'=>1,
83
+ 'responsibility'=>2,
84
+ 'space'=>3,
85
+ 'financial'=>4
86
+ }.each do |key, value|
87
+ # Makes methods for the person's 3 credit splits (doesn't have to take the full name of the person to work)
88
+ # Example: page.responsibility('Joe Schmoe').set '100.00'
89
+ action(key.to_sym) { |name, b| b.credit_split_div_table.row(text: /#{name}/)[value].text_field }
90
+ # Makes methods for the person's units' credit splits
91
+ # Example: page.unit_financial('Jane Schmoe', 'Unit').set '50.0'
92
+ action("unit_#{key}".to_sym) { |full_name, unit_name, p| p.target_unit_row(full_name, unit_name)[value].text_field }
93
+ end
94
+
95
+ # =======
96
+ private
97
+ # =======
98
+
99
+ class << self
100
+ # Used for getting rid of the space in the full name
101
+ def nsp(string)
102
+ string.gsub(' ', '')
103
+ end
104
+
105
+ # Used to add an extra space in the full name (because some
106
+ # elements in the page have that, annoyingly!)
107
+ def twospace(string)
108
+ string.gsub(' ', ' ')
109
+ end
110
+ end
111
+
112
+ element(:credit_split_div_table) { |b| b.frm.div(id: 'tab-CombinedCreditSplit-div').table }
113
+
114
+ action(:target_unit_row) do |full_name, unit_number, p|
115
+ trows = p.credit_split_div_table.rows
116
+ index = trows.find_index { |row| row.text=~/#{full_name}/ }
117
+ trows[index..-1].find { |row| row.text=~/#{unit_number}/ }
118
+ end
119
+
120
+ action(:person_div) { |full_name, b| b.frm.div(id: "tab-#{nsp(full_name)}:PersonDetails-div") }
121
+ action(:degrees_div) { |full_name, b| b.frm.div(id: "tab-#{nsp(full_name)}:Degrees-div") }
122
+ action(:unit_div) { |full_name, b| b.frm.div(id: "tab-#{nsp(full_name)}:UnitDetails-div") }
123
+ action(:questions_div) { |full_name, b| b.frm.span(class: 'subhead-left', text: full_name).parent.parent.div(class: 'questionnaireContent') }
124
+ action(:certification_div) { |full_name, b| b.frm.div(id: "tab-#{nsp(full_name)}:Certify-div") }
125
+
126
+ end
@@ -0,0 +1,6 @@
1
+ class PDCustomData < ProposalDevelopmentDocument
2
+
3
+ proposal_header_elements
4
+ custom_data
5
+
6
+ end