diff --git a/spec/controllers/objects_controller_spec.rb b/spec/controllers/objects_controller_spec.rb deleted file mode 100644 index 3de7d9485b..0000000000 --- a/spec/controllers/objects_controller_spec.rb +++ /dev/null @@ -1,43 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe ObjectsController do - before do - login - end - - let(:item) { Dor::Item.new(pid: 'druid:aa123bb4567') } - - before do - allow(Dor).to receive(:find).and_return(item) - rights_metadata_xml = Dor::RightsMetadataDS.new - allow(rights_metadata_xml).to receive_messages(ng_xml: Nokogiri::XML('')) - allow(item).to receive_messages( - id: 'druid:aa123bb4567', - datastreams: { 'rightsMetadata' => rights_metadata_xml }, - rightsMetadata: rights_metadata_xml, - remove_druid_prefix: 'aa123bb4567' - ) - allow(rights_metadata_xml).to receive(:dra_object).and_return(Dor::RightsAuth.parse(Nokogiri::XML(''), true)) - end - - describe '/publish' 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 500 error' do - allow(PublishMetadataService).to receive(:publish).and_raise(DublinCoreService::CrosswalkError, error_message) - post :publish, params: { id: item.pid } - expect(response.status).to eq(500) - expect(response.body).to eq(error_message) - end - end - end -end diff --git a/spec/requests/publish_object_spec.rb b/spec/requests/publish_object_spec.rb new file mode 100644 index 0000000000..71b6b1e245 --- /dev/null +++ b/spec/requests/publish_object_spec.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Publish object' do + let(:payload) { { sub: 'argo' } } + let(:jwt) { JWT.encode(payload, Settings.dor.hmac_secret, 'HS256') } + let(:object) { Dor::Item.new(pid: 'druid:1234') } + + before do + allow(Dor).to receive(:find).and_return(object) + end + + context 'with bad metadata' do + let(:error_message) { "DublinCoreService#ng_xml produced incorrect xml (no children):\n" } + + before do + allow(PublishMetadataService).to receive(:publish).and_raise(DublinCoreService::CrosswalkError, error_message) + end + + it 'returns a 409 error with location header' do + post '/v1/objects/druid:1234/publish', headers: { 'X-Auth' => "Bearer #{jwt}" } + expect(response.status).to eq(500) + expect(response.body).to eq(error_message) + end + end + + context 'when the request is successful' do + before do + allow(PublishMetadataService).to receive(:publish) + end + + it 'calls PublishMetadataService and returns 201' do + post '/v1/objects/druid:1234/publish', headers: { 'X-Auth' => "Bearer #{jwt}" } + + expect(PublishMetadataService).to have_received(:publish) + expect(response.status).to eq(201) + end + end +end