diff --git a/app/services/asp/file_handler.rb b/app/services/asp/file_handler.rb index a8774426d..fc7532c14 100644 --- a/app/services/asp/file_handler.rb +++ b/app/services/asp/file_handler.rb @@ -4,13 +4,13 @@ module ASP class FileHandler include Errors - attr_reader :filepath, :filename + attr_reader :filepath, :filename_noext FILE_TYPES = %i[rejects integrations payments].freeze def initialize(filepath) @filepath = filepath - @filename = File.basename(filepath, ".*") + @filename_noext = File.basename(filepath, ".*") end def parse! @@ -21,13 +21,13 @@ def parse! begin reader.process! rescue StandardError => e - raise ResponseFileParsingError, "couldn't parse #{filename}: #{e}" + raise ResponseFileParsingError, "couldn't parse #{filename_noext}: #{e}" end end def file_saved? if payments_file? - ASP::PaymentReturn.exists?(filename: filename) + ASP::PaymentReturn.exists?(filename: "#{filename_noext}.xml") else target_attachment.attached? end @@ -42,7 +42,7 @@ def file_saved? end def kind - case filename + case filename_noext when /^rejets_integ_idp/ :rejects when /^identifiants_generes/ @@ -56,9 +56,9 @@ def original_filename return if payments_file? name = if rejects_file? - filename.split("integ_idp_").last + filename_noext.split("integ_idp_").last elsif integrations_file? - filename.split("generes_").last + filename_noext.split("generes_").last end "#{name}.xml" @@ -89,7 +89,7 @@ def persist_file! end def persist_payment_file! - ASP::PaymentReturn.create_with_file!(io: File.read(filepath), filename: "#{filename}.xml") + ASP::PaymentReturn.create_with_file!(io: File.read(filepath), filename: "#{filename_noext}.xml") end def attach_to_request! diff --git a/spec/services/asp/file_handler_spec.rb b/spec/services/asp/file_handler_spec.rb index 6cd9d3eae..3fe3765f2 100644 --- a/spec/services/asp/file_handler_spec.rb +++ b/spec/services/asp/file_handler_spec.rb @@ -33,10 +33,14 @@ expect(request.send("#{type}_file")).to be_attached end + + it "can tell the file was attached correctly" do + expect { reader.parse! }.to change(reader, :file_saved?).from(false).to(true) + end end # rubocop:enable Rspec/MultipleMemoizedHelpers - %i[rejects integrations].each do |type| + %i[integrations rejects].each do |type| context "when the file is #{type} file" do it_behaves_like "a reader for the ASP integration process", type end @@ -60,6 +64,9 @@ expect(ASP::PaymentReturn.last.filename).to eq basename end + + it "knows whether the file was saved" do + expect { reader.parse! }.to change(reader, :file_saved?).from(false).to(true) + end end end -# frozen_string_literal: true