Files
redmine_contracts/test/integration/deliverables_delete_test.rb

71 lines
2.3 KiB
Ruby

require 'test_helper'
class DeliverablesDeleteTest < ActionController::IntegrationTest
include Redmine::I18n
def setup
@project = Project.generate!(:identifier => 'main')
@contract = Contract.generate!(:project => @project, :name => 'A Contract')
@manager = User.generate!
@deliverable = FixedDeliverable.generate!(:contract => @contract, :manager => @manager)
@user = User.generate_user_with_permission_to_manage_budget(:project => @project)
login_as(@user.login, 'contracts')
end
should "block anonymous users from deleting the deliverable" do
logout
delete "/projects/#{@project.identifier}/contracts/#{@contract.id}/deliverables/#{@deliverable.id}"
follow_redirect!
assert_requires_login
end
should "block unauthorized users from deleting the deliverable" do
logout
@user = User.generate!(:password => 'test', :password_confirmation => 'test')
login_as(@user.login, 'test')
delete "/projects/#{@project.identifier}/contracts/#{@contract.id}/deliverables/#{@deliverable.id}"
assert_forbidden
end
should "allow authorized users to delete the deliverable" do
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@deliverable.id}", 'Delete'
assert_response :success
assert_template 'contracts/show'
assert_select '.flash.notice', /successfully deleted/
assert_nil Deliverable.find_by_id(@deliverable.id), "Deliverable not deleted"
end
should "unassign issues from the deliverable when deleting" do
issues = [
Issue.generate_for_project!(@project, :deliverable => @deliverable),
Issue.generate_for_project!(@project, :deliverable => @deliverable),
Issue.generate_for_project!(@project, :deliverable => @deliverable)
]
assert_equal 3, @deliverable.issues.count
@project.reload
visit_contract_page(@contract)
click_link_within "#deliverable_details_#{@deliverable.id}", 'Delete'
assert_response :success
assert_template 'contracts/show'
assert_nil Deliverable.find_by_id(@deliverable.id), "Deliverable not deleted"
assert_equal 0, @deliverable.issues.count
assert issues.all? {|issue|
issue.reload && issue.deliverable_id.nil?
}, "Issues' deliverable was not removed #{issues.collect(&:deliverable_id).join(', ')}"
end
end