From d40f5a891de53cc15ed84cefecfdcae69728a35d Mon Sep 17 00:00:00 2001 From: Ted Date: Tue, 17 May 2022 12:24:19 +0100 Subject: [PATCH] Added exception handling to export --- app/services/exports/case_log_export_service.rb | 4 +++- .../exports/case_log_export_service_spec.rb | 14 ++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/app/services/exports/case_log_export_service.rb b/app/services/exports/case_log_export_service.rb index f857ab6f5..cd880a442 100644 --- a/app/services/exports/case_log_export_service.rb +++ b/app/services/exports/case_log_export_service.rb @@ -11,6 +11,9 @@ module Exports export = save_export_run(current_time) write_master_manifest(export) write_export_data(case_logs) + export.save! + rescue StandardError => e + @logger.error "#{e.class}: #{e.message}. Caller: #{e.backtrace.first}" end def is_omitted_field?(field_name) @@ -31,7 +34,6 @@ module Exports export = LogsExport.new export.daily_run_number = last_daily_run_number + 1 export.started_at = current_time - export.save! export end diff --git a/spec/services/exports/case_log_export_service_spec.rb b/spec/services/exports/case_log_export_service_spec.rb index 4e0a9dbc9..63b4725d2 100644 --- a/spec/services/exports/case_log_export_service_spec.rb +++ b/spec/services/exports/case_log_export_service_spec.rb @@ -83,14 +83,14 @@ RSpec.describe Exports::CaseLogExportService do export = LogsExport.new(started_at: start_time, daily_run_number: 1) export.save! params = { from: start_time, to: time_now } - expect(CaseLog).to receive(:where).with("updated_at >= :from and updated_at <= :to", params).and_return([]) + allow(CaseLog).to receive(:where).with("updated_at >= :from and updated_at <= :to", params).and_return([]) export_service.export_case_logs end context "when this is the first export" do it "gets the logs for the timeframe up until the current time" do params = { to: time_now } - expect(CaseLog).to receive(:where).with("updated_at <= :to", params).and_return([]) + allow(CaseLog).to receive(:where).with("updated_at <= :to", params).and_return([]) export_service.export_case_logs end end @@ -106,5 +106,15 @@ RSpec.describe Exports::CaseLogExportService do export_service.export_case_logs end end + + context "when export has an error" do + it "does not save a record in the database" do + allow(storage_service).to receive(:write_file).and_raise(StandardError.new("This is an exception")) + export = LogsExport.new + allow(LogsExport).to receive(:new).and_return(export) + expect(export).not_to receive(:save!) + export_service.export_case_logs + end + end end end