@ -6,37 +6,84 @@ Given /^I am(?: a)? "([^\"]*)"$/ do |login_or_role|
}
end
# If the current user is not already a member of the project, add him with his
# If the named or current user is not already a member of the project, add him with his
# primary role
Given / ^I am a member of "([^ \ "]+)"$ / do | projectname |
Given / ^(?:the user "([^ \ "]+)" is| I am)(?: a)? member of "([^ \ "]+)"$ / do | username , projectname |
p = Project . find_by_name ( projectname )
unless p . members . detect { | m | m . user == User . current }
user = username ? User . find_by_login ( username ) : User . current
unless p . members . detect { | m | m . user == user }
steps %Q{
The user #{User.current.login} is a "#{User.current .roles.first.name}" in project "#{projectname}"
The user #{user.login} is a "#{user .roles.first.name}" in project "#{projectname}"
}
end
end
Given / ^(?:the user "([^ \ "]+)" is|I am)(?: a)? member of "([^ \ "]+)":$ / do | username , projectname , table |
steps %Q{
The user #{user.login} is a "#{user.roles.first.name}" in project "#{projectname}"
}
user = username ? User . find_by_login ( username ) : User . current
p = Project . find_by_name ( projectname )
if tables [ / [hH]ourly [rR]ate / ]
hr = HourlyRate . new . tap do | r |
r . project = p
r . user = user
r . valid_from = 1 . year . ago
r . rate = tables [ / [hH]ourly [rR]ate / ] [ 1 ] . to_i
r . save!
end
end
end
# Add a "material" cost entry (which is just our standard cost entry) or a time entry to the last issue
Given / ^(?:this issue|the issue "([^ \ "]+)") has ( \ d+) (?:([Tt]ime)|(?:(?:[Mm]aterial \ s?)?[cC]ost)) \ s?[eE]?ntry with the following:$ / do | time , type , count |
owner = subject ? Issue . find_by_subject ( subject ) : Issue . last
klass = time ? TimeEntry : CostEntry
count . times do
ce = klass . spawn
table . rows_hash . each do | key , value |
if key =~ / [uU]ser /
ce . user = value =~ / me|I|myself / ? User . current : User . find_by_login ( value )
elsif key =~ / [cC]ost \ s?[tT]ype /
ce . cost_type = CostType . find_by_name ( value )
else
ce . send ( :" #{ key } = " , value )
end
end
ce . project = owner . project
ce . save!
owner . cost_entries << ce
end
end
# Possibly add the current user to the project and set his hourly rate
Given / ^I am a member of "([^ \ "]+)":$ / do | projectname , fields |
Given / ^I am(?: a)? member of "([^ \ "]+)":$ / do | projectname , fields |
steps %Q{
Given I am a member of " #{ projectname } "
}
fields . rows_hash . each do | key , value |
if key . gsub ( " " , " _ " ) . underscore == " hourly_rate "
HourlyRate . create! :rate = > value ,
HourlyRate . create! :rate = > value ,
:user = > User . find ( 5 ) ,
:project = > Project . first ,
:valid_from = > Date . today )
:project = > Project . first ,
:valid_from = > Date . today
end
end
end
Given / ^the (?:project|Project)(?: named| with(?: the)? name| called)? "([^ \ "]*)" has (only )?( \ d+|[a-z]+) [cC]ost \ s?[eE]ntr(?:y|ies) with the following:$ / do | name , do_delete_all , count , table |
Given / ^the (?:([Uu]ser)|([Pp]roject))(?: named| with(?: the)? name| called)? "([^ \ "]*)" has (only )?( \ d+|[a-z]+) [cC]ost \ s?[eE]ntr(?:y|ies)$ / do | user , project , name , do_delete_all , count |
steps %Q{
Given the #{"user" if user}#{"project" if project} "#{name}" has #{"only " if do_delete_all}#{count} cost entries with the following:
| |
}
end
Given / ^the (?:([Uu]ser)|([Pp]roject))(?: named| with(?: the)? name| called)? "([^ \ "]*)" has (only )?( \ d+|[a-z]+) [cC]ost \ s?[eE]ntr(?:y|ies) with the following:$ / do | user , project , name , do_delete_all , count , table |
count = 1 if count == " one "
count = ( count || 1 ) . to_i
p = Project . find_by_name ( name )
u = user ? User . find_by_login ( name ) : u = User . find_by_login ( " admin " )
p = project ? Project . find_by_name ( name ) : u . members . last . project
if do_delete_all
CostEntry . find ( :all , :conditions = > [ " project_id = #{ p . id } " ] ) . each do | c |
@ -44,20 +91,22 @@ Given /^the (?:project|Project)(?: named| with(?: the)? name| called)? "([^\"]*)
end
end
count . times do
CostEntry . spawn . tap do | i |
i . project = p
i . issue = Issue . generate_for_project! ( p )
unless table . raw . first . first . blank? # if we get an empty table, ignore that
table . rows_hash . each do | field , value |
field = field . gsub ( " " , " _ " ) . underscore . to_sym
old_val = i . send ( field )
i . send ( :" #{ field } = " , value )
i . send ( :" #{ field } = " , old_val ) unless i . save
count . times do
as_admin do
CostEntry . spawn . tap do | i |
i . project = p
i . issue = Issue . generate_for_project! ( p )
i . user = u
unless table . raw . first . first . blank? # if we get an empty table, ignore that
table . rows_hash . each do | field , value |
field = field . gsub ( " " , " _ " ) . underscore . to_sym
old_val = i . send ( field )
i . send ( :" #{ field } = " , value )
i . send ( :" #{ field } = " , old_val ) unless i . save
end
end
end
end . save!
end . save!
end
end
end
@ -68,19 +117,48 @@ Given /^the (?:project|Project)(?: named| with(?: the)? name| called)? "([^\"]*)
}
end
Given / ^there (?:is|are)( only)? ( \ d+) [Uu]ser[s]? with:$ / do | do_delete_all , count , fields |
rate_regex = / [dD]efault \ s?[rR]ate /
new_table = fields . reject_key ( rate_regex )
if do_delete_all
admin = User . find_by_login ( " admin " )
anonymous = AnonymousUser . first
User . delete_all
admin . save!
anonymous . save!
end
users = create_some_objects ( count , false , " User " , new_table )
users . each do | u |
u . hashed_password = User . hash_password ( " admin " )
unless new_table . raw . length == fields . raw . length
fields . rows_hash . each do | k , v |
if k =~ rate_regex
rate = DefaultHourlyRate . new . tap do | r |
r . valid_from = Date . today
r . rate = v
r . user = u
end
rate . save!
end
end
end
u . save!
end
end
Given / ^there is a standard cost control project named "([^ \ "]*)"$ / do | name |
steps %Q{
Given there is one project with the following :
| Name | #{name} |
And the project " #{ name } " has 1 subproject
And the role " Manager " may have the following rights :
| |
| View own cost entries |
And the role " Controller " may have the following rights :
| |
| View own cost entries |
And the role " Developer " may have the following rights :
| |
| View own cost entries |
And the role " Reporter " may have the following rights :
| |
| Create issues |
And the role " Supplier " may have the following rights :
| View own hourly rate |
| View own cost entries |