75 lines
2.4 KiB
Ruby
75 lines
2.4 KiB
Ruby
shared_examples "documentable" do |documentable_factory_name, documentable_path, documentable_path_arguments|
|
|
let(:user) { create(:user) }
|
|
let(:arguments) { {} }
|
|
let(:documentable) { create(documentable_factory_name, author: user) }
|
|
let!(:document) { create(:document, documentable: documentable, user: documentable.author) }
|
|
|
|
before do
|
|
documentable_path_arguments.each do |argument_name, path_to_value|
|
|
arguments.merge!("#{argument_name}": documentable.send(path_to_value))
|
|
end
|
|
end
|
|
|
|
context "Show documents" do
|
|
describe "Destroy action" do
|
|
scenario "Should not be able when no user logged in" do
|
|
visit send(documentable_path, arguments)
|
|
|
|
expect(page).not_to have_button "Delete document"
|
|
end
|
|
|
|
scenario "Should be able when documentable author is logged in" do
|
|
login_as documentable.author
|
|
visit send(documentable_path, arguments)
|
|
|
|
expect(page).to have_button "Delete document"
|
|
end
|
|
|
|
scenario "Administrators cannot destroy documentables they have not authored", :admin do
|
|
visit send(documentable_path, arguments)
|
|
|
|
expect(page).not_to have_button "Delete document"
|
|
end
|
|
|
|
scenario "Users cannot destroy documentables they have not authored" do
|
|
login_as(create(:user))
|
|
visit send(documentable_path, arguments)
|
|
|
|
expect(page).not_to have_button "Delete document"
|
|
end
|
|
end
|
|
|
|
describe "When allow attached documents setting is disabled" do
|
|
before do
|
|
Setting["feature.allow_attached_documents"] = false
|
|
end
|
|
|
|
scenario "Documents list should not be available" do
|
|
login_as(create(:user))
|
|
visit send(documentable_path, arguments)
|
|
|
|
expect(page).not_to have_css("#documents")
|
|
end
|
|
end
|
|
end
|
|
|
|
context "Destroy" do
|
|
scenario "Should show success notice after successful document upload" do
|
|
login_as documentable.author
|
|
|
|
visit send(documentable_path, arguments)
|
|
|
|
within "#document_#{document.id}" do
|
|
accept_confirm { click_button "Delete document" }
|
|
end
|
|
|
|
expect(page).to have_content "Document was deleted successfully."
|
|
expect(page).not_to have_content "Documents (0)"
|
|
|
|
within "##{ActionView::RecordIdentifier.dom_id(documentable)}" do
|
|
expect(page).to have_css "h1", text: documentable.title
|
|
end
|
|
end
|
|
end
|
|
end
|