Files
redmine_contracts/test/unit/contract_test.rb
T

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