123 lines
4.9 KiB
Ruby
123 lines
4.9 KiB
Ruby
require File.dirname(__FILE__) + '/../test_helper'
|
|
|
|
class ContractTest < ActiveSupport::TestCase
|
|
should_belong_to :account_executive
|
|
should_belong_to :project
|
|
should_have_many :deliverables
|
|
|
|
should_validate_presence_of :name
|
|
should_validate_presence_of :account_executive
|
|
should_validate_presence_of :project
|
|
should_validate_presence_of :start_date
|
|
should_validate_presence_of :end_date
|
|
|
|
should_not_allow_mass_assignment_of :project_id, :project, :discount_type
|
|
|
|
should_allow_values_for :discount_type, "$", "%", nil, ''
|
|
should_not_allow_values_for :discount_type, ["amount", "percent", "bar"]
|
|
|
|
context "end_date" do
|
|
should "be after start_date" do
|
|
@contract = Contract.new(:start_date => Date.today, :end_date => Date.yesterday)
|
|
|
|
assert @contract.invalid?
|
|
assert_equal "must be greater than start date", @contract.errors.on(:end_date)
|
|
end
|
|
end
|
|
|
|
should "QUESTION: name be unique"
|
|
|
|
should "default executed to false" do
|
|
@contract = Contract.new
|
|
|
|
assert_equal false, @contract.executed
|
|
end
|
|
|
|
context "#labor_budget" do
|
|
should "sum all of the labor budgets of the Deliverables" do
|
|
contract = Contract.generate!
|
|
contract.deliverables << @deliverable_1 = FixedDeliverable.generate!
|
|
LaborBudget.generate!(:deliverable => @deliverable_1, :budget => 100)
|
|
contract.deliverables << @deliverable_2 = FixedDeliverable.generate!
|
|
LaborBudget.generate!(:deliverable => @deliverable_2, :budget => 100)
|
|
|
|
assert_equal 200, contract.labor_budget
|
|
end
|
|
end
|
|
|
|
context "#overhead_budget" do
|
|
should "sum all of the overhead budgets of the Deliverables" do
|
|
contract = Contract.generate!
|
|
contract.deliverables << @deliverable_1 = FixedDeliverable.generate!
|
|
OverheadBudget.generate!(:deliverable => @deliverable_1, :budget => 100)
|
|
contract.deliverables << @deliverable_2 = FixedDeliverable.generate!
|
|
OverheadBudget.generate!(:deliverable => @deliverable_2, :budget => 100)
|
|
|
|
assert_equal 200, contract.overhead_budget
|
|
end
|
|
end
|
|
|
|
context "#estimated_hour_budget" do
|
|
should "sum all of the labor and overhead budgets of the Deliverables" do
|
|
contract = Contract.generate!
|
|
contract.deliverables << @deliverable_1 = FixedDeliverable.generate!
|
|
LaborBudget.generate!(:deliverable => @deliverable_1, :hours => 50)
|
|
contract.deliverables << @deliverable_2 = HourlyDeliverable.generate!
|
|
OverheadBudget.generate!(:deliverable => @deliverable_2, :hours => 60)
|
|
|
|
assert_equal 110, contract.estimated_hour_budget
|
|
end
|
|
end
|
|
|
|
context "#estimated_hour_spent" do
|
|
should "sum all of the hours spent on the Deliverables" do
|
|
@project = Project.generate!
|
|
contract = Contract.generate!
|
|
contract.deliverables << @deliverable_1 = FixedDeliverable.generate!
|
|
@deliverable_1.issues << @issue1 = Issue.generate_for_project!(@project)
|
|
@deliverable_1.issues << @issue2 = Issue.generate_for_project!(@project)
|
|
TimeEntry.generate!(:hours => 10, :issue => @issue1, :project => @project)
|
|
TimeEntry.generate!(:hours => 10, :issue => @issue2, :project => @project)
|
|
|
|
contract.deliverables << @deliverable_2 = HourlyDeliverable.generate!
|
|
@deliverable_2.issues << @issue3 = Issue.generate_for_project!(@project)
|
|
@deliverable_2.issues << @issue4 = Issue.generate_for_project!(@project)
|
|
TimeEntry.generate!(:hours => 10, :issue => @issue3, :project => @project)
|
|
TimeEntry.generate!(:hours => 10, :issue => @issue4, :project => @project)
|
|
|
|
assert_equal 40, contract.estimated_hour_spent
|
|
end
|
|
end
|
|
|
|
context "#total_budget" do
|
|
should "sum all of the totals of the Deliverables" do
|
|
contract = Contract.generate!(:billable_rate => 100.0)
|
|
contract.deliverables << @deliverable_1 = FixedDeliverable.generate!(:total => 10_000)
|
|
contract.deliverables << @deliverable_2 = HourlyDeliverable.generate!
|
|
LaborBudget.generate!(:deliverable => @deliverable_2, :hours => 10)
|
|
OverheadBudget.generate!(:deliverable => @deliverable_2, :hours => 20)
|
|
|
|
assert_equal 10_000 + (30 * 100), contract.total_budget
|
|
end
|
|
end
|
|
|
|
context "#profit_budget" do
|
|
should "sum all of the profit budgets of the Deliverables" do
|
|
contract = Contract.generate!(:billable_rate => 100.0)
|
|
|
|
contract.deliverables << @deliverable_1 = FixedDeliverable.generate!(:total => 10_000)
|
|
LaborBudget.generate!(:deliverable => @deliverable_1, :budget => 2000)
|
|
OverheadBudget.generate!(:deliverable => @deliverable_1, :budget => 2000)
|
|
|
|
contract.deliverables << @deliverable_2 = HourlyDeliverable.generate!
|
|
LaborBudget.generate!(:deliverable => @deliverable_2, :hours => 10)
|
|
OverheadBudget.generate!(:deliverable => @deliverable_2, :hours => 20)
|
|
|
|
assert_equal 10_000 - 4000, @deliverable_1.profit_budget
|
|
assert_equal (30 * 100.0) - 0, @deliverable_2.profit_budget
|
|
assert_equal 9000, contract.profit_budget
|
|
|
|
end
|
|
end
|
|
end
|