Skip to content

Commit

Permalink
Merge pull request #10762 from mkllnk/report-encoding
Browse files Browse the repository at this point in the history
Preserve encoding of stored reports
  • Loading branch information
drummer83 authored May 3, 2023
2 parents b60a6fb + 630169f commit 4b6ef77
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 1 deletion.
2 changes: 1 addition & 1 deletion app/models/report_blob.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,6 @@ def content_stored?
end

def result
@result ||= download
@result ||= download.force_encoding(Encoding::UTF_8)
end
end
15 changes: 15 additions & 0 deletions spec/models/report_blob_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# frozen_string_literal: false

require 'spec_helper'

describe ReportBlob, type: :model do
it "preserves UTF-8 content" do
blob = ReportBlob.create_for_upload_later!("customers.html")
content = "This works. ✓"

expect do
blob.store(content)
content = blob.result
end.to_not change { content.encoding }.from(Encoding::UTF_8)
end
end
25 changes: 25 additions & 0 deletions spec/system/admin/reports_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,31 @@
expect(page).to have_content "EMAIL FIRST NAME"
end

it "renders UTF-8 characters" do
# We had a problem when UTF-8 was in the page and the report because
# ActiveStorage read ASCII.
# - https://github.com/openfoodfoundation/openfoodnetwork/issues/10758
#
# Create order to inject special characters:
order = create(:completed_order_with_totals)

# Render special characters in the page (filter option):
order.distributor.update!(name: "Späti")

# Render special character within the report:
order.billing_address.update!(lastname: "Müller")

# Run the report:
login_as_admin
visit admin_report_path(
report_type: :customers, report_subtype: :mailing_list
)
click_button "Go"
expect(page).to have_content "Späti"
expect(page).to have_content "EMAIL FIRST NAME"
expect(page).to have_content "Müller"
end

it "displays a friendly timeout message and offers download" do
ActiveJob::Base.queue_adapter.perform_enqueued_jobs = false
login_as_admin
Expand Down

0 comments on commit 4b6ef77

Please sign in to comment.