Files
redmine_contracts/test/integration/deliverables_edit_test.rb

747 lines
28 KiB
Ruby

require 'test_helper'
class DeliverablesEditTest < ActionController::IntegrationTest
include Redmine::I18n
def setup
@project = Project.generate!(:identifier => 'main')
@contract = Contract.generate!(:project => @project, :name => 'A Contract')
@manager = User.generate!
@role = Role.generate!
User.add_to_project(@manager, @project, @role)
@fixed_deliverable = FixedDeliverable.generate!(:contract => @contract, :manager => @manager, :title => 'The Title', :notes => "", :feature_sign_off => false, :warranty_sign_off => false)
@hourly_deliverable = HourlyDeliverable.generate!(:contract => @contract, :manager => @manager, :title => 'An Hourly')
@user = User.generate_user_with_permission_to_manage_budget(:project => @project)
configure_overhead_plugin
login_as(@user.login, 'contracts')
end
should "block anonymous users from editing the deliverable" do
logout
visit "/projects/#{@project.identifier}/contracts/#{@contract.id}/deliverables/#{@fixed_deliverable.id}"
assert_requires_login
end
should "block unauthorized users from editing the deliverable" do
logout
@user = User.generate!(:password => 'test', :password_confirmation => 'test')
login_as(@user.login, 'test')
visit "/projects/#{@project.identifier}/contracts/#{@contract.id}/deliverables/#{@fixed_deliverable.id}"
assert_forbidden
end
should "allow authorized users to edit the Fixed deliverable" do
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@fixed_deliverable.id}", 'Edit'
assert_response :success
assert_template 'deliverables/edit'
assert_select "form#edit_fixed_deliverable_#{@fixed_deliverable.id}" do
assert_select "input#fixed_deliverable_title[value=?]", /#{@fixed_deliverable.title}/
end
assert_select "select#fixed_deliverable_type", :count => 0 # Not editable
within("#deliverable-details") do
fill_in "Title", :with => 'An updated title'
select "Locked", :from => "Status"
check "Feature Sign Off"
check "Warranty Sign Off"
end
click_button "Save"
assert_response :success
assert_template 'contracts/show'
assert_equal "An updated title", @fixed_deliverable.reload.title
assert_equal "FixedDeliverable", @fixed_deliverable.reload.type
assert @fixed_deliverable.reload.warranty_sign_off?
assert @fixed_deliverable.reload.feature_sign_off?
assert_equal "locked", @fixed_deliverable.reload.status
end
should "allow authorized users to edit the Hourly deliverable" do
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@hourly_deliverable.id}", 'Edit'
assert_response :success
assert_template 'deliverables/edit'
assert_select "form#edit_hourly_deliverable_#{@hourly_deliverable.id}" do
assert_select "input#hourly_deliverable_title[value=?]", /#{@hourly_deliverable.title}/
end
assert_select "select#hourly_deliverable_type", :count => 0 # Not editable
within("#deliverable-details") do
fill_in "Title", :with => 'An updated title'
select "Locked", :from => "Status"
check "Feature Sign Off"
check "Warranty Sign Off"
end
within("#deliverable-labor") do
fill_in "hrs", :with => '20'
fill_in "$", :with => '$2,000'
end
within("#deliverable-overhead") do
fill_in "hrs", :with => '10'
fill_in "$", :with => '$1,000'
end
click_button "Save"
assert_response :success
assert_template 'contracts/show'
assert_equal "An updated title", @hourly_deliverable.reload.title
assert_equal "HourlyDeliverable", @hourly_deliverable.reload.type
assert @hourly_deliverable.reload.warranty_sign_off?
assert @hourly_deliverable.reload.feature_sign_off?
assert_equal "locked", @hourly_deliverable.reload.status
assert_equal 1, @hourly_deliverable.labor_budgets.count
@labor_budget = @hourly_deliverable.labor_budgets.first
assert_equal 20, @labor_budget.hours
assert_equal 2000.0, @labor_budget.budget
assert_equal 1, @hourly_deliverable.overhead_budgets.count
@overhead_budget = @hourly_deliverable.overhead_budgets.first
assert_equal 10, @overhead_budget.hours
assert_equal 1000.0, @overhead_budget.budget
end
should "not create new budget items for the deliverable if the activity, hours, and dollars are not all blank" do
TimeEntryActivity.destroy_all
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@hourly_deliverable.id}", 'Edit'
assert_response :success
assert_template 'deliverables/edit'
within("#deliverable-labor") do
fill_in "hrs", :with => ''
fill_in "$", :with => '$0'
end
within("#deliverable-overhead") do
fill_in "hrs", :with => '0'
fill_in "$", :with => ''
end
click_button "Save"
assert_response :success
assert_template 'contracts/show'
@hourly_deliverable.reload
assert_equal 0, @hourly_deliverable.labor_budgets.count
assert_equal 0, @hourly_deliverable.overhead_budgets.count
assert_equal 0, @hourly_deliverable.fixed_budgets.count
end
should "show allow editing the Deliverable Finances section for each Retainer period" do
@retainer_deliverable = RetainerDeliverable.spawn(:contract => @contract, :manager => @manager, :title => "Retainer")
@retainer_deliverable.labor_budgets << @labor_budget = LaborBudget.spawn(:deliverable => @retainer_deliverable, :budget => 1000, :hours => 10)
@retainer_deliverable.overhead_budgets << @overhead_budget = OverheadBudget.spawn(:deliverable => @retainer_deliverable, :budget => 1000, :hours => 10)
@retainer_deliverable.fixed_budgets << @fixed_budget = FixedBudget.spawn(:deliverable => @retainer_deliverable, :title => 'Printing supplies', :budget => 100, :markup => 0)
@retainer_deliverable.start_date = '2010-01-01'
@retainer_deliverable.end_date = '2010-12-31'
@retainer_deliverable.save!
assert_equal 12, @retainer_deliverable.months.length
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@retainer_deliverable.id}", 'Edit'
assert_response :success
assert_template 'deliverables/edit'
assert_select 'fieldset.deliverable-finances', :count => 12
within ".date-2010-01" do
within "#deliverable-labor" do
fill_in "hrs", :with => '20'
fill_in "$", :with => '2000'
end
within "#deliverable-overhead" do
fill_in "hrs", :with => '100'
fill_in "$", :with => '100'
end
within "#deliverable-fixed" do
fill_in "title", :with => 'Flight to NYC'
fill_in "budget", :with => '$600'
fill_in "markup", :with => '50%'
fill_in "description", :with => 'Need to fly to NYC for the week'
end
end
click_button "Save"
assert_response :success
assert_template 'contracts/show'
@labor_budgets = @retainer_deliverable.reload.labor_budgets
assert_equal 12, @labor_budgets.length
@labor_budgets.each do |labor_budget|
if labor_budget.year == 2010 && labor_budget.month == 1
# Specific month's budget updated?
assert_equal 20.0, labor_budget.hours
assert_equal 2000.0, labor_budget.budget
else
assert_equal 10.0, labor_budget.hours
assert_equal 1000.0, labor_budget.budget
end
end
@overhead_budgets = @retainer_deliverable.reload.overhead_budgets
assert_equal 12, @overhead_budgets.length
@overhead_budgets.each do |overhead_budget|
if overhead_budget.year == 2010 && overhead_budget.month == 1
# Specific month's budget updated?
assert_equal 100.0, overhead_budget.hours
assert_equal 100.0, overhead_budget.budget
else
assert_equal 10.0, overhead_budget.hours
assert_equal 1000.0, overhead_budget.budget
end
end
@fixed_budgets = @retainer_deliverable.reload.fixed_budgets
assert_equal 12, @fixed_budgets.length
@fixed_budgets.each do |fixed_budget|
if fixed_budget.year == 2010 && fixed_budget.month == 1
# Specific month's budget updated?
assert_equal 600, fixed_budget.budget
assert_equal '50%', fixed_budget.markup
assert_equal 300, fixed_budget.markup_value
else
assert_equal 100, fixed_budget.budget
assert_equal '$0.00', fixed_budget.markup
end
end
end
should "allow extending a Retainer's start and end months" do
labor_budget_hours_1 = 10
labor_budget_hours_2 = 20
labor_budget_amount_1 = 1000
labor_budget_amount_2 = 2000
overhead_budget_hours_1 = 10
overhead_budget_hours_2 = 20
overhead_budget_amount_1 = 1000
overhead_budget_amount_2 = 2000
@retainer_deliverable = RetainerDeliverable.spawn(:contract => @contract, :manager => @manager, :title => "Retainer")
@retainer_deliverable.labor_budgets << @labor_budget = LaborBudget.spawn(:deliverable => @retainer_deliverable, :budget => labor_budget_amount_1, :hours => labor_budget_hours_1)
@retainer_deliverable.labor_budgets << @labor_budget = LaborBudget.spawn(:deliverable => @retainer_deliverable, :budget => labor_budget_amount_2, :hours => labor_budget_hours_2)
@retainer_deliverable.overhead_budgets << @overhead_budget = OverheadBudget.spawn(:deliverable => @retainer_deliverable, :budget => overhead_budget_amount_1, :hours => overhead_budget_hours_1)
@retainer_deliverable.overhead_budgets << @overhead_budget = OverheadBudget.spawn(:deliverable => @retainer_deliverable, :budget => overhead_budget_amount_2, :hours => overhead_budget_hours_2)
@retainer_deliverable.fixed_budgets << @fixed_budget = FixedBudget.spawn(:deliverable => @retainer_deliverable, :title => 'Printing supplies', :budget => 100, :markup => 0)
@retainer_deliverable.start_date = '2010-01-01'
@retainer_deliverable.end_date = '2010-12-31'
@retainer_deliverable.save!
assert_equal 12, @retainer_deliverable.months.length
assert_equal 24, @retainer_deliverable.reload.labor_budgets.count # 12 months * 2 records
assert_equal 24, @retainer_deliverable.reload.overhead_budgets.count # 12 months * 2 records
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@retainer_deliverable.id}", 'Edit'
assert_response :success
assert_template 'deliverables/edit'
# Extend the period
fill_in "Start", :with => '2009-01-13' # 12 new months
fill_in "End Date", :with => '2011-12-01' # 12 new months
click_button "Save"
assert_response :success
assert_template 'contracts/show'
@retainer_deliverable.reload
assert_equal 36, @retainer_deliverable.months.length
@labor_budgets = @retainer_deliverable.reload.labor_budgets
assert_equal 72, @labor_budgets.length # 36 months * 2 records
@labor_budgets_for_2009 = @labor_budgets.select {|l| l.year == 2009 }
@labor_budgets_for_2010 = @labor_budgets.select {|l| l.year == 2010 }
@labor_budgets_for_2011 = @labor_budgets.select {|l| l.year == 2011 }
assert_equal 24, @labor_budgets_for_2009.length
assert_equal 24, @labor_budgets_for_2010.length
assert_equal 24, @labor_budgets_for_2011.length
@labor_budgets_for_2009.each do |labor_budget|
assert_equal 2009, labor_budget.year
assert [labor_budget_hours_1, labor_budget_hours_2].include?(labor_budget.hours), "Extended labor budget hours not matching template budget"
assert [labor_budget_amount_1, labor_budget_amount_2].include?(labor_budget.budget), "Extended labor budget dollars not matching template budget"
end
@labor_budgets_for_2010.each do |labor_budget|
assert_equal 2010, labor_budget.year
assert [labor_budget_hours_1, labor_budget_hours_2].include?(labor_budget.hours), "Extended labor budget hours not matching template budget"
assert [labor_budget_amount_1, labor_budget_amount_2].include?(labor_budget.budget), "Extended labor budget dollars not matching template budget"
end
@labor_budgets_for_2011.each do |labor_budget|
assert_equal 2011, labor_budget.year
assert [labor_budget_hours_1, labor_budget_hours_2].include?(labor_budget.hours), "Extended labor budget hours not matching template budget"
assert [labor_budget_amount_1, labor_budget_amount_2].include?(labor_budget.budget), "Extended labor budget dollars not matching template budget"
end
@overhead_budgets = @retainer_deliverable.reload.overhead_budgets
assert_equal 72, @overhead_budgets.length # 36 months * 2 records
@overhead_budgets_for_2009 = @overhead_budgets.select {|l| l.year == 2009 }
@overhead_budgets_for_2010 = @overhead_budgets.select {|l| l.year == 2010 }
@overhead_budgets_for_2011 = @overhead_budgets.select {|l| l.year == 2011 }
assert_equal 24, @overhead_budgets_for_2009.length
assert_equal 24, @overhead_budgets_for_2010.length
assert_equal 24, @overhead_budgets_for_2011.length
@overhead_budgets_for_2009.each do |overhead_budget|
assert_equal 2009, overhead_budget.year
assert [overhead_budget_hours_1, overhead_budget_hours_2].include?(overhead_budget.hours), "Extended overhead budget hours not matching template budget"
assert [overhead_budget_amount_1, overhead_budget_amount_2].include?(overhead_budget.budget), "Extended overhead budget dollars not matching template budget"
end
@overhead_budgets_for_2010.each do |overhead_budget|
assert_equal 2010, overhead_budget.year
assert [overhead_budget_hours_1, overhead_budget_hours_2].include?(overhead_budget.hours), "Extended overhead budget hours not matching template budget"
assert [overhead_budget_amount_1, overhead_budget_amount_2].include?(overhead_budget.budget), "Extended overhead budget dollars not matching template budget"
end
@overhead_budgets_for_2011.each do |overhead_budget|
assert_equal 2011, overhead_budget.year
assert [overhead_budget_hours_1, overhead_budget_hours_2].include?(overhead_budget.hours), "Extended overhead budget hours not matching template budget"
assert [overhead_budget_amount_1, overhead_budget_amount_2].include?(overhead_budget.budget), "Extended overhead budget dollars not matching template budget"
end
@fixed_budgets = @retainer_deliverable.reload.fixed_budgets
assert_equal 36, @fixed_budgets.length # 36 months * 1 record
@fixed_budgets_for_2009 = @fixed_budgets.select {|l| l.year == 2009 }
@fixed_budgets_for_2010 = @fixed_budgets.select {|l| l.year == 2010 }
@fixed_budgets_for_2011 = @fixed_budgets.select {|l| l.year == 2011 }
assert_equal 12, @fixed_budgets_for_2009.length
assert_equal 12, @fixed_budgets_for_2010.length
assert_equal 12, @fixed_budgets_for_2011.length
end
should "allow shrinking a Retainer's start and end months" do
@retainer_deliverable = RetainerDeliverable.spawn(:contract => @contract, :manager => @manager, :title => "Retainer")
@retainer_deliverable.labor_budgets << @labor_budget = LaborBudget.spawn(:deliverable => @retainer_deliverable, :budget => 1000, :hours => 10)
@retainer_deliverable.labor_budgets << @labor_budget = LaborBudget.spawn(:deliverable => @retainer_deliverable, :budget => 2000, :hours => 20)
@retainer_deliverable.overhead_budgets << @overhead_budget = OverheadBudget.spawn(:deliverable => @retainer_deliverable, :budget => 1000, :hours => 10)
@retainer_deliverable.overhead_budgets << @overhead_budget = OverheadBudget.spawn(:deliverable => @retainer_deliverable, :budget => 2000, :hours => 20)
@retainer_deliverable.fixed_budgets << @fixed_budget = FixedBudget.spawn(:deliverable => @retainer_deliverable, :title => 'Printing supplies', :budget => 100, :markup => 0)
@retainer_deliverable.start_date = '2010-01-01'
@retainer_deliverable.end_date = '2010-12-31'
@retainer_deliverable.save!
assert_equal 12, @retainer_deliverable.months.length
assert_equal 24, @retainer_deliverable.reload.labor_budgets.count # 12 months * 2 records
assert_equal 24, @retainer_deliverable.reload.overhead_budgets.count # 12 months * 2 records
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@retainer_deliverable.id}", 'Edit'
assert_response :success
assert_template 'deliverables/edit'
# Shrink the period to only 6 months
fill_in "Start", :with => '2010-02-13'
fill_in "End Date", :with => '2010-07-01'
click_button "Save"
assert_response :success
assert_template 'contracts/show'
@retainer_deliverable.reload
assert_equal 6, @retainer_deliverable.months.length
@labor_budgets = @retainer_deliverable.reload.labor_budgets
assert_equal 12, @labor_budgets.length # 6 months * 2 records
@overhead_budgets = @retainer_deliverable.reload.overhead_budgets
assert_equal 12, @overhead_budgets.length # 6 months * 2 records
@fixed_budgets = @retainer_deliverable.reload.fixed_budgets
assert_equal 6, @fixed_budgets.length # 6 months * 1 records
end
should "allow editing a Retainer's start and end months inside the current period" do
@retainer_deliverable = RetainerDeliverable.spawn(:contract => @contract, :manager => @manager, :title => "Retainer")
@retainer_deliverable.labor_budgets << @labor_budget = LaborBudget.spawn(:deliverable => @retainer_deliverable, :budget => 1000, :hours => 10)
@retainer_deliverable.labor_budgets << @labor_budget = LaborBudget.spawn(:deliverable => @retainer_deliverable, :budget => 2000, :hours => 20)
@retainer_deliverable.overhead_budgets << @overhead_budget = OverheadBudget.spawn(:deliverable => @retainer_deliverable, :budget => 1000, :hours => 10)
@retainer_deliverable.overhead_budgets << @overhead_budget = OverheadBudget.spawn(:deliverable => @retainer_deliverable, :budget => 2000, :hours => 20)
@retainer_deliverable.start_date = '2010-01-01'
@retainer_deliverable.end_date = '2010-12-31'
@retainer_deliverable.save!
assert_equal 12, @retainer_deliverable.months.length
assert_equal 24, @retainer_deliverable.reload.labor_budgets.count # 12 months * 2 records
assert_equal 24, @retainer_deliverable.reload.overhead_budgets.count # 12 months * 2 records
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@retainer_deliverable.id}", 'Edit'
assert_response :success
assert_template 'deliverables/edit'
# Edit the dates without changing the period
fill_in "Start", :with => '2010-01-13'
fill_in "End Date", :with => '2010-12-01'
click_button "Save"
assert_response :success
assert_template 'contracts/show'
@retainer_deliverable.reload
assert_equal 12, @retainer_deliverable.months.length
@labor_budgets = @retainer_deliverable.reload.labor_budgets
assert_equal 24, @labor_budgets.length # 12 months * 2 records
@overhead_budgets = @retainer_deliverable.reload.overhead_budgets
assert_equal 24, @overhead_budgets.length # 12 months * 2 records
end
should "show empty budget fields for a Retainer that has missing budgets" do
@retainer_deliverable = RetainerDeliverable.spawn(:contract => @contract, :manager => @manager, :title => "Retainer")
@retainer_deliverable.start_date = '2010-01-01'
@retainer_deliverable.end_date = '2010-03-31'
@retainer_deliverable.save!
assert_equal 3, @retainer_deliverable.months.length
assert_equal 0, @retainer_deliverable.reload.labor_budgets.count # 3 months * 0 records
assert_equal 0, @retainer_deliverable.reload.overhead_budgets.count # 3 months * 0 records
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@retainer_deliverable.id}", 'Edit'
assert_response :success
assert_template 'deliverables/edit'
# Should show inputs:
# * labor hidden year
# * labor hidden month
# * labor hours
# * labor amount
# * labor deleted (hidden)
# * overhead hidden year
# * overhead hidden month
# * overhead hours
# * overhead amount
# * overhead deleted (hidden)
# * fixed hidden year
# * fixed hidden month
# * fixed title
# * fixed budget
# * fixed markup
# * fixed paid checkbox
# * fixed paid hidden field
# * fixed deleted (hidden)
# * total (hidden)
assert_select ".date-2010-01" do
assert_select "input", :count => 19
assert_select "textarea.wiki-edit", :count => 1 # Fixed description
end
within ".date-2010-01" do
within "#deliverable-labor" do
fill_in "hrs", :with => '20'
fill_in "$", :with => '2000'
end
within "#deliverable-overhead" do
fill_in "hrs", :with => '100'
fill_in "$", :with => '100'
end
within "#deliverable-fixed" do
fill_in "title", :with => 'Flight to NYC'
fill_in "budget", :with => '$600'
fill_in "markup", :with => '50%'
fill_in "description", :with => 'Need to fly to NYC for the week'
end
end
click_button "Save"
assert_response :success
assert_template 'contracts/show'
@retainer_deliverable.reload
assert_equal 3, @retainer_deliverable.labor_budgets.count
assert_equal [20, nil, nil], @retainer_deliverable.labor_budgets.collect(&:hours)
assert_equal [2000, nil, nil], @retainer_deliverable.labor_budgets.collect(&:budget)
assert_equal 3, @retainer_deliverable.overhead_budgets.count
assert_equal [100, nil, nil], @retainer_deliverable.overhead_budgets.collect(&:hours)
assert_equal [100, nil, nil], @retainer_deliverable.overhead_budgets.collect(&:budget)
assert_equal 1, @retainer_deliverable.fixed_budgets.count
assert_equal [600], @retainer_deliverable.fixed_budgets.collect(&:budget)
end
context "locked deliverable" do
setup do
assert @fixed_deliverable.lock!
end
should "block edits to locked deliverables" do
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@fixed_deliverable.id}", 'Edit'
assert_response :success
within("#deliverable-details") do
fill_in "Title", :with => 'An updated title'
end
click_button "Save"
assert_response :success
assert_template 'deliverables/edit'
assert_not_equal "An updated title", @fixed_deliverable.reload.title
end
should "block edits to locked deliverables even when status changes to closed" do
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@fixed_deliverable.id}", 'Edit'
assert_response :success
within("#deliverable-details") do
fill_in "Title", :with => 'An updated title'
select "Closed", :from => "Status"
end
click_button "Save"
assert_response :success
assert_template 'deliverables/edit'
assert_not_equal "An updated title", @fixed_deliverable.reload.title
assert @fixed_deliverable.reload.locked?
end
should "be allowed to change the status on a locked deliverables to open" do
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@fixed_deliverable.id}", 'Edit'
assert_response :success
within("#deliverable-details") do
select "Open", :from => "Status"
end
click_button "Save"
assert_response :success
assert_template 'contracts/show'
assert @fixed_deliverable.reload.open?
end
should "be allowed to change the status on a locked deliverables to closed" do
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@fixed_deliverable.id}", 'Edit'
assert_response :success
within("#deliverable-details") do
select "Closed", :from => "Status"
end
click_button "Save"
assert_response :success
assert_template 'contracts/show'
assert @fixed_deliverable.reload.closed?
end
end
context "closed deliverable" do
setup do
assert @fixed_deliverable.close!
end
should "block edits to closed deliverables" do
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@fixed_deliverable.id}", 'Edit'
assert_response :success
within("#deliverable-details") do
fill_in "Title", :with => 'An updated title'
end
click_button "Save"
assert_response :success
assert_template 'deliverables/edit'
assert_not_equal "An updated title", @fixed_deliverable.reload.title
end
should "block edits to closed deliverables even when the status is changed to locked" do
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@fixed_deliverable.id}", 'Edit'
assert_response :success
within("#deliverable-details") do
fill_in "Title", :with => 'An updated title'
select "Locked", :from => "Status"
end
click_button "Save"
assert_response :success
assert_template 'deliverables/edit'
assert_not_equal "An updated title", @fixed_deliverable.reload.title
assert @fixed_deliverable.reload.closed?
end
should "be allowed to change the status on a closed deliverables to open" do
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@fixed_deliverable.id}", 'Edit'
assert_response :success
within("#deliverable-details") do
select "Open", :from => "Status"
end
click_button "Save"
assert_response :success
assert_template 'contracts/show'
assert @fixed_deliverable.reload.open?
end
should "be allowed to change the status on a closed deliverables to Locked" do
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@fixed_deliverable.id}", 'Edit'
assert_response :success
within("#deliverable-details") do
select "Locked", :from => "Status"
end
click_button "Save"
assert_response :success
assert_template 'contracts/show'
assert @fixed_deliverable.reload.locked?
end
end
context "a Deliverable on a locked Contract" do
setup do
assert @contract.lock!
end
should "be blocked from editing" do
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@fixed_deliverable.id}", 'Edit'
assert_response :success
within("#deliverable-details") do
fill_in "Title", :with => 'An updated title'
end
click_button "Save"
assert_response :success
assert_template 'deliverables/edit'
assert_not_equal "An updated title", @fixed_deliverable.reload.title
end
should "allow status only changes" do
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@fixed_deliverable.id}", 'Edit'
assert_response :success
within("#deliverable-details") do
select "Locked", :from => "Status"
end
click_button "Save"
assert_response :success
assert_template 'contracts/show'
assert @fixed_deliverable.reload.locked?
end
end
context "a Deliverable on a closed Contract" do
setup do
assert @contract.close!
end
should "be blocked from editing" do
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@fixed_deliverable.id}", 'Edit'
assert_response :success
within("#deliverable-details") do
fill_in "Title", :with => 'An updated title'
end
click_button "Save"
assert_response :success
assert_template 'deliverables/edit'
assert_not_equal "An updated title", @fixed_deliverable.reload.title
end
should "allow status only changes" do
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@fixed_deliverable.id}", 'Edit'
assert_response :success
within("#deliverable-details") do
select "Locked", :from => "Status"
end
click_button "Save"
assert_response :success
assert_template 'contracts/show'
assert @fixed_deliverable.reload.locked?
end
end
end