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.
- data/Gemfile +1 -1
- data/Gemfile.lock +16 -18
- data/chromedriver.log +46 -0
- data/features/grants_gov/grants_gov_forms/code_and_form_mapping.feature +26 -0
- data/features/grants_gov/grants_gov_forms/forms_validation.feature +1 -0
- data/features/grants_gov/grants_gov_forms/s2s_questionnaire.feature +19 -0
- data/features/grants_gov/s2s_submission.feature +30 -0
- data/features/grants_gov/s2s_validation.feature +36 -0
- data/features/proposal_development/create_budget_versions.feature +31 -0
- data/features/proposal_development/create_proposal.feature +25 -0
- data/features/proposal_development/key_personnel_validations.feature +41 -0
- data/features/proposal_development/proposal_actions_validations.feature +46 -0
- data/features/proposal_development/proposal_permissions.feature +73 -0
- data/features/proposal_development/proposal_workflow.feature +105 -0
- data/features/proposal_development/special_review_validations.feature +12 -0
- data/features/step_definitions/action_list.rb +12 -0
- data/features/step_definitions/awards/create_award.rb +3 -0
- data/features/step_definitions/grants_gov/forms.rb +34 -0
- data/features/step_definitions/grants_gov/s2s_submission.rb +51 -0
- data/features/step_definitions/institutional_proposals/create_institutional_proposal.rb +3 -0
- data/features/step_definitions/proposal_development/budget_versions.rb +102 -0
- data/features/step_definitions/proposal_development/create_proposal.rb +157 -0
- data/features/step_definitions/proposal_development/edit_proposal.rb +79 -0
- data/features/step_definitions/proposal_development/institute_rates.rb +21 -0
- data/features/step_definitions/proposal_development/key_personnel_validations.rb +74 -0
- data/features/step_definitions/proposal_development/proposal_actions_validations.rb +73 -0
- data/features/step_definitions/proposal_development/proposal_permissions.rb +141 -0
- data/features/step_definitions/proposal_development/proposal_workflow.rb +81 -0
- data/features/step_definitions/proposal_development/s2s_validation.rb +30 -0
- data/features/step_definitions/proposal_development/special_review_validations.rb +7 -0
- data/features/step_definitions/test.rb +3 -0
- data/features/step_definitions/users.rb +65 -0
- data/features/support/env.rb +35 -0
- data/features/test.feature +13 -0
- data/kuality-coeus.gemspec +1 -1
- data/lib/chromedriver.log +4483 -0
- data/lib/kuality-coeus.rb +5 -2
- data/lib/kuality-coeus/core_extensions.rb +10 -0
- data/lib/kuality-coeus/data_objects/award/award.rb +126 -0
- data/lib/kuality-coeus/data_objects/award/award_transaction.rb +57 -0
- data/lib/kuality-coeus/data_objects/budget/budget_periods.rb +114 -0
- data/lib/kuality-coeus/data_objects/budget/budget_versions.rb +221 -0
- data/lib/kuality-coeus/data_objects/budget/subaward_budget.rb +65 -0
- data/lib/kuality-coeus/data_objects/committee_document/committee_document.rb +65 -0
- data/lib/kuality-coeus/data_objects/committee_document/committee_members.rb +30 -0
- data/lib/kuality-coeus/data_objects/committee_document/committee_schedule.rb +27 -0
- data/lib/kuality-coeus/data_objects/committee_document/member_roles.rb +28 -0
- data/lib/kuality-coeus/data_objects/conflict_of_interest/financial_entity.rb +48 -0
- data/lib/kuality-coeus/data_objects/grants_gov/phs_fellowship_questionnaire.rb +90 -0
- data/lib/kuality-coeus/data_objects/grants_gov/phs_training_budget_questionnaire.rb +5 -0
- data/lib/kuality-coeus/data_objects/institutional_proposal/institutional_proposal.rb +20 -0
- data/lib/kuality-coeus/data_objects/institutional_proposal/intellectual_property_review.rb +62 -0
- data/lib/kuality-coeus/data_objects/navigation.rb +64 -0
- data/lib/kuality-coeus/data_objects/proposal_development/compliance_questions.rb +47 -0
- data/lib/kuality-coeus/data_objects/proposal_development/custom_data.rb +41 -0
- data/lib/kuality-coeus/data_objects/proposal_development/degrees.rb +40 -0
- data/lib/kuality-coeus/data_objects/proposal_development/key_personnel.rb +299 -0
- data/lib/kuality-coeus/data_objects/proposal_development/kuali_university_questions.rb +58 -0
- data/lib/kuality-coeus/data_objects/proposal_development/permissions.rb +107 -0
- data/lib/kuality-coeus/data_objects/proposal_development/personnel_attachments.rb +46 -0
- data/lib/kuality-coeus/data_objects/proposal_development/proposal_attachments.rb +41 -0
- data/lib/kuality-coeus/data_objects/proposal_development/proposal_development.rb +301 -0
- data/lib/kuality-coeus/data_objects/proposal_development/proposal_questions.rb +52 -0
- data/lib/kuality-coeus/data_objects/proposal_development/s2s_questionnaire.rb +129 -0
- data/lib/kuality-coeus/data_objects/proposal_development/special_review.rb +79 -0
- data/lib/kuality-coeus/data_objects/rates/institute_rate.rb +209 -0
- data/lib/kuality-coeus/data_objects/user.rb +303 -33
- data/lib/kuality-coeus/gem_extensions.rb +26 -0
- data/lib/kuality-coeus/page_objects/000_base_page.rb +196 -14
- data/lib/kuality-coeus/page_objects/action_list.rb +32 -0
- data/lib/kuality-coeus/page_objects/award/award.rb +25 -0
- data/lib/kuality-coeus/page_objects/award/award_actions.rb +7 -0
- data/lib/kuality-coeus/page_objects/award/award_budget_versions.rb +9 -0
- data/lib/kuality-coeus/page_objects/award/commitments.rb +27 -0
- data/lib/kuality-coeus/page_objects/award/contacts.rb +19 -0
- data/lib/kuality-coeus/page_objects/award/custom_data.rb +6 -0
- data/lib/kuality-coeus/page_objects/award/payment_reports_terms.rb +26 -0
- data/lib/kuality-coeus/page_objects/award/special_review.rb +7 -0
- data/lib/kuality-coeus/page_objects/award/time_and_money.rb +36 -0
- data/lib/kuality-coeus/page_objects/budget/budget_actions.rb +31 -0
- data/lib/kuality-coeus/page_objects/budget/budget_versions.rb +13 -0
- data/lib/kuality-coeus/page_objects/budget/modular_budget.rb +16 -0
- data/lib/kuality-coeus/page_objects/budget/non-personnel.rb +11 -0
- data/lib/kuality-coeus/page_objects/budget/parameters.rb +65 -0
- data/lib/kuality-coeus/page_objects/budget/personnel.rb +56 -0
- data/lib/kuality-coeus/page_objects/budget/rates.rb +7 -0
- data/lib/kuality-coeus/page_objects/budget/summary.rb +5 -0
- data/lib/kuality-coeus/page_objects/budget_document.rb +19 -0
- data/lib/kuality-coeus/page_objects/central_admin.rb +4 -2
- data/lib/kuality-coeus/page_objects/committee/committee.rb +10 -10
- data/lib/kuality-coeus/page_objects/committee/members.rb +4 -4
- data/lib/kuality-coeus/page_objects/committee_document.rb +1 -6
- data/lib/kuality-coeus/page_objects/confirmation.rb +16 -0
- data/lib/kuality-coeus/page_objects/disclosure/disclosure.rb +56 -0
- data/lib/kuality-coeus/page_objects/disclosure/disclosure_actions.rb +9 -0
- data/lib/kuality-coeus/page_objects/document_header.rb +5 -0
- data/lib/kuality-coeus/page_objects/financial_entities.rb +1 -4
- data/lib/kuality-coeus/page_objects/financial_entities/my_financial_entities.rb +6 -0
- data/lib/kuality-coeus/page_objects/financial_entities/new_financial_entity.rb +11 -0
- data/lib/kuality-coeus/page_objects/financial_entities/reporter.rb +5 -3
- data/lib/kuality-coeus/page_objects/identity/person.rb +57 -0
- data/lib/kuality-coeus/page_objects/institute_rates_maintenance.rb +18 -0
- data/lib/kuality-coeus/page_objects/institutional_proposal.rb +18 -0
- data/lib/kuality-coeus/page_objects/institutional_proposal/contacts.rb +32 -0
- data/lib/kuality-coeus/page_objects/institutional_proposal/custom_data.rb +6 -0
- data/lib/kuality-coeus/page_objects/institutional_proposal/distribution.rb +20 -0
- data/lib/kuality-coeus/page_objects/institutional_proposal/institutional_proposal.rb +27 -0
- data/lib/kuality-coeus/page_objects/institutional_proposal/institutional_proposal_actions.rb +7 -0
- data/lib/kuality-coeus/page_objects/institutional_proposal/intellectual_property_review.rb +20 -0
- data/lib/kuality-coeus/page_objects/institutional_proposal/special_review.rb +6 -0
- data/lib/kuality-coeus/page_objects/kc_awards.rb +48 -0
- data/lib/kuality-coeus/page_objects/kc_protocol.rb +15 -0
- data/lib/kuality-coeus/page_objects/login.rb +4 -5
- data/lib/kuality-coeus/page_objects/lookup_pages/000_lookups.rb +10 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/action_list_filter.rb +6 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/address_book_lookup.rb +4 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/development_proposal_lookup.rb +3 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/document_search.rb +10 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/group_lookup.rb +3 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/institute_rates_lookup.rb +12 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/opportunity_lookup.rb +6 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/organization_lookup.rb +5 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/person_extended_attributes.rb +5 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/person_lookup.rb +10 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/role_lookup.rb +6 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/sponsor_lookup.rb +9 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/unit_admin_lookup.rb +3 -0
- data/lib/kuality-coeus/page_objects/lookup_pages/unit_lookup.rb +3 -0
- data/lib/kuality-coeus/page_objects/maintenance.rb +7 -0
- data/lib/kuality-coeus/page_objects/notification_editor.rb +6 -0
- data/lib/kuality-coeus/page_objects/proposal_development.rb +7 -2
- data/lib/kuality-coeus/page_objects/proposal_development/abstracts_and_attachments.rb +54 -0
- data/lib/kuality-coeus/page_objects/proposal_development/key_personnel.rb +126 -0
- data/lib/kuality-coeus/page_objects/proposal_development/pd_custom_data.rb +6 -0
- data/lib/kuality-coeus/page_objects/proposal_development/permissions.rb +44 -0
- data/lib/kuality-coeus/page_objects/proposal_development/phs_fellowship_questionnaire.rb +44 -0
- data/lib/kuality-coeus/page_objects/proposal_development/phs_training_budget_questionnaire.rb +50 -0
- data/lib/kuality-coeus/page_objects/proposal_development/proposal.rb +47 -8
- data/lib/kuality-coeus/page_objects/proposal_development/proposal_actions.rb +62 -0
- data/lib/kuality-coeus/page_objects/proposal_development/proposal_summary.rb +9 -0
- data/lib/kuality-coeus/page_objects/proposal_development/questions.rb +111 -0
- data/lib/kuality-coeus/page_objects/proposal_development/s2s.rb +35 -0
- data/lib/kuality-coeus/page_objects/proposal_development/special_review.rb +6 -0
- data/lib/kuality-coeus/page_objects/protocol/custom_data.rb +6 -0
- data/lib/kuality-coeus/page_objects/protocol/permissions.rb +5 -0
- data/lib/kuality-coeus/page_objects/protocol/personnel.rb +5 -0
- data/lib/kuality-coeus/page_objects/protocol/protocol.rb +11 -0
- data/lib/kuality-coeus/page_objects/protocol/questionnaire.rb +5 -0
- data/lib/kuality-coeus/page_objects/protocol/special_review.rb +6 -0
- data/lib/kuality-coeus/page_objects/rejection_confirmation.rb +5 -0
- data/lib/kuality-coeus/page_objects/researcher.rb +4 -2
- data/lib/kuality-coeus/page_objects/shared/unit_administrator.rb +13 -0
- data/lib/kuality-coeus/page_objects/system/person_extended_attributes.rb +18 -0
- data/lib/kuality-coeus/page_objects/system_admin.rb +7 -0
- data/lib/kuality-coeus/page_objects/unit.rb +2 -4
- data/lib/kuality-coeus/utilities.rb +39 -0
- data/libpeerconnection.log +0 -0
- metadata +140 -5
- data/lib/kuality-coeus/data_objects/committee_document.rb +0 -65
- data/lib/kuality-coeus/data_objects/proposal_development.rb +0 -53
- 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
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
element(:
|
10
|
-
|
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
|