From 8a14548fc741e8d115d99e8303e36ed83660494d Mon Sep 17 00:00:00 2001 From: Shinya Maeda Date: Wed, 2 Jan 2019 15:25:44 +0900 Subject: [PATCH] Add spec for duplicate link name creation Fix spec for mysql unique validation failure --- app/services/releases/create_service.rb | 2 +- spec/requests/api/releases_spec.rb | 55 +++++++++++++++---------- 2 files changed, 34 insertions(+), 23 deletions(-) diff --git a/app/services/releases/create_service.rb b/app/services/releases/create_service.rb index 1590d9137cc..106fed3811d 100644 --- a/app/services/releases/create_service.rb +++ b/app/services/releases/create_service.rb @@ -48,7 +48,7 @@ module Releases ) success(tag: tag, release: release) - rescue ActiveRecord::RecordInvalid => e + rescue => e error(e.message, 400) end end diff --git a/spec/requests/api/releases_spec.rb b/spec/requests/api/releases_spec.rb index 43615475a50..8433497863e 100644 --- a/spec/requests/api/releases_spec.rb +++ b/spec/requests/api/releases_spec.rb @@ -153,6 +153,7 @@ describe API::Releases do get api("/projects/#{project.id}/releases/v0.1", maintainer) expect(json_response['assets']['links'].count).to eq(1) + expect(json_response['assets']['links'].first['id']).to eq(link.id) expect(json_response['assets']['links'].first['name']) .to eq('release-18.04.dmg') expect(json_response['assets']['links'].first['url']) @@ -303,19 +304,21 @@ describe API::Releases do end context 'when create assets altogether' do + let(:base_params) do + { + name: 'New release', + tag_name: 'v0.1', + description: 'Super nice release' + } + end + context 'when create one asset' do let(:params) do - { - name: 'New release', - tag_name: 'v0.1', - description: 'Super nice release', + base_params.merge({ links_attributes: [ - { - name: 'beta', - url: 'https://dosuken.example.com/inspection.exe' - } + { name: 'beta', url: 'https://dosuken.example.com/inspection.exe' } ] - } + }) end it 'accepts the request' do @@ -342,21 +345,12 @@ describe API::Releases do context 'when create two assets' do let(:params) do - { - name: 'New release', - tag_name: 'v0.1', - description: 'Super nice release', + base_params.merge({ links_attributes: [ - { - name: 'alpha', - url: 'https://dosuken.example.com/alpha.exe' - }, - { - name: 'beta', - url: 'https://dosuken.example.com/beta.exe' - } + { name: 'alpha', url: 'https://dosuken.example.com/alpha.exe' }, + { name: 'beta', url: 'https://dosuken.example.com/beta.exe' } ] - } + }) end it 'creates two assets with specified parameters' do @@ -369,6 +363,23 @@ describe API::Releases do .to match_array(%w[https://dosuken.example.com/alpha.exe https://dosuken.example.com/beta.exe]) end + + context 'when link names are duplicates' do + let(:params) do + base_params.merge({ + links_attributes: [ + { name: 'alpha', url: 'https://dosuken.example.com/alpha.exe' }, + { name: 'alpha', url: 'https://dosuken.example.com/beta.exe' } + ] + }) + end + + it 'recognizes as a bad request' do + post api("/projects/#{project.id}/releases", maintainer), params: params + + expect(response).to have_gitlab_http_status(:bad_request) + end + end end end end