diff --git a/app/controllers/objects_controller.rb b/app/controllers/objects_controller.rb index 405c574c7b..97cc3ebf74 100644 --- a/app/controllers/objects_controller.rb +++ b/app/controllers/objects_controller.rb @@ -11,6 +11,10 @@ class ObjectsController < ApplicationController render status: 409, plain: e.message, location: object_location(e.pid) end + rescue_from(DublinCoreService::CrosswalkError) do |e| + render status: 400, plain: e.message + end + # Register new objects in DOR def create Rails.logger.info(params.inspect) diff --git a/spec/controllers/objects_controller_spec.rb b/spec/controllers/objects_controller_spec.rb index ce528f32b2..27e15a494b 100644 --- a/spec/controllers/objects_controller_spec.rb +++ b/spec/controllers/objects_controller_spec.rb @@ -53,11 +53,22 @@ end describe '/publish' do - it 'calls publish metadata' do + it 'calls PublishMetadataService and returns 201' do expect(PublishMetadataService).to receive(:publish).with(item) post :publish, params: { id: item.pid } expect(response.status).to eq(201) end + + context 'with bad metadata' do + let(:error_message) { "DublinCoreService#ng_xml produced incorrect xml (no children):\n" } + + it 'returns a 400 error' do + allow(PublishMetadataService).to receive(:publish).and_raise(DublinCoreService::CrosswalkError, error_message) + post :publish, params: { id: item.pid } + expect(response.status).to eq(400) + expect(response.body).to eq(error_message) + end + end end describe '/update_marc_record' do