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,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 <
|
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:
|
7
|
-
button
|
5
|
+
element(:username) { |b| b.text_field(name: '__login_user') }
|
6
|
+
button 'Login'
|
8
7
|
|
9
8
|
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,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,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,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
|
@@ -1,11 +1,16 @@
|
|
1
1
|
class ProposalDevelopmentDocument < BasePage
|
2
2
|
|
3
|
-
|
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
|