Use Active Storage to handle cached attachments
This fixes a few issues we've had for years. First, when attaching an image and then sending a form with validation errors, the image preview would not be rendered when the form was displayed once again. Now it's rendered as expected. Second, when attaching an image, removing it, and attaching a new one, browsers were displaying the image preview of the first one. That's because Paperclip generated the same URL from both files (as they both had the same hash data and prefix). Browsers usually cache images and render the cached image when getting the same URL. Since now we're storing each image in a different Blob, the images have different URLs and so the preview of the second one is correctly displayed. Finally, when users downloaded a document, they were getting files with a very long hexadecimal hash as filename. Now they get the original filename.
This commit is contained in:
@@ -137,9 +137,15 @@ shared_examples "nested documentable" do |login_as_name, documentable_factory_na
|
||||
do_login_for user_to_login
|
||||
visit send(path, arguments)
|
||||
|
||||
documentable_attach_new_file(Rails.root.join("spec/fixtures/files/empty.pdf"))
|
||||
click_link "Add new document"
|
||||
|
||||
expect_document_has_cached_attachment(0, ".pdf")
|
||||
cached_attachment_field = find("input[name$='[cached_attachment]']", visible: :hidden)
|
||||
expect(cached_attachment_field.value).to be_empty
|
||||
|
||||
attach_file "Choose document", Rails.root.join("spec/fixtures/files/empty.pdf")
|
||||
|
||||
expect(page).to have_css(".loading-bar.complete")
|
||||
expect(cached_attachment_field.value).not_to be_empty
|
||||
end
|
||||
|
||||
scenario "Should not update document cached_attachment field after invalid file upload" do
|
||||
@@ -151,7 +157,8 @@ shared_examples "nested documentable" do |login_as_name, documentable_factory_na
|
||||
false
|
||||
)
|
||||
|
||||
expect_document_has_cached_attachment(0, "")
|
||||
cached_attachment_field = find("input[name$='[cached_attachment]']", visible: :hidden)
|
||||
expect(cached_attachment_field.value).to be_empty
|
||||
end
|
||||
|
||||
scenario "Should show document errors after documentable submit with
|
||||
@@ -350,14 +357,6 @@ def expect_document_has_title(index, title)
|
||||
end
|
||||
end
|
||||
|
||||
def expect_document_has_cached_attachment(index, extension)
|
||||
document = all(".document")[index]
|
||||
|
||||
within document do
|
||||
expect(find("input[name$='[cached_attachment]']", visible: :hidden).value).to end_with(extension)
|
||||
end
|
||||
end
|
||||
|
||||
def documentable_fill_new_valid_proposal
|
||||
fill_in_new_proposal_title with: "Proposal title #{rand(9999)}"
|
||||
fill_in "Proposal summary", with: "Proposal summary"
|
||||
|
||||
Reference in New Issue
Block a user