diff --git a/spec/components/documents/document_component_spec.rb b/spec/components/documents/document_component_spec.rb new file mode 100644 index 000000000..eff800cba --- /dev/null +++ b/spec/components/documents/document_component_spec.rb @@ -0,0 +1,37 @@ +require "rails_helper" + +describe Documents::DocumentComponent do + let(:user) { create(:user) } + let(:proposal) { create(:proposal, author: user) } + let(:document) { create(:document, documentable: proposal) } + let(:component) { Documents::DocumentComponent.new(document, show_destroy_link: true) } + + describe "Delete document button" do + it "is not shown when no user is logged in" do + render_inline component + + expect(page).not_to have_button "Delete document" + end + + it "is shown when the author is logged in" do + sign_in(user) + render_inline component + + expect(page).to have_button "Delete document" + end + + it "is not shown when an administrator that isn't the author is logged in", :admin do + render_inline component + + expect(page).not_to have_button "Delete document" + end + + it "is not shown when a user that isn't the author is logged in" do + login_as(create(:user)) + + render_inline component + + expect(page).not_to have_button "Delete document" + end + end +end diff --git a/spec/shared/system/documentable.rb b/spec/shared/system/documentable.rb deleted file mode 100644 index fd69a383b..000000000 --- a/spec/shared/system/documentable.rb +++ /dev/null @@ -1,74 +0,0 @@ -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 diff --git a/spec/system/budgets/investments_spec.rb b/spec/system/budgets/investments_spec.rb index 642ef7826..e4fd1c897 100644 --- a/spec/system/budgets/investments_spec.rb +++ b/spec/system/budgets/investments_spec.rb @@ -1110,11 +1110,6 @@ describe "Budget Investments" do "budget_investment_path", { budget_id: "budget_id", id: "id" } - it_behaves_like "documentable", - "budget_investment", - "budget_investment_path", - { budget_id: "budget_id", id: "id" } - it_behaves_like "mappable", "budget_investment", "investment", diff --git a/spec/system/nested_documentable_spec.rb b/spec/system/nested_documentable_spec.rb index 7936a0f40..bf6e29d09 100644 --- a/spec/system/nested_documentable_spec.rb +++ b/spec/system/nested_documentable_spec.rb @@ -287,4 +287,35 @@ describe "Nested documentable" do end end end + + context "Show path" do + let(:factory) { (factories - [:dashboard_action]).sample } + let(:path) { polymorphic_path(documentable) } + + scenario "Documents list should not be available when allow attached documents setting is disabled" do + Setting["feature.allow_attached_documents"] = false + create(:document, documentable: documentable) + visit path + + expect(page).not_to have_css("#documents") + end + + context "Destroy" do + scenario "Should show success notice after successful document upload" do + create(:document, documentable: documentable) + documentable.update!(author: user) + login_as(user) + visit path + + accept_confirm { click_button "Delete document" } + + 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 end diff --git a/spec/system/proposals_spec.rb b/spec/system/proposals_spec.rb index bcb50ab13..f00a37b40 100644 --- a/spec/system/proposals_spec.rb +++ b/spec/system/proposals_spec.rb @@ -1295,8 +1295,6 @@ describe "Proposals" do it_behaves_like "imageable", "proposal", "proposal_path", { id: "id" } - it_behaves_like "documentable", "proposal", "proposal_path", { id: "id" } - it_behaves_like "mappable", "proposal", "proposal",