From ab4516cd10ce1eb33b8221af7b17ad00f2928283 Mon Sep 17 00:00:00 2001 From: Justin Coyne Date: Tue, 10 Sep 2019 09:50:17 -0500 Subject: [PATCH] Extract publish object spec to a request spec Controller specs are deprecated --- spec/controllers/objects_controller_spec.rb | 19 ---------- spec/requests/publish_object_spec.rb | 40 +++++++++++++++++++++ 2 files changed, 40 insertions(+), 19 deletions(-) create mode 100644 spec/requests/publish_object_spec.rb diff --git a/spec/controllers/objects_controller_spec.rb b/spec/controllers/objects_controller_spec.rb index f3a011b246..d3daeedff8 100644 --- a/spec/controllers/objects_controller_spec.rb +++ b/spec/controllers/objects_controller_spec.rb @@ -22,25 +22,6 @@ 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 - describe '/notify_goobi' do let(:fake_request) { "#{item.pid}" } 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