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,44 @@
1
+ class Permissions < ProposalDevelopmentDocument
2
+
3
+ proposal_header_elements
4
+
5
+ action(:assigned_to_role) { |role, b| b.frm.td(id: role).text }
6
+
7
+ element(:user_name) { |b| b.frm.text_field(id: 'newProposalUser.username') }
8
+ element(:role) { |b| b.frm.select(id: 'newProposalUser.roleName') }
9
+ action(:add) { |b| b.frm.button(name: 'methodToCall.addProposalUser.anchorUsers').click }
10
+
11
+ action(:assigned_role) { |user, b| b.user_row(user)[5].text }
12
+ action(:edit_role) { |user, b| b.user_row(user).button(name: /methodToCall.editRoles.line\d+.anchorUsers/).click }
13
+ action(:delete) { |user, b| b.user_row(user).button(name: /methodToCall.deleteProposalUser.line\d+.anchorUsers/).click }
14
+
15
+ element(:save_button) { |b| b.frm.button(name: 'methodToCall.save') }
16
+
17
+ # Note this is the table in the Users tab on the page...
18
+ element(:user_roles_table) { |b| b.frm.table(id: 'user-roles') }
19
+
20
+ action(:user_row) { |user, b| b.user_roles_table.row(text: /#{user}/) }
21
+
22
+ end
23
+
24
+ # This a child window that appears when you click the
25
+ # "edit role" button for an existing participant.
26
+ class Roles < BasePage
27
+
28
+ error_messages
29
+
30
+ element(:save_button) { |b| b.frm.button(name: 'methodToCall.setEditRoles') }
31
+ action(:save) { |b| b.save_button.click }
32
+
33
+ def self.chkbx(name, number)
34
+ element(name) { |b| b.frm.checkbox(name: "proposalUserEditRoles.roleStates[#{number}].state") }
35
+ end
36
+
37
+ chkbx :viewer, 0
38
+ chkbx :budget_creator, 1
39
+ chkbx :narrative_writer, 2
40
+ chkbx :aggregator, 3
41
+ chkbx :delete_proposal, 7
42
+ chkbx :approver, 4
43
+
44
+ end
@@ -0,0 +1,44 @@
1
+ #TODO: Consider a way to handle the element definitions for questionnaire questions depending on the number of questionnaires present
2
+
3
+ class PHSFellowshipQuestionnaire < ProposalDevelopmentDocument
4
+
5
+ proposal_header_elements
6
+
7
+ RADIO_NAMES = [:indefinite_human_subjects, :clinical_trial, :phase_3_trial, :indefinite_vertebrates,
8
+ :human_stem_cells, :specific_cell_line, :seeking_degree_during_proposed_award,
9
+ :have_kirchstein_support, :have_kirschstein_support_start_date, :have_kirschstein_support_end_date,
10
+ :have_nih_grant_number, :have_additonal_kirschstein_support, :previous_submission,
11
+ :senior_fellowship_application, :supplement_funding]
12
+ [0,1,2,3,
13
+ 4,5,27,
14
+ 37,40,42,
15
+ 44,46,73,
16
+ 75,79
17
+ ].each_with_index do |num, index|
18
+ action("#{RADIO_NAMES[index]}_element".to_sym) { |answer, b| b.frm.radio(name: "s2sQuestionnaireHelper.answerHeaders[1].answers[#{num}].answer", value: answer) }
19
+ action(RADIO_NAMES[index]) { |answer, b| b.frm.radio(name: "s2sQuestionnaireHelper.answerHeaders[1].answers[#{num}].answer", value: answer).set }
20
+ end
21
+
22
+ # Stem cells...
23
+ 1.upto(20) do |x|
24
+ element("phs_stem_cell_line_#{x}".to_sym) { |b| b.frm.text_field(id: "s2sQuestionnaireHelper.answerHeaders[1].answers[#{5+x}].answer") }
25
+ end
26
+
27
+ SELECT_LIST_NAMES = [:field_of_training, :type_of_degree_during_proposed_award, :kirschstein_support_level, :kirschstein_support_recipient,
28
+ :salary_period]
29
+ [26,30,38,39,
30
+ 77
31
+ ].each_with_index do |num, index|
32
+ element(SELECT_LIST_NAMES[index]) { |b| b.frm.select(name: "s2sQuestionnaireHelper.answerHeaders[1].answers[#{num}].answer") }
33
+ end
34
+
35
+ TEXT_FIELD_NAMES = [:expected_degree_completion_date, :kirschstein_support_start_date, :kirschstein_support_end_date, :nih_grant_number,
36
+ :former_institution, :present_institutional_base_salary, :salary_receipt_period, :supplemental_funding_amount,
37
+ :supplemental_funding_receipt_period, :supplemental_funding_type, :supplemental_funding_source]
38
+ [29,41,43,45,
39
+ 74,76,78,80,
40
+ 81,82,83
41
+ ].each_with_index do |num, index|
42
+ element(TEXT_FIELD_NAMES[index]) { |b| b.frm.text_field(id: "s2sQuestionnaireHelper.answerHeaders[1].answers[#{num}].answer") }
43
+ end
44
+ end
@@ -0,0 +1,50 @@
1
+ class PHS398TrainingBudgetQuestionnaire < ProposalDevelopmentDocument
2
+
3
+ proposal_header_elements
4
+
5
+ def self.phs_398_radio_names
6
+ array = []
7
+ 1.upto(5) do |x|
8
+ %w{funds
9
+ undergrad_trainees
10
+ predoc_trainees
11
+ postdoc_trainees
12
+ nondegree_postdocs
13
+ short_nondegree_postdocs
14
+ full_degree_postdocs
15
+ short_degree_postdocs
16
+ other_trainees}.each do |name|
17
+ array << "bp#{x}_#{name}".to_sym
18
+ end
19
+ end
20
+ array
21
+ end
22
+
23
+ [0,1,8,13,14,23,32,41,50,55,56,63,68,69,78,87,96,105,110,111,118,123,124,133,142,151,
24
+ 160,165,166,173,178,179,188,197,206,215,220,221,228,233,234,243,252,261,270].each_with_index do |num, index|
25
+ action("#{phs_398_radio_names[index]}_element".to_sym) { |answer, b|
26
+ b.frm.radio(name: "s2sQuestionnaireHelper.answerHeaders[0].answers[#{num}].answer", value: answer) }
27
+ action(phs_398_radio_names[index]) { |answer, b|
28
+ b.frm.radio(name: "s2sQuestionnaireHelper.answerHeaders[0].answers[#{num}].answer", value: answer).set }
29
+ end
30
+
31
+ 0.upto(4) do |x|
32
+ element("bp#{x+1}_full_term_undergrad_trainees".to_sym) { |b| b.frm.text_field(name: "s2sQuestionnaireHelper.answerHeaders[0].answers[#{2+(x*55)}].answer") }
33
+ element("bp#{x+1}_short_term_undergrad_trainees".to_sym) { |b| b.frm.text_field(name: "s2sQuestionnaireHelper.answerHeaders[0].answers[#{5+(x*55)}].answer") }
34
+ element("bp#{x+1}_full_term_single_degree_trainees".to_sym) { |b| b.frm.text_field(name: "s2sQuestionnaireHelper.answerHeaders[0].answers[#{9+(x*55)}].answer") }
35
+ element("bp#{x+1}_short_term_single_degree_trainees_1".to_sym) { |b| b.frm.text_field(name: "s2sQuestionnaireHelper.answerHeaders[0].answers[#{10+(x*55)}].answer") }
36
+ element("bp#{x+1}_full_term_dual_degree_trainees".to_sym) { |b| b.frm.text_field(name: "s2sQuestionnaireHelper.answerHeaders[0].answers[#{11+(x*55)}].answer") }
37
+ element("bp#{x+1}_short_term_dual_degree_trainees".to_sym) { |b| b.frm.text_field(name: "s2sQuestionnaireHelper.answerHeaders[0].answers[#{12+(x*55)}].answer") }
38
+ element("bp#{x+1}_full_term_others".to_sym) { |b| b.frm.text_field(name: "s2sQuestionnaireHelper.answerHeaders[0].answers[#{51+(x*55)}].answer") }
39
+ element("bp#{x+1}_short_term_others".to_sym) { |b| b.frm.text_field(name: "s2sQuestionnaireHelper.answerHeaders[0].answers[#{53+(x*55)}].answer") }
40
+ 0.upto(7) do |n|
41
+ element("bp#{x+1}_full_term_nondegree_postdocs_#{n}".to_sym) { |b| b.frm.text_field(id: "s2sQuestionnaireHelper.answerHeaders[0].answers[#{(15+n)+(x*55)}].answer") }
42
+ element("bp#{x+1}_short_term_nondegree_postdocs_#{n}".to_sym) { |b| b.frm.text_field(id: "s2sQuestionnaireHelper.answerHeaders[0].answers[#{(24+n)+(x*55)}].answer") }
43
+ element("bp#{x+1}_full_term_degree_postdocs_#{n}".to_sym) { |b| b.frm.text_field(id: "s2sQuestionnaireHelper.answerHeaders[0].answers[#{(33+n)+(x*55)}].answer") }
44
+ element("bp#{x+1}_short_term_degree_postdocs_#{n}".to_sym) { |b| b.frm.text_field(id: "s2sQuestionnaireHelper.answerHeaders[0].answers[#{(42+n)+(x*55)}].answer") }
45
+ end
46
+ end
47
+
48
+ # Questionnaire Title Tab
49
+
50
+ end
@@ -1,12 +1,51 @@
1
1
  class Proposal < ProposalDevelopmentDocument
2
2
 
3
- element(:description) { |b| b.frm.text_field(id: "document.documentHeader.documentDescription") }
4
- element(:sponsor_code) { |b| b.frm.text_field(id: "document.developmentProposalList[0].sponsorCode") }
5
- element(:proposal_type) { |b| b.frm.select(id: "document.developmentProposalList[0].proposalTypeCode") }
6
- element(:lead_unit) { |b| b.frm.select(id: "document.developmentProposalList[0].ownedByUnitNumber") }
7
- element(:project_start_date) { |b| b.frm.text_field(id: "document.developmentProposalList[0].requestedStartDateInitial") }
8
- element(:project_end_date) { |b| b.frm.text_field(id: "document.developmentProposalList[0].requestedEndDateInitial") }
9
- element(:activity_type) { |b| b.frm.select(id: "document.developmentProposalList[0].activityTypeCode") }
10
- element(:project_title) { |b| b.frm.text_field(id: "document.developmentProposalList[0].title") }
3
+ proposal_header_elements
4
+
5
+ value(:feedback) { |b| b.frm.div(class: 'left-errmsg').text }
6
+
7
+ # Required fields
8
+ value(:proposal_number) { |b| b.frm.div(id: 'tab-RequiredFieldsforSavingDocument-div').table[0][1].text }
9
+ element(:sponsor_code) { |b| b.frm.text_field(id: 'document.developmentProposalList[0].sponsorCode') }
10
+ action(:find_sponsor_code) { |b| b.frm.button(name: 'methodToCall.performLookup.(!!org.kuali.kra.bo.Sponsor!!).(((sponsorCode:document.developmentProposalList[0].sponsorCode,sponsorName:document.developmentProposalList[0].sponsor.sponsorName))).((``)).((<>)).(([])).((**)).((^^)).((&&)).((//)).((~~)).(::::;;::::).anchorRequiredFieldsforSavingDocument').click }
11
+ element(:proposal_type) { |b| b.frm.select(id: 'document.developmentProposalList[0].proposalTypeCode') }
12
+ element(:lead_unit) { |b| b.frm.select(id: 'document.developmentProposalList[0].ownedByUnitNumber') }
13
+ value(:lead_unit_ro) { |b| b.frm.div(id: 'tab-RequiredFieldsforSavingDocument-div').table[2][1].text }
14
+ element(:project_start_date) { |b| b.frm.text_field(id: 'document.developmentProposalList[0].requestedStartDateInitial') }
15
+ element(:project_end_date) { |b| b.frm.text_field(id: 'document.developmentProposalList[0].requestedEndDateInitial') }
16
+ element(:activity_type) { |b| b.frm.select(id: 'document.developmentProposalList[0].activityTypeCode') }
17
+ element(:project_title) { |b| b.frm.text_field(id: 'document.developmentProposalList[0].title') }
18
+ element(:save_button) { |b| b.frm.button(name: 'methodToCall.save') }
19
+
20
+ # Institutional fields
21
+
22
+ # Sponsor and Program Information
23
+ element(:sponsor_deadline_date) { |b| b.frm.text_field(id: 'document.developmentProposalList[0].deadlineDate') }
24
+ element(:opportunity_id) { |b| b.frm.text_field(name: 'document.developmentProposalList[0].programAnnouncementNumber') }
25
+
26
+ # Applicant Organization
27
+
28
+ # Performing Organization
29
+
30
+ # Performance Site Locations
31
+
32
+ # Other Organizations
33
+
34
+ # Delivery Info
35
+ element(:mail_by) { |b| b.frm.select(name: 'document.developmentProposalList[0].mailBy') }
36
+ element(:mail_type) { |b| b.frm.select(name: 'document.developmentProposalList[0].mailType') }
37
+
38
+ # Keywords
39
+
40
+ # When the proposal is deleted...
41
+ value(:error_message) { |b| b.frm.table(class: 'container2').row[1].text }
42
+
43
+ # Overview tab error divs
44
+ element(:overview_tab_errors) { |b| b.frm.div(index: 0, class: 'left-errmsg-tab').div(index: 0).divs(style: 'display:list-item;margin-left:20px;') }
45
+
46
+ # Required Fields tab error divs
47
+ element(:required_fields_errors) { |b| b.frm.div(index: 1, class: 'left-errmsg-tab').div(index: 0).divs(style: 'display:list-item;margin-left:20px;') }
48
+
49
+ element(:error_summary) { |b| b.frm.div(class: 'error') }
11
50
 
12
51
  end
@@ -0,0 +1,62 @@
1
+ class ProposalActions < ProposalDevelopmentDocument
2
+
3
+ proposal_header_elements
4
+ route_log
5
+ tiny_buttons
6
+ validation_elements
7
+
8
+ glbl 'Submit To Sponsor', 'Submit To S2S', 'Send AdHoc Requests'
9
+
10
+ # Data Validation
11
+ element(:data_validation_header) { |b| b.frm.h2(text: 'Data Validation') }
12
+ element(:key_personnel_errors_button) { |b| b.frm.button(name: 'methodToCall.toggleTab.tabKeyPersonnelInformationValidationErrors') }
13
+ action(:show_key_personnel_errors) { |b| b.key_personnel_button.click }
14
+ element(:key_personnel_errors) { |b| b.frm.tbody(id: 'tab-KeyPersonnelInformationValidationErrors-div').tds(width: '94%') }
15
+ action(:show_budget_versions_errors) { |b| b.frm.button(name: 'methodToCall.toggleTab.tabBudgetVersionsValidationErrors').click }
16
+ action(:show_proposal_questions_errors) { |b| b.frm.button(name: 'methodToCall.toggleTab.tabAProposalQuestionsValidationErrors').click }
17
+ element(:proposal_questions_errors) { |b| b.frm.tbody(id: 'tab-AProposalQuestionsValidationErrors-div').tds(width: '94%') }
18
+ action(:show_kuali_u_errors) { |b| b.frm.button(name: 'methodToCall.toggleTab.tabCKualiUniversityValidationErrors').click }
19
+ element(:kuali_u_errors) { |b| b.frm.tbody(id: 'tab-CKualiUniversityValidationErrors-div').tds(width: '94%') }
20
+ action(:show_questionnaire_errors) { |b| b.frm.button(name: 'methodToCall.toggleTab.tabS2SFATFlatQuestionnaireValidationErrors').click }
21
+ element(:questionnaire_errors) { |b| b.frm.tbody(id: 'tab-S2SFATFlatQuestionnaireValidationErrors-div').tds(width: '94%') }
22
+ action(:show_compliance_errors) { |b| b.frm.button(name: 'methodToCall.toggleTab.tabBComplianceValidationErrors').click }
23
+ element(:compliance_errors) { |b| b.frm.tbody(id: 'tab-BComplianceValidationErrors-div').tds(width: '94%') }
24
+
25
+ action(:show_sponsor_warnings) { |b| b.frm.button(name: 'methodToCall.toggleTab.tabSponsorProgramInformationWarnings').click }
26
+ element(:sponsor_warnings) { |b| b.frm.tbody(id: 'tab-SponsorProgramInformationWarnings-div').tds(width: '94%') }
27
+
28
+ value(:warnings) { |b| b.frm.td(text: 'Warnings').parent.parent.td(class: 'datacell').text }
29
+ value(:grants_gov_errors) { |b| b.frm.td(text: 'Grants.Gov Errors').parent.parent.td(class: 'datacell').text }
30
+ value(:unit_business_rules_errors) { |b| b.frm.td(text: 'Unit Business Rules Errors').parent.parent.td(class: 'datacell').text }
31
+ value(:unit_business_rules_warnings) { |b| b.frm.td(text: 'Unit Business Rules Warnings').parent.parent.td(class: 'datacell').text }
32
+
33
+ element(:save_button) { |b| b.frm.button(name: 'methodToCall.save') }
34
+ element(:approve_button) { |b| b.frm.button(name: 'methodToCall.approve') }
35
+ element(:disapprove_button) { |b| b.frm.button(name: 'methodToCall.disapprove') }
36
+ element(:reject_button) { |b| b.frm.button(name: 'methodToCall.reject') }
37
+
38
+ # Proposal Hierarchy
39
+
40
+ element(:link_child_proposal) { |b| b.frm.text_field(id: 'newHierarchyProposalNumber') }
41
+ element(:link_budget_type) { |b| b.frm.select(id: 'newHierarchyBudgetTypeCode') }
42
+ action(:link_to_hierarchy) { |b| b.frm.button(name: 'methodToCall.linkToHierarchy.anchorProposalHierarchy').click }
43
+
44
+ # Ad Hoc Recipients
45
+
46
+ element(:person_action_requested) { |b| b.frm.select(name: 'newAdHocRoutePerson.actionRequested') }
47
+ element(:person) { |b| b.frm.text_field(name: 'newAdHocRoutePerson.id') }
48
+ action(:add_person_request) { |b| b.frm.button(name: 'methodToCall.insertAdHocRoutePerson').click }
49
+
50
+ element(:group_action_requested) { |b| b.frm.select(name: 'newAdHocRouteWorkgroup.actionRequested') }
51
+ element(:namespace_code) { |b| b.frm.text_field(name: 'newAdHocRouteWorkgroup.recipientNamespaceCode') }
52
+ element(:name) { |b| b.frm.text_field(name: 'newAdHocRouteWorkgroup.recipientName') }
53
+ action(:add_group_request) { |b| b.frm.button(name: 'methodToCall.insertAdHocRouteWorkgroup').click }
54
+
55
+ # =======
56
+ private
57
+ # =======
58
+
59
+ #Notifications: People look up
60
+ action(:employee_search) { |b| b.frm.button(name: /org.kuali.kra.bo.KcPerson/).click }
61
+
62
+ end
@@ -0,0 +1,9 @@
1
+ class ProposalSummary < ProposalDevelopmentDocument
2
+
3
+ proposal_header_elements
4
+
5
+ element(:approve_button) { |b| b.frm.button(name: 'methodToCall.approve') }
6
+ element(:disapprove_button) { |b| b.frm.button(name: 'methodToCall.disapprove') }
7
+ element(:reject_button) { |b| b.frm.button(name: 'methodToCall.reject') }
8
+
9
+ end
@@ -0,0 +1,111 @@
1
+ class Questions < ProposalDevelopmentDocument
2
+
3
+ S2S_RADIO_NAMES = [:civil_service, :total_ftes, :year_2, :year_3, :year_4, :year_5, :year_6, :potential_effects,
4
+ :international_support, :pi_in_govt, :pi_foreign_employee, :change_in_pi, :change_in_institution,
5
+ :renewal_application, :inventions_conceived, :previously_reported, :disclose_title,
6
+ :clinical_trial, :phase_3_trial, :human_stem_cells, :specific_cell_line, :pi_new_investigator,
7
+ :proprietary_info, :environmental_impact, :authorized_exemption, :site_historic,
8
+ :international_activities, :other_agencies, :subject_to_review, :novice_applicants]
9
+
10
+ proposal_header_elements
11
+
12
+ # Used strictly for navigation validation...
13
+ element(:questions_header) { |b| b.frm.h2(text: 'A. Proposal Questions') }
14
+
15
+ # S2S Radio button questions...
16
+ # PLEASE NOTE: These radio buttons are a
17
+ # deviation from the typical radio button element definitions.
18
+ #
19
+ # In general, you want to define a radio button as an ELEMENT, not an ACTION.
20
+ #
21
+ # However, because there are so many radio elements on this page, and they all
22
+ # differ from each other in a very specific way, we are going to exploit this
23
+ # here in the page class as well as in how the associated data object's
24
+ # class instance variables get defined and used to update them.
25
+ #
26
+ # Use these radio buttons in your step definitions (or Object Class) like this example:
27
+ # ...
28
+ # page.civil_service "Y" #=> The "Y" is the value of the instance variable, and could also be "N"
29
+ # ...
30
+ [0,1,4,7,10,13,16,19,
31
+ 21,28,31,32,34,
32
+ 36,37,38,39,
33
+ 40,41,42,43,64,
34
+ 65,66,68,70,
35
+ 72,75,78,84
36
+ ].each_with_index do |num, index|
37
+ action("#{S2S_RADIO_NAMES[index]}_element".to_sym) { |answer, b| b.frm.radio(name: "questionnaireHelper.answerHeaders[0].answers[#{num}].answer", value: answer) }
38
+ action(S2S_RADIO_NAMES[index]) { |answer, b| b.frm.radio(name: "questionnaireHelper.answerHeaders[0].answers[#{num}].answer", value: answer).set }
39
+ end
40
+
41
+ 1.upto(6) do |i|
42
+ element("fiscal_year_#{i}".to_sym) { |b| b.frm.select(name: "questionnaireHelper.answerHeaders[0].answers[#{i+(2*i-1)}].answer") }
43
+ element("ftes_for_fy_#{i}".to_sym) { |b| b.frm.text_field(id: "questionnaireHelper.answerHeaders[0].answers[#{3*i}].answer") }
44
+ end
45
+
46
+ element(:explain_potential_effects) { |b| b.frm.text_field(id: 'questionnaireHelper.answerHeaders[0].answers[20].answer') }
47
+
48
+ 1.upto(5) do |n|
49
+ element("support_provided_#{n}".to_sym) { |b| b.frm.select(name: "questionnaireHelper.answerHeaders[0].answers[#{21+n}].answer") }
50
+ end
51
+
52
+ element(:explain_support) { |b| b.frm.text_field(id: 'questionnaireHelper.answerHeaders[0].answers[27].answer') }
53
+ element(:pis_us_govt_agency) { |b| b.frm.select(name: 'questionnaireHelper.answerHeaders[0].answers[29].answer') }
54
+ element(:total_amount_requested) { |b| b.frm.text_field(id: 'questionnaireHelper.answerHeaders[0].answers[30].answer') }
55
+ element(:former_pi) { |b| b.text_field(id: 'questionnaireHelper.answerHeaders[0].answers[33].answer') }
56
+ element(:former_institution) { |b| b.frm.text_field(id: 'questionnaireHelper.answerHeaders[0].answers[35].answer') }
57
+
58
+ # Stem cells...
59
+ 1.upto(20) do |x|
60
+ element("stem_cell_line_#{x}".to_sym) { |b| b.frm.text_field(id: "questionnaireHelper.answerHeaders[0].answers[#{43+x}].answer") }
61
+ end
62
+
63
+ element(:explain_environmental_impact) { |b| b.frm.text_field(id: 'questionnaireHelper.answerHeaders[0].answers[67].answer') }
64
+ element(:explain_exemption) { |b| b.frm.text_field(id: 'questionnaireHelper.answerHeaders[0].answers[69].answer') }
65
+ element(:explain_historic_designation) { |b| b.frm.text_field(id: 'questionnaireHelper.answerHeaders[0].answers[71].answer') }
66
+ element(:identify_countries) { |b| b.frm.text_field(id: 'questionnaireHelper.answerHeaders[0].answers[73].answer') }
67
+ element(:explain_international_activities) { |b| b.frm.text_field(id: 'questionnaireHelper.answerHeaders[0].answers[74].answer') }
68
+ element(:submitted_to_govt_agency) { |b| b.frm.select(id: 'questionnaireHelper.answerHeaders[0].answers[76].answer') }
69
+ element(:application_date) { |b| b.frm.text_field(id: 'questionnaireHelper.answerHeaders[0].answers[81].answer') }
70
+ element(:program) { |b| b.frm.select(name: 'questionnaireHelper.answerHeaders[0].answers[82].answer') }
71
+
72
+ # Proposal Questionnaire...
73
+ action(:show_proposal_questions) { |b| b.frm.button(name: 'methodToCall.toggleTab.tabAProposalQuestions').click }
74
+
75
+ action(:agree_to_nih_policy) { |answer, b| b.frm.radio(name: 'document.developmentProposalList[0].proposalYnq[2].answer', value: answer).set }
76
+ element(:policy_review_date) { |b| b.frm.text_field(id: 'document.developmentProposalList[0].proposalYnq[2].reviewDate') }
77
+
78
+ # Compliance Questionnaire...
79
+ action(:show_compliance_questions) { |b| b.frm.button(name: 'methodToCall.toggleTab.tabBCompliance').click }
80
+
81
+ action(:agree_to_ethical_conduct) { |answer, b| b.frm.radio(name: 'document.developmentProposalList[0].proposalYnq[1].answer', value: answer).set }
82
+ element(:conduct_review_date) { |b| b.frm.text_field(name: 'document.developmentProposalList[0].proposalYnq[1].reviewDate') }
83
+
84
+ # Kuali University
85
+
86
+ # Note that this method gets the Watir li element objects and returns them
87
+ # in a collection. You will have to specify which error li you want, plus the text
88
+ # attribute for that li.
89
+ #
90
+ # For example, if you want the text of the second error listed, your code should look
91
+ # like this:
92
+ #
93
+ # page.kuali_university_errors[1].text
94
+ element(:kuali_university_errors) { |b| b.frm.div(id: 'tab-CKualiUniversity-div').div(class: 'error').lis }
95
+
96
+ action(:show_kuali_university) { |b| b.frm.button(name: 'methodToCall.toggleTab.tabCKualiUniversity').click }
97
+
98
+ action(:dual_dept_appointment) { |answer, b| b.frm.radio(value: answer, name: 'document.developmentProposalList[0].proposalYnq[0].answer').set }
99
+ element(:dual_dept_review_date) { |b| b.frm.text_field(name: 'document.developmentProposalList[0].proposalYnq[0].reviewDate') }
100
+ element(:dual_dept_explanation) { |b| b.frm.text_field(name: 'document.developmentProposalList[0].proposalYnq[0].explanation') }
101
+
102
+ action(:on_sabbatical) { |answer, b| b.frm.radio(value: answer, name: 'document.developmentProposalList[0].proposalYnq[3].answer').set }
103
+ element(:sabbatical_review_date) { |b| b.frm.text_field(name: 'document.developmentProposalList[0].proposalYnq[3].reviewDate') }
104
+
105
+ action(:used_by_small_biz) { |answer, b| b.frm.radio(value: answer, name: 'document.developmentProposalList[0].proposalYnq[4].answer').set }
106
+ element(:small_biz_review_date) { |b| b.frm.text_field(name: 'document.developmentProposalList[0].proposalYnq[4].reviewDate') }
107
+
108
+ action(:understand_deadline) { |answer, b| b.frm.radio(value: answer, name: 'document.developmentProposalList[0].proposalYnq[5].answer').set }
109
+ element(:deadline_review_date) { |b| b.frm.text_field(name: 'document.developmentProposalList[0].proposalYnq[5].reviewDate') }
110
+
111
+ end
@@ -0,0 +1,35 @@
1
+ class S2S < ProposalDevelopmentDocument
2
+
3
+ proposal_header_elements
4
+
5
+ element(:s2s_header) { |b| b.frm.h2(text: 'S2S') }
6
+ action(:s2s_lookup) { |b| b.frm.button(name: 'methodToCall.performLookup.(!!org.kuali.kra.s2s.bo.S2sOpportunity!!).(((opportunityId:newS2sOpportunity.opportunityId,cfdaNumber:newS2sOpportunity.cfdaNumber,opportunityTitle:newS2sOpportunity.opportunityTitle,s2sSubmissionTypeCode:newS2sOpportunity.s2sSubmissionTypeCode,revisionCode:newS2sOpportunity.revisionCode,competetionId:newS2sOpportunity.competetionId,openingDate:newS2sOpportunity.openingDate,closingDate:newS2sOpportunity.closingDate,instructionUrl:newS2sOpportunity.instructionUrl,schemaUrl:newS2sOpportunity.schemaUrl,providerCode:newS2sOpportunity.providerCode))).((`document.developmentProposalList[0].programAnnouncementNumber:opportunityId,document.developmentProposalList[0].cfdaNumber:cfdaNumber,document.developmentProposalList[0].s2sOpportunity.providerCode:providerCode`)).((<>)).(([])).((**)).((^^)).((&yes&)).((//)).((~no~)).(::::;;::::).anchor').click }
7
+
8
+ # Opportunity
9
+ element(:opp_div) { |b| b.frm.div(id: 'tab-OpportunitySearch:Opportunity-div') }
10
+ element(:submission_type) { |b| b.frm.select(name: 'document.developmentProposalList[0].s2sOpportunity.s2sSubmissionTypeCode') }
11
+ element(:s2s_revision_type) { |b| b.frm.select(name: 'document.developmentProposalList[0].s2sOpportunity.revisionCode') }
12
+ element(:revision_specify) { |b| b.frm.text_field(name: 'document.developmentProposalList[0].s2sOpportunity.revisionOtherDescription') }
13
+ element(:remove_opp_button) { |b| b.frm.button(name: 'methodToCall.removeOpportunity') }
14
+ # Read-only elements...
15
+ value(:opportunity_title) { |b| b.opp_div.table.table[1][1].text }
16
+ value(:cfda_number) { |b| b.opp_div.table.table[4][1].text }
17
+ value(:competition_id) { |b| b.opp_div.table.table[5][1].text }
18
+
19
+ # Submission Details
20
+ element(:submission_details_table) { |b| b.frm.div(id: 'tab-OpportunitySearch:SubmissionDetails-div').table }
21
+ element(:refresh_submission_details_button) { |b| b.frm.button(alt: 'Refresh Submission Details') }
22
+ action(:refresh_submission_details) { |b| b.refresh_submission_details_button.click; b.loading }
23
+ value(:received_date) { |b| b.submission_details_table[0][1].text }
24
+ value(:last_modified_date) { |b| b.submission_details_table[0][3].text }
25
+ value(:submission_status) { |b| b.submission_details_table[1][1].text }
26
+ value(:s2s_tracking_id) { |b| b.submission_details_table[2][1].text }
27
+ value(:agency_tracking_id) { |b| b.submission_details_table[3][1].text }
28
+ value(:comments) { |b| b.submission_details_table[4][1].text }
29
+
30
+ # Forms
31
+ element(:forms_table) { |b| b.frm.div(id: 'tab-OpportunitySearch:Forms-div').table }
32
+ action(:include_form) { |name, b| b.forms_table.row(text: /#{name}/).checkbox(title: 'Include') }
33
+ action(:form_names) { |b| array = []; b.forms_table.rows.each { |row| array << row[0].text }; array }
34
+
35
+ end
@@ -0,0 +1,6 @@
1
+ class SpecialReview < ProposalDevelopmentDocument
2
+
3
+ proposal_header_elements
4
+ special_review
5
+
6
+ end
@@ -0,0 +1,6 @@
1
+ class ProtocolCustomData < KCProtocol
2
+
3
+ protocol_header_elements
4
+ custom_data
5
+
6
+ end
@@ -0,0 +1,5 @@
1
+ class ProtocolPermissions < KCProtocol
2
+
3
+ protocol_header_elements
4
+
5
+ end