diff --git a/modules/vba_documents/lib/vba_documents/upload_validator.rb b/modules/vba_documents/lib/vba_documents/upload_validator.rb index e2da009ef6c..281c5ef2f5e 100644 --- a/modules/vba_documents/lib/vba_documents/upload_validator.rb +++ b/modules/vba_documents/lib/vba_documents/upload_validator.rb @@ -52,7 +52,7 @@ def validate_metadata(metadata_input, consumer_id, upload_guid, submission_versi if rejected.present? raise VBADocuments::UploadError.new(code: 'DOC102', detail: "Non-string values for keys: #{rejected.join(',')}") end - if (FILE_NUMBER_REGEX =~ metadata['fileNumber']).nil? + if (FILE_NUMBER_REGEX =~ metadata['fileNumber'].strip).nil? raise VBADocuments::UploadError.new(code: 'DOC102', detail: 'Non-numeric or invalid-length fileNumber') end @@ -76,6 +76,7 @@ def validate_documents(parts, pdf_validator_options = VBADocuments::DocumentRequ def perfect_metadata(model, parts, timestamp) metadata = JSON.parse(parts['metadata']) + metadata['fileNumber'] = metadata['fileNumber'].strip if metadata.key?('fileNumber') metadata['source'] = "#{model.consumer_name} via VA API" metadata['receiveDt'] = timestamp.in_time_zone('US/Central').strftime('%Y-%m-%d %H:%M:%S') metadata['uuid'] = model.guid diff --git a/modules/vba_documents/spec/sidekiq/upload_processor_spec.rb b/modules/vba_documents/spec/sidekiq/upload_processor_spec.rb index 9fa49b997df..8718dd4f676 100644 --- a/modules/vba_documents/spec/sidekiq/upload_processor_spec.rb +++ b/modules/vba_documents/spec/sidekiq/upload_processor_spec.rb @@ -217,6 +217,26 @@ expect(updated.status).to eq('received') end + it 'trims leading\trailing whitespace from consumer supplied fileNumber metadata part' do + md = JSON.parse(valid_metadata) + md['fileNumber'] = ' 012345678 ' + allow(VBADocuments::MultipartParser).to receive(:parse) { + { 'metadata' => md.to_json, 'content' => valid_doc, 'attachment1' => valid_doc } + } + allow(CentralMail::Service).to receive(:new) { client_stub } + allow(faraday_response).to receive_messages(status: 200, body: '', success?: true) + capture_body = nil + expect(client_stub).to receive(:upload) { |arg| + capture_body = arg + faraday_response + } + + described_class.new.perform(upload.guid, test_caller) + metadata = JSON.parse(capture_body['metadata']) + # leading\trailing whitespace should have been removed + expect(metadata['fileNumber']).to eq(metadata['fileNumber']&.strip) + end + context 'when payload is empty' do let(:empty_payload) { get_fixture('emptyfile.blob') }