/
publish_object_spec.rb
40 lines (31 loc) · 1.2 KB
/
publish_object_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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<xml/>" }
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