80 lines
3.1 KiB
Ruby
80 lines
3.1 KiB
Ruby
require File.dirname(__FILE__) + '/../test_helper'
|
|
|
|
class FixedDeliverableTest < ActiveSupport::TestCase
|
|
context "#profit_budget" do
|
|
context "with no labor budget, no overhead budget" do
|
|
should "equal the total" do
|
|
assert_equal 1000, FixedDeliverable.generate(:total => 1_000).profit_budget
|
|
end
|
|
end
|
|
|
|
should "be the total minus the sum of all of the budgets" do
|
|
deliverable = FixedDeliverable.generate(:total => 1_000)
|
|
LaborBudget.generate!(:deliverable => deliverable, :budget => 200)
|
|
LaborBudget.generate!(:deliverable => deliverable, :budget => 200)
|
|
OverheadBudget.generate!(:deliverable => deliverable, :budget => 200)
|
|
FixedBudget.generate!(:deliverable => deliverable, :budget => '$100', :markup => '50%') # $50 markup
|
|
|
|
assert_equal 400 - 150, deliverable.profit_budget
|
|
end
|
|
|
|
should "be 0 if there is no total" do
|
|
assert_equal 0, FixedDeliverable.generate(:total => nil).profit_budget
|
|
end
|
|
end
|
|
|
|
context "#total_spent" do
|
|
should "equal the budgeted total" do
|
|
assert_equal 1000, FixedDeliverable.generate(:total => 1_000).total_spent
|
|
end
|
|
end
|
|
|
|
context "#profit_left" do
|
|
should "be the total_spent minus the labor budget spent minus the overhead budget spent" do
|
|
configure_overhead_plugin
|
|
|
|
@project = Project.generate!
|
|
@developer = User.generate!
|
|
@manager = User.generate!
|
|
@role = Role.generate!
|
|
User.add_to_project(@developer, @project, @role)
|
|
User.add_to_project(@manager, @project, @role)
|
|
@rate = Rate.generate!(:project => @project,
|
|
:user => @developer,
|
|
:date_in_effect => Date.yesterday,
|
|
:amount => 55)
|
|
@rate = Rate.generate!(:project => @project,
|
|
:user => @manager,
|
|
:date_in_effect => Date.yesterday,
|
|
:amount => 75)
|
|
|
|
@deliverable_1 = FixedDeliverable.generate!(:total => 2000)
|
|
@deliverable_1.issues << @issue1 = Issue.generate_for_project!(@project)
|
|
TimeEntry.generate!(:hours => 15, :issue => @issue1, :project => @project,
|
|
:activity => @billable_activity,
|
|
:user => @developer)
|
|
TimeEntry.generate!(:hours => 4, :issue => @issue1, :project => @project,
|
|
:activity => @non_billable_activity,
|
|
:user => @manager)
|
|
|
|
# Check intermediate values
|
|
assert_equal 825, @deliverable_1.labor_budget_spent
|
|
assert_equal 300, @deliverable_1.overhead_spent
|
|
|
|
assert_equal 875, @deliverable_1.profit_left
|
|
|
|
end
|
|
end
|
|
|
|
context "#fixed_markup_budget_total_spent" do
|
|
should "be the total markup from fixed budgets because FixedDeliverables are considered 100% paid" do
|
|
@deliverable = FixedDeliverable.generate!
|
|
FixedBudget.generate!(:deliverable => @deliverable, :budget => '$1,000', :markup => '$100', :paid => true)
|
|
FixedBudget.generate!(:deliverable => @deliverable, :budget => '$1,000', :markup => '$100', :paid => false)
|
|
|
|
assert_equal 200, @deliverable.fixed_markup_budget_total_spent
|
|
|
|
end
|
|
end
|
|
end
|