Skip to content

Commit

Permalink
Merge c68a18c into 0ba997c
Browse files Browse the repository at this point in the history
  • Loading branch information
jcoyne committed May 15, 2019
2 parents 0ba997c + c68a18c commit 4bf59c8
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 11 deletions.
8 changes: 5 additions & 3 deletions app/controllers/versions_controller.rb
Expand Up @@ -7,7 +7,7 @@ def create
VersionService.open(@item, open_params)
render plain: @item.current_version
rescue Dor::Exception => e
render build_error(e)
render build_error('Unable to open version', e)
end

def current
Expand All @@ -17,18 +17,20 @@ def current
def close_current
VersionService.close(@item, close_params)
render plain: "version #{@item.current_version} closed"
rescue Dor::Exception => e
render build_error('Unable to close version', e)
end

private

# JSON-API error response
def build_error(err)
def build_error(msg, err)
{
json: {
errors: [
{
"status": '422',
"title": 'Unable to open version',
"title": msg,
"detail": err.message
}
]
Expand Down
38 changes: 30 additions & 8 deletions spec/controllers/versions_controller_spec.rb
Expand Up @@ -21,16 +21,38 @@
end

describe '/versions/current/close' do
it 'closes the current version when posted to' do
expect(VersionService).to receive(:close)
post :close_current, params: { object_id: item.pid }, as: :json
expect(response.body).to match(/version 1 closed/)
context 'when closing a version succeedes' do
before do
allow(VersionService).to receive(:close)
end

it 'closes the current version when posted to' do
post :close_current, params: { object_id: item.pid }, as: :json
expect(VersionService).to have_received(:close)
expect(response.body).to match(/version 1 closed/)
end

it 'forwards optional params to the VersionService#close method' do
post :close_current, params: { object_id: item.pid }, body: %( {"description": "some text", "significance": "major"} ), as: :json
expect(response.body).to match(/version 1 closed/)
expect(VersionService).to have_received(:close).with(item, description: 'some text', significance: :major)
end
end

it 'forwards optional params to the VersionService#close method' do
expect(VersionService).to receive(:close).with(item, description: 'some text', significance: :major)
post :close_current, params: { object_id: item.pid }, body: %( {"description": "some text", "significance": "major"} ), as: :json
expect(response.body).to match(/version 1 closed/)
context 'when closing a version fails' do
before do
allow(VersionService).to receive(:close)
.and_raise(Dor::Exception, 'Trying to close version on an object not opened for versioning')
end

it 'returns an error' do
post :close_current, params: { object_id: item.pid }, as: :json
expect(response.body).to eq(
'{"errors":[{"status":"422","title":"Unable to close version",' \
'"detail":"Trying to close version on an object not opened for versioning"}]}'
)
expect(response.status).to eq 422
end
end
end

Expand Down

0 comments on commit 4bf59c8

Please sign in to comment.