71 lines
2.3 KiB
Ruby
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
|