diff --git a/config/initializers/excel_analyzer.rb b/config/initializers/excel_analyzer.rb index 95b6f64681..75127e76ca 100644 --- a/config/initializers/excel_analyzer.rb +++ b/config/initializers/excel_analyzer.rb @@ -1 +1,7 @@ require "excel_analyzer" + +ExcelAnalyzer.on_spreadsheet_received = ->(raw_email_blob) do + incoming_message = IncomingMessage.joins(raw_email: :file_blob). + find_by(active_storage_blobs: { id: raw_email_blob }) + incoming_message&.parse_raw_email! +end diff --git a/doc/CHANGES.md b/doc/CHANGES.md index ad460a2d03..666698c406 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -2,6 +2,7 @@ ## Highlighted Features +* Add automatic parsing of emails contain Excel spreadsheets (Graeme Porteous) * Add admin list of all citations (Gareth Rees) * Improve redirection flow after user account closure actions (Gareth Rees) * Fix duplicated attachment masking jobs (Graeme Porteous) diff --git a/spec/integration/incoming_mail_spec.rb b/spec/integration/incoming_mail_spec.rb index 40451ba816..95982a730c 100644 --- a/spec/integration/incoming_mail_spec.rb +++ b/spec/integration/incoming_mail_spec.rb @@ -132,4 +132,26 @@ expect(page.response_headers['Content-Type']).to eq("application/octet-stream; charset=utf-8") expect(page).to have_content "an unusual sort of file" end + + it "does not automatically extract attachments after receiving email" do + receive_incoming_mail('incoming-request-plain.email', + email_to: info_request.incoming_email) + perform_enqueued_jobs + + im = info_request.incoming_messages.first + expect(im.foi_attachments).to be_empty + end + + it "extract attachments when inbound email contains an Excel spreadsheet" do + mail = Mail.new(to: info_request.incoming_email) do + body 'My excel spreadsheet' + add_file 'gems/excel_analyzer/spec/fixtures/data.xlsx' + end + + receive_incoming_mail(mail.to_s) + perform_enqueued_jobs + + im = info_request.incoming_messages.first + expect(im.foi_attachments).to_not be_empty + end end