kuality-coeus 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. checksums.yaml +8 -8
  2. data/features/grants_gov/grants_gov_forms/code_and_form_mapping.feature +3 -3
  3. data/features/grants_gov/grants_gov_forms/forms_validation.feature +5 -1
  4. data/features/grants_gov/grants_gov_forms/s2s_questionnaire.feature +5 -3
  5. data/features/grants_gov/s2s_submission.feature +7 -4
  6. data/features/proposal_development/create_budget_versions.feature +2 -1
  7. data/features/proposal_development/create_proposal.feature +21 -19
  8. data/features/proposal_development/key_personnel_validations.feature +4 -3
  9. data/features/proposal_development/proposal_actions_validations.feature +9 -17
  10. data/features/proposal_development/proposal_permissions.feature +25 -22
  11. data/features/proposal_development/proposal_workflow.feature +8 -37
  12. data/features/step_definitions/{proposal_development → budget_versions}/budget_versions.rb +9 -9
  13. data/features/step_definitions/budget_versions/project_personnel.rb +11 -0
  14. data/features/step_definitions/delete_proposals.rb +9 -0
  15. data/features/step_definitions/grants_gov/forms.rb +27 -0
  16. data/features/step_definitions/grants_gov/s2s_submission.rb +30 -5
  17. data/features/step_definitions/proposal_development/create_proposal.rb +2 -9
  18. data/features/step_definitions/proposal_development/edit_proposal.rb +3 -4
  19. data/features/step_definitions/proposal_development/key_personnel_validations.rb +10 -1
  20. data/features/step_definitions/proposal_development/proposal_actions_validations.rb +7 -6
  21. data/features/step_definitions/proposal_development/proposal_permissions.rb +51 -65
  22. data/features/step_definitions/proposal_development/proposal_workflow.rb +0 -15
  23. data/features/step_definitions/test.rb +1 -3
  24. data/features/step_definitions/users.rb +6 -6
  25. data/features/support/env.rb +1 -1
  26. data/features/test.feature +3 -1
  27. data/kuality-coeus.gemspec +1 -1
  28. data/lib/kuality-coeus.rb +5 -5
  29. data/lib/kuality-coeus/data_objects/budget/budget_periods.rb +5 -4
  30. data/lib/kuality-coeus/data_objects/budget/budget_versions.rb +18 -7
  31. data/lib/kuality-coeus/data_objects/budget/personnel.rb +135 -0
  32. data/lib/kuality-coeus/data_objects/budget/subaward_budget.rb +1 -3
  33. data/lib/kuality-coeus/data_objects/identity/group.rb +19 -0
  34. data/lib/kuality-coeus/data_objects/navigation.rb +23 -0
  35. data/lib/kuality-coeus/data_objects/proposal_development/degrees.rb +1 -2
  36. data/lib/kuality-coeus/data_objects/proposal_development/key_personnel.rb +3 -6
  37. data/lib/kuality-coeus/data_objects/proposal_development/permissions.rb +16 -4
  38. data/lib/kuality-coeus/data_objects/proposal_development/proposal_development.rb +7 -5
  39. data/lib/kuality-coeus/data_objects/user.rb +23 -17
  40. data/lib/kuality-coeus/page_objects/000_base_page.rb +2 -1
  41. data/lib/kuality-coeus/page_objects/budget/non-personnel.rb +0 -2
  42. data/lib/kuality-coeus/page_objects/budget/parameters.rb +4 -1
  43. data/lib/kuality-coeus/page_objects/budget/personnel.rb +18 -26
  44. data/lib/kuality-coeus/page_objects/confirmation.rb +0 -2
  45. data/lib/kuality-coeus/page_objects/identity/group.rb +7 -0
  46. data/lib/kuality-coeus/page_objects/lookup_pages/000_lookups.rb +6 -0
  47. data/lib/kuality-coeus/page_objects/lookup_pages/job_code_lookup.rb +3 -0
  48. data/lib/kuality-coeus/page_objects/lookup_pages/non_org_address_lookup.rb +14 -0
  49. data/lib/kuality-coeus/page_objects/lookup_pages/person_lookup.rb +4 -2
  50. data/lib/kuality-coeus/page_objects/lookup_pages/to_be_named_lookup.rb +9 -0
  51. data/lib/kuality-coeus/page_objects/{institute_rates_maintenance.rb → maintenance/institute_rates_maintenance.rb} +0 -0
  52. data/lib/kuality-coeus/page_objects/proposal_development/permissions.rb +9 -1
  53. data/lib/kuality-coeus/page_objects/system_admin.rb +1 -1
  54. data/lib/kuality-coeus/utilities.rb +5 -6
  55. data/lib/resources/NSF_CoverPage_1_3-V1.3.pdf +0 -0
  56. data/lib/resources/NSF_DATA_MANAGEMENT_PLAN.pdf +0 -0
  57. data/lib/resources/PHS_Fellowship_Supplemental_1_1-V1.1.pdf +0 -0
  58. data/lib/resources/test.pdf +0 -0
  59. metadata +16 -4
@@ -33,19 +33,44 @@ end
33
33
  Then /^the PHS training and fellowship questionnaires should appear in the proposal$/ do
34
34
  on(S2S).questions
35
35
  on Questions do |page|
36
- %w{'PHS398 Training Budget V1-0',
37
- 'PHS Fellowship Form V1-2'}.each { |title| page.form_tab(title).should be_present }
36
+ ['PHS398 Training Budget V1-0',
37
+ 'PHS Fellowship Form V1-2'].each { |title| page.form_tab(title).should be_present }
38
38
  end
39
39
  end
40
40
 
41
41
  When /^I? ?complete their respective questionnaires$/ do
42
- #on(PHS398TrainingBudgetQuestionnaire).complete_phs_training_questionnaire
43
42
  @proposal.complete_phs_fellowship_questionnaire
44
43
  end
45
44
 
46
45
  Then /^the questionnaire titles should indicate that the questionnaires have been completed$/ do
46
+ on(S2S).questions
47
47
  on Questions do |page|
48
- %w{PHS398 Training Budget V1-0
49
- PHS Fellowship Form V1-2}.each { |form_tab| page.form_status(form_tab).should=='Complete'}
48
+ ['PHS398 Training Budget V1-0',
49
+ 'PHS Fellowship Form V1-2'].each { |form_tab| page.form_status(form_tab).should=='Complete'}
50
50
  end
51
+ end
52
+
53
+ When /^I? ?add and mark complete all the required attachments$/ do
54
+ attachments = {
55
+ 'RR-TEST-NIH-FORMS2' =>
56
+ %w{Equipment Bibliography BudgetJustification ProjectSummary Narrative Facilities
57
+ PHS_ResearchPlan_SpecificAims PHS_ResearchPlan_ResearchStrategy PHS_Cover_Letter},
58
+ 'RR-FORMFAMILY-009-2010' =>
59
+ %w{BudgetJustification ProjectSummary Narrative},
60
+ 'CAL-TEST-DOD2' =>
61
+ %w{BudgetJustification ProjectSummary Narrative},
62
+ 'CAL-FDP-JAD' =>
63
+ %w{BudgetJustification},
64
+ 'CSS-120809-SF424RR-V12' =>
65
+ %w{BudgetJustification ProjectSummary Narrative Budget_Justification_10YR
66
+ Budget_Justification_10YR_Fed_NonFed},
67
+ 'RR-FORMFAMILY-004-2010' =>
68
+ %w{}
69
+ }
70
+ attachments[@proposal.opportunity_id].shuffle.each { |type| @proposal.add_proposal_attachment type: type, file_name: 'test.pdf', status: 'Complete' }
71
+ @proposal.key_personnel.each { |person| @proposal.add_personnel_attachment person: person.full_name, type: 'Biosketch', file_name: 'test.pdf' }
72
+ end
73
+ When(/^add a co-investigator$/) do
74
+ @proposal.add_key_person role: 'Co-Investigator'
75
+ on(KeyPersonnel).save
51
76
  end
@@ -23,11 +23,11 @@ end
23
23
 
24
24
  When /^I? ?initiate a proposal but miss a required field$/ do
25
25
  # Pick a field at random for the test...
26
- @required_field = ['Description', 'Proposal Type', 'Lead Unit', 'Activity Type',
26
+ @required_field = ['Description', 'Proposal Type', 'Activity Type',
27
27
  'Project Title', 'Sponsor Code', 'Project Start Date', 'Project End Date'
28
28
  ].sample
29
29
  # Properly set the nil value depending on the field type...
30
- @required_field=~/Type/ || @required_field=='Lead Unit' ? value='select' : value=''
30
+ @required_field=~/Type/ ? value='select' : value=''
31
31
  # Transform the field name to the appropriate symbol...
32
32
  field = snake_case(@required_field)
33
33
  @proposal = create ProposalDevelopmentObject, field=>value
@@ -140,13 +140,6 @@ And /^I? ?add and mark complete all the required attachments for an NSF proposal
140
140
  end
141
141
  end
142
142
 
143
- When /^I? ?add and mark complete all the required attachments for an NIH proposal$/ do
144
- %w{Equipment Bibliography BudgetJustification ProjectSummary Narrative Facilities
145
- PHS_ResearchPlan_SpecificAims PHS_ResearchPlan_ResearchStrategy}
146
- .shuffle.each { |type| @proposal.add_proposal_attachment type: type, file_name: 'test.pdf', status: 'Complete' }
147
- @proposal.key_personnel.each { |person| @proposal.add_personnel_attachment person: person.full_name, type: 'Biosketch', file_name: 'test.pdf' }
148
- end
149
-
150
143
  Then /^I should see an error that says the field is required$/ do
151
144
  text="#{@required_field} is a required field."
152
145
  @required_field=='Description' ? error='Document '+text : error=text
@@ -30,7 +30,7 @@ Then /^The proposal route log's 'Pending Action Requests' should include '(.*)'$
30
30
  end
31
31
 
32
32
  Then /^The S2S tab should become available$/ do
33
- @proposal.view :s2s
33
+ @proposal.view 'S2S'
34
34
  on(S2S).s2s_header.should be_present
35
35
  end
36
36
 
@@ -52,7 +52,7 @@ When /^I? ?push the proposal's project start date ahead a year$/ do
52
52
  end
53
53
 
54
54
  Then /^I can recall the proposal$/ do
55
- @proposal.view :proposal
55
+ @proposal.view 'Proposal'
56
56
  on(Proposal).recall_button.should exist
57
57
  end
58
58
 
@@ -65,8 +65,7 @@ Given /^I? ?set the proposal type to '(\w+)'$/ do |type|
65
65
  end
66
66
 
67
67
  When /^I go to the proposal's (.*) page$/ do |page|
68
- pages = { 'S2S'=>:s2s }
69
- @proposal.view pages[page]
68
+ @proposal.view page
70
69
  end
71
70
 
72
71
  When /^I? ?save the proposal$/ do
@@ -1,6 +1,7 @@
1
1
  And /^I? ?add the (.*) user as an? (.*) to the key personnel proposal roles$/ do |user_role, proposal_role|
2
2
  user = get(user_role)
3
3
  @proposal.add_key_person first_name: user.first_name, last_name: user.last_name, role: proposal_role
4
+ @proposal.set_valid_credit_splits
4
5
  end
5
6
 
6
7
  When /^I? ?add (.*) as a Key Person with a role of (.*)$/ do |user_name, kp_role|
@@ -35,12 +36,15 @@ Then /^a key personnel error should say (.*)$/ do |error|
35
36
  'to select a valid unit' => 'Please select a valid Unit.',
36
37
  'a key person role is required' => 'Key Person Role is a required field.',
37
38
  'the credit split is not a valid percentage' => 'Credit Split is not a valid percentage.',
38
- 'the co-investigator requires at least one unit' => "At least one Unit is required for #{@proposal.key_personnel.co_investigator.full_name}.",
39
39
  'only one PI is allowed' => 'Only one proposal role of Principal Investigator is allowed.'
40
40
  }
41
41
  on(KeyPersonnel).errors.should include errors[error]
42
42
  end
43
43
 
44
+ Then /^a key personnel error should appear, saying the co-investigator requires at least one unit$/ do
45
+ on(KeyPersonnel).errors.should include "At least one Unit is required for #{@proposal.key_personnel.co_investigator.full_name}."
46
+ end
47
+
44
48
  When /^I? ?add a principal investigator$/ do
45
49
  @proposal.add_principal_investigator
46
50
  end
@@ -69,6 +73,11 @@ end
69
73
  When /^the (.*) user approves the proposal$/ do |role|
70
74
  get(role).sign_in
71
75
  @proposal.open_proposal
76
+
77
+
78
+ sleep 20
79
+
80
+
72
81
  on(ProposalSummary).approve
73
82
  on(Confirmation).yes
74
83
  end
@@ -12,15 +12,16 @@ end
12
12
 
13
13
  Then /^a validation error should say (.*)$/ do |error|
14
14
  errors = {'there is no principal investigator' => 'There is no Principal Investigator selected. Please enter a Principal Investigator.',
15
- 'proposal questions were not answered' => 'Answer is required for Question 1 in group A. Proposal Questions.',
16
15
  'sponsor deadline date not entered' => 'Sponsor deadline date has not been entered.',
17
16
  'questionnaire must be completed' => %|You must complete the questionnaire "S2S FAT & Flat Questionnaire"|,
18
- 'you must complete the compliance question' => 'Answer is required for Question 1 in group B. Compliance.',
19
- 'the investigator needs to be certified' => 'The Investigators are not all certified. Please certify Dick COIAdmin.',
20
- 'the key person needs to be certified' => 'The Investigators are not all certified. Please certify Jeff Covey.'}
17
+ 'you must complete the compliance question' => 'Answer is required for Question 1 in group B. Compliance.'}
21
18
  on(ProposalActions).validation_errors_and_warnings.should include errors[error]
22
19
  end
23
20
 
21
+ Then /^one of the errors should say the investigators aren't all certified$/ do
22
+ on(ProposalActions).validation_errors_and_warnings.should include "The Investigators are not all certified. Please certify #{@proposal.key_personnel[0].first_name} #{@proposal.key_personnel[0].last_name}."
23
+ end
24
+
24
25
  Then /^one of the validation errors should say that (.*)$/ do |error|
25
26
  errors = { 'an original proposal ID is needed'=>'Please provide an original institutional proposal ID that has been previously submitted to Grants.gov for a Change\/Corrected Application.',
26
27
  'the prior award number is required'=>'require the sponsor\'s prior award number in the "sponsor proposal number."'}
@@ -37,11 +38,11 @@ When /^I? ?initiate a proposal with an un-certified (.*)$/ do |role|
37
38
  @proposal.add_key_person role: @role, certified: false
38
39
  end
39
40
 
40
- Given /^I? ?initiate a proposal where the un-certified key person has certification questions$/ do
41
+ Given /^I? ?initiate a proposal where the un-certified key person has included certification questions$/ do
41
42
  @role = 'Key Person'
42
43
  @proposal = create ProposalDevelopmentObject
43
44
  @proposal.add_key_person role: @role, key_person_role: 'default', certified: false
44
- on(KeyPersonnel).include_certification_questions @proposal.key_personnel.uncertified_key_person(@role).full_name
45
+ on(KeyPersonnel).include_certification_questions @proposal.key_personnel.uncertified_person(@role).full_name
45
46
  end
46
47
 
47
48
  Then /^checking the key personnel page shows an error that says (.*)$/ do |error|
@@ -1,10 +1,5 @@
1
1
  When /^I? ?visit the proposal's (.*) page$/ do |page|
2
- # Ensure we're where we need to be in the system...
3
- @proposal.open_document
4
- # Be sure that the page name used in the scenario
5
- # will be converted to the snake case value of
6
- # the method that clicks on the proposal's page tab.
7
- on(Proposal).send(snake_case(page))
2
+ @proposal.view page
8
3
  end
9
4
 
10
5
  Then /^the (.*) user is listed as an? (.*) in the proposal permissions$/ do |username, role|
@@ -23,20 +18,10 @@ Then /^the (.*) user can access the proposal$/ do |role|
23
18
  on(Researcher).error_table.should_not be_present
24
19
  end
25
20
 
26
- Then /^the proposal is in the (.*) user's action list$/ do |username|
27
- get(username).sign_in
28
- visit(ActionList).filter
29
- on ActionListFilter do |page|
30
- page.document_title.set @proposal.project_title
31
- page.filter
32
- end
33
- on(ActionList).item_row(@proposal.document_id).should exist
34
- end
35
-
36
- And /^their proposal permissions allow them to only update the Abstracts and Attachments page$/ do
37
- on(Proposal).abstracts_and_attachments
38
- @proposal.close
39
- on(Confirmation).yes
21
+ Then /^their proposal permissions do not allow them to edit budget details$/ do
22
+ expect{@proposal.edit(project_title: 'edit')}.not_to raise_error
23
+ expect{@budget_version.open_budget}.not_to raise_error
24
+ expect{@budget_version.edit(total_direct_cost_limit: '100')}.should raise_error(Watir::Exception::UnknownObjectException, /unable to locate element/)
40
25
  end
41
26
 
42
27
  And /^their proposal permissions allow them to edit all parts of the proposal$/ do
@@ -61,10 +46,6 @@ And /^their proposal permissions allow them to edit all parts of the proposal$/
61
46
  page.proposal_actions
62
47
  end
63
48
  on ProposalActions do |page|
64
- page.save_button.should be_present
65
- page.questions
66
- end
67
- on Questions do |page|
68
49
  page.save_button.should be_present
69
50
  page.special_review
70
51
  end
@@ -73,62 +54,67 @@ And /^their proposal permissions allow them to edit all parts of the proposal$/
73
54
  end
74
55
  end
75
56
 
76
- And /^their proposal permissions allow them to only update the budget$/ do
77
- on(Proposal).budget_versions
78
- @proposal.close
79
- on(Confirmation).yes
57
+ And /^their proposal permissions allow them to update the budget, not the narrative$/ do
58
+ expect{
59
+ @proposal.add_proposal_attachment file_name: 'test.pdf', type: 'Narrative'
60
+ }.should raise_error
61
+ expect{@proposal.add_budget_version}.not_to raise_error
80
62
  end
81
63
 
82
64
  And /^their proposal permissions allow them to only read the proposal$/ do
83
- on Proposal do |page|
84
- page.save_button.should_not be_present
85
- page.abstracts_and_attachments
86
- end
87
- on AbstractsAndAttachments do |page|
88
- page.save_button.should_not be_present
89
- page.custom_data
90
- end
91
- on PDCustomData do |page|
92
- page.save_button.should_not be_present
93
- page.key_personnel
94
- end
95
- on KeyPersonnel do |page|
96
- page.save_button.should_not be_present
97
- page.permissions
98
- end
99
- on Permissions do |page|
100
- page.save_button.should_not be_present
101
- page.proposal_actions
102
- end
103
- on ProposalActions do |page|
104
- page.save_button.should_not be_present
105
- page.questions
106
- end
107
- on Questions do |page|
108
- page.save_button.should_not be_present
109
- page.special_review
110
- end
111
- on SpecialReview do |page|
112
- page.save_button.should_not be_present
113
- end
65
+ on Proposal do |page|
66
+ page.save_button.should_not be_present
67
+ page.abstracts_and_attachments
68
+ end
69
+ on AbstractsAndAttachments do |page|
70
+ page.save_button.should_not be_present
71
+ page.custom_data
72
+ end
73
+ on PDCustomData do |page|
74
+ page.save_button.should_not be_present
75
+ page.key_personnel
76
+ end
77
+ on KeyPersonnel do |page|
78
+ page.save_button.should_not be_present
79
+ page.permissions
80
+ end
81
+ on Permissions do |page|
82
+ page.save_button.should_not be_present
83
+ page.proposal_actions
84
+ end
85
+ on ProposalActions do |page|
86
+ page.save_button.should_not be_present
87
+ page.special_review
88
+ end
89
+ on SpecialReview do |page|
90
+ page.save_button.should_not be_present
91
+ end
114
92
  end
115
93
 
116
94
  And /^their proposal permissions allow them to delete the proposal$/ do
117
- on(Proposal).proposal_actions
118
- @proposal.delete
95
+ on(Proposal).proposal_actions
96
+ lambda{@proposal.delete}.should_not raise_error
119
97
  end
120
98
 
121
99
  Then /^there should be an error message that says not to select other roles alongside aggregator$/ do
122
- on(Roles).errors.should include 'Do not select other roles when Aggregator is selected.'
100
+ on(Roles).errors.should include 'Do not select other roles when Aggregator is selected.'
123
101
  end
124
102
 
125
103
  When /^I? ?attempt to add an additional proposal role to the (.*) user$/ do |system_role|
126
- role = [:viewer, :budget_creator, :narrative_writer, :aggregator].sample
127
- on(Permissions).edit_role.(get(system_role).user_name)
104
+ if system_role=='Proposal Creator'
105
+ role='aggregator'
106
+ else
107
+ role=system_role
108
+ end
109
+ role_to_add = ([:viewer, :budget_creator, :narrative_writer, :aggregator]-[StringFactory.damballa(role)]).sample
110
+ on(Permissions).edit_role(get(system_role).user_name)
128
111
  on Roles do |page|
129
112
  page.use_new_tab
130
- page.send(role).set
113
+ page.send(role_to_add).set
131
114
  page.save
115
+ # Note: This step def does not go beyond clicking the Save button here
116
+ # because the expectation is that the Roles window will not close,
117
+ # but will instead display an error message.
132
118
  end
133
119
  end
134
120
 
@@ -21,14 +21,6 @@ When /^I? ?send a notification to the (.*) users?$/ do |role|
21
21
  on(NotificationEditor).send_fyi
22
22
  end
23
23
 
24
- When /^I? ?recall the proposal for revisions$/ do
25
- @proposal.recall :revisions
26
- end
27
-
28
- When /^I? ?recall and cancel the proposal$/ do
29
- @proposal.recall :cancel
30
- end
31
-
32
24
  Then /^the proposal status should be (.*)$/ do |status|
33
25
  @proposal.status.should == status
34
26
  end
@@ -62,13 +54,6 @@ Then /^I can acknowledge the requested action list item$/ do
62
54
  end
63
55
 
64
56
  When /^I? ?submit the routed proposal to the sponsor$/ do
65
-
66
-
67
-
68
- sleep 30
69
-
70
-
71
-
72
57
  @proposal.submit :to_sponsor
73
58
  end
74
59
 
@@ -1,3 +1 @@
1
- Then /^add a subaward budget$/ do
2
- @budget_version.add_subaward_budget
3
- end
1
+
@@ -7,7 +7,7 @@
7
7
  # a class instance variable based on the username
8
8
  # 3) Logs that user in (if they're not already)...
9
9
  Given /^I'm logged in with (.*)$/ do |username|
10
- user = make_user username
10
+ user = make_user user: username
11
11
  user.sign_in
12
12
  end
13
13
 
@@ -26,7 +26,7 @@ end
26
26
  # 2) Creates the user in the system if they don't exist already,
27
27
  # by first logging in with the admin user
28
28
  Given /^a user exists with the user name (.*)$/ do |username|
29
- user = make_user username
29
+ user = make_user user: username
30
30
  user.create unless user.exists?
31
31
  end
32
32
 
@@ -36,7 +36,7 @@ end
36
36
  # them if they don't exist in the system (again by first
37
37
  # logging in with the admin user to do the creation).
38
38
  Given /^a user exists with the system role: '(.*)'$/ do |role|
39
- user = make_role role
39
+ user = make_user role: role
40
40
  user.create unless user.exists?
41
41
  end
42
42
 
@@ -46,7 +46,7 @@ end
46
46
 
47
47
  Given /^users exist with the following roles: (.*)$/ do |roles|
48
48
  roles.split(', ').each do |r|
49
- user = make_role r
49
+ user = make_user role: r
50
50
  user.create unless user.exists?
51
51
  end
52
52
  end
@@ -54,12 +54,12 @@ end
54
54
  Given /^a user exists that can be a PI for Grants.gov proposals$/ do
55
55
  # TODO: Make this more robust when we really know what it takes
56
56
  # to be a grants.gov PI...
57
- @grants_gov_pi = make_user UserObject::USERS.era_commons_user('grantsgov')
57
+ @grants_gov_pi = make_user user: UserObject::USERS.era_commons_user('grantsgov')
58
58
  @grants_gov_pi.create unless @grants_gov_pi.exists?
59
59
  end
60
60
 
61
61
  Given /^an AOR user exists$/ do
62
62
  # TODO: Using the quickstart user here is cheating. Fix this.
63
- @aor = make_user 'quickstart'
63
+ @aor = make_user user: 'quickstart'
64
64
  @aor.create unless @aor.exists?
65
65
  end
@@ -3,7 +3,7 @@ require 'yaml'
3
3
  @config = YAML.load_file("#{File.dirname(__FILE__)}/config.yml")[:basic]
4
4
 
5
5
  $base_url = @config[:url]
6
- $file_folder = @config[:files]
6
+ $file_folder = "#{File.dirname(__FILE__)}/../../lib/resources/"
7
7
 
8
8
  if @config[:browser]==:saucelabs
9
9
  sauce = YAML.load_file("#{File.dirname(__FILE__)}/config.yml")[:saucelabs]
@@ -10,4 +10,6 @@ Feature: Submitting Proposals via s2s to Grants.gov
10
10
  Scenario: bal
11
11
  Given I initiate a proposal with NIH as the sponsor
12
12
  And create a budget version for the proposal
13
- And add a subaward budget
13
+ And add an employee to the budget's project personnel
14
+ And add a non-employee to the budget's project personnel
15
+ And add a to-be-named person to the budget's project personnel
@@ -1,6 +1,6 @@
1
1
  spec = Gem::Specification.new do |s|
2
2
  s.name = 'kuality-coeus'
3
- s.version = '0.0.3'
3
+ s.version = '0.0.4'
4
4
  s.summary = %q{rSmart's test framework for BDD testing of Kuali Coeus}
5
5
  s.description = %q{This gem is used for creating test scripts for Kuali Coeus.}
6
6
  s.files = Dir.glob("**/**/**")
@@ -1,11 +1,11 @@
1
1
  require 'test-factory'
2
2
  require 'date'
3
3
  require 'yaml'
4
- Dir["#{File.dirname(__FILE__)}/kuality-coeus/*.rb"].each {|f| require f }
5
- Dir["#{File.dirname(__FILE__)}/kuality-coeus/page_objects/*.rb"].each {|f| require f }
6
- Dir["#{File.dirname(__FILE__)}/kuality-coeus/page_objects/*/*.rb"].each {|f| require f }
7
- Dir["#{File.dirname(__FILE__)}/kuality-coeus/data_objects/*.rb"].each {|f| require f }
8
- Dir["#{File.dirname(__FILE__)}/kuality-coeus/data_objects/*/*.rb"].each {|f| require f }
4
+ Dir["#{File.dirname(__FILE__)}/kuality-coeus/*.rb"].alphabetize.each {|f| require f }
5
+ Dir["#{File.dirname(__FILE__)}/kuality-coeus/page_objects/*.rb"].alphabetize.each {|f| require f }
6
+ Dir["#{File.dirname(__FILE__)}/kuality-coeus/page_objects/*/*.rb"].alphabetize.each {|f| require f }
7
+ Dir["#{File.dirname(__FILE__)}/kuality-coeus/data_objects/*.rb"].alphabetize.each {|f| require f }
8
+ Dir["#{File.dirname(__FILE__)}/kuality-coeus/data_objects/*/*.rb"].alphabetize.each {|f| require f }
9
9
 
10
10
  # Initialize this class at the start of your test cases to
11
11
  # open the specified test browser at the specified welcome page URL.