diff --git a/app/controllers/admin/reports_controller.rb b/app/controllers/admin/reports_controller.rb index 9aff9f597f..ac6f1b73b4 100644 --- a/app/controllers/admin/reports_controller.rb +++ b/app/controllers/admin/reports_controller.rb @@ -80,11 +80,10 @@ module Admin block: "start" ).broadcast - blob = ReportBlob.create_for_upload_later!(report_filename) - ReportJob.perform_later( report_class:, user: spree_current_user, params:, - format:, blob:, channel: ScopedChannel.for_id(params[:uuid]), + format:, filename: report_filename, + channel: ScopedChannel.for_id(params[:uuid]), ) head :no_content diff --git a/app/jobs/report_job.rb b/app/jobs/report_job.rb index 9d1e081433..f2268f794d 100644 --- a/app/jobs/report_job.rb +++ b/app/jobs/report_job.rb @@ -9,11 +9,12 @@ class ReportJob < ApplicationJob NOTIFICATION_TIME = 5.seconds - def perform(report_class:, user:, params:, format:, blob:, channel: nil) + def perform(report_class:, user:, params:, format:, filename:, channel: nil) start_time = Time.zone.now report = report_class.new(user, params, render: true) result = report.render_as(format) + blob = ReportBlob.create_for_upload_later!(filename) blob.store(result) execution_time = Time.zone.now - start_time diff --git a/spec/jobs/report_job_spec.rb b/spec/jobs/report_job_spec.rb index c99f5fc38a..b37b19540a 100644 --- a/spec/jobs/report_job_spec.rb +++ b/spec/jobs/report_job_spec.rb @@ -4,15 +4,14 @@ require 'spec_helper' describe ReportJob do let(:report_args) { - { report_class:, user:, params:, format:, - blob: } + { report_class:, user:, params:, format:, filename: } } let(:report_class) { Reporting::Reports::UsersAndEnterprises::Base } let(:user) { enterprise.owner } let(:enterprise) { create(:enterprise) } let(:params) { {} } let(:format) { :csv } - let(:blob) { ReportBlob.create_for_upload_later!("report.csv") } + let(:filename) { "report.csv" } it "generates a report" do job = perform_enqueued_jobs(only: ReportJob) do @@ -22,12 +21,14 @@ describe ReportJob do end it "enqueues a job for async processing" do - job = ReportJob.perform_later(**report_args) - expect(blob.content_stored?).to eq false + expect { + ReportJob.perform_later(**report_args) + }.to_not change { ActiveStorage::Blob.count } - perform_enqueued_jobs(only: ReportJob) + expect { + perform_enqueued_jobs(only: ReportJob) + }.to change { ActiveStorage::Blob.count } - expect(blob.content_stored?).to eq true expect_csv_report end @@ -44,10 +45,9 @@ describe ReportJob do ReportJob.perform_later(**report_args) perform_enqueued_jobs(only: ReportJob) }.to enqueue_mail(ReportMailer, :report_ready).with( - params: { + params: hash_including( to: user.email, - blob:, - }, + ), args: [], ) end @@ -76,7 +76,7 @@ describe ReportJob do end def expect_csv_report - blob.reload + blob = ReportBlob.last expect(blob.filename.to_s).to eq "report.csv" expect(blob.content_type).to eq "text/csv"