Files
nairobi/spec/system/admin/site_customization/documents_spec.rb
Javi Martín 091abfc944 Use Active Storage to render attachments
This way we fix a bug we mentioned in commit 930bb753c which caused
links to documents to be broken when editing their title because the
title was used to generate the URL of the document.

Note we're still using Paperclip to render cached attachments because
this is the only case where we store files with just Paperclip and not
Active Storage.

With Active Storage, we render attachments just like any other resource,
using `polymorphic_path`. Paperclip included the `url` method in the
model; since the model doesn't have access to the request parameters
(like the host), this was inconvenient because it wasn't possible to
generate absolute URLs with Paperclip.

In order to simplify the code and make it similar to the way we used
Paperclip, we're adding a `variant` method accepting the name of a
variant and returning the variant.
2022-02-23 18:21:38 +01:00

87 lines
2.4 KiB
Ruby

require "rails_helper"
describe "Documents", :admin do
scenario "Navigation" do
visit admin_root_path
within("#side_menu") do
click_link "Site content"
click_link "Custom documents"
end
expect(page).to have_link "Add new document",
href: new_admin_site_customization_document_path
end
scenario "Index" do
3.times { create(:document, :admin) }
1.times { create(:document) }
document = Document.first
url = polymorphic_path(document.storage_attachment)
visit admin_site_customization_documents_path
expect(page).to have_content "There are 3 documents"
expect(page).to have_link document.title, href: url
end
scenario "Index (empty)" do
visit admin_site_customization_documents_path
expect(page).to have_content "There are no documents."
end
scenario "Index (pagination)" do
per_page = 3
allow(Document).to receive(:default_per_page).and_return(per_page)
(per_page + 2).times { create(:document, :admin) }
visit admin_site_customization_documents_path
expect(page).to have_selector("#documents .document", count: per_page)
within("ul.pagination") do
expect(page).to have_content("1")
expect(page).to have_link("2", href: admin_site_customization_documents_path(page: 2))
expect(page).not_to have_content("3")
click_link "Next", exact: false
end
expect(page).to have_selector("#documents .document", count: 2)
end
scenario "Create" do
visit new_admin_site_customization_document_path
attach_file("document_attachment", "#{Rails.root}/spec/fixtures/files/logo.pdf")
click_button "Upload"
expect(page).to have_content "Document uploaded succesfully"
expect(page).to have_link "logo.pdf"
end
scenario "Errors on create" do
visit new_admin_site_customization_document_path
click_button "Upload"
expect(page).to have_content "Invalid document"
end
scenario "Destroy" do
document = create(:document, :admin)
visit admin_site_customization_documents_path
within("#document_#{document.id}") do
accept_confirm("Are you sure? This action will delete \"#{document.title}\" and can't be undone.") do
click_button "Delete"
end
end
expect(page).to have_content "Document deleted succesfully"
expect(page).not_to have_content document.title
end
end