diff options
author | Shinya Maeda <shinya@gitlab.com> | 2019-01-04 15:29:04 +0900 |
---|---|---|
committer | Shinya Maeda <shinya@gitlab.com> | 2019-01-04 22:30:35 +0900 |
commit | 0d833ea294afc8a3fa582fe5e2585a4bf6d802c6 (patch) | |
tree | dbd77e14eebbeefe4438ca5d724d41fe2b9536b7 | |
parent | 9d0fa597e5a04c2b0e0c3b530062f63a91b4c97a (diff) | |
download | gitlab-ce-ac-releases-api-with-assets-update-delete-links.tar.gz |
Add tests for Release Link APIac-releases-api-with-assets-update-delete-links
Add tests for the API and add a couple of tests
Add
revert
revert
-rw-r--r-- | app/models/release.rb | 4 | ||||
-rw-r--r-- | app/models/releases/source.rb | 11 | ||||
-rw-r--r-- | app/services/releases/create_service.rb | 4 | ||||
-rw-r--r-- | db/migrate/20181228175414_create_releases_link_table.rb | 7 | ||||
-rw-r--r-- | db/schema.rb | 11 | ||||
-rw-r--r-- | lib/api/release/links.rb (renamed from lib/api/release/link.rb) | 87 | ||||
-rw-r--r-- | lib/api/releases.rb | 13 | ||||
-rw-r--r-- | spec/factories/releases/link.rb | 8 | ||||
-rw-r--r-- | spec/fixtures/api/schemas/release.json | 10 | ||||
-rw-r--r-- | spec/fixtures/api/schemas/release/link.json | 11 | ||||
-rw-r--r-- | spec/fixtures/api/schemas/release/links.json | 4 | ||||
-rw-r--r-- | spec/requests/api/release/links_spec.rb | 417 | ||||
-rw-r--r-- | spec/requests/api/releases_spec.rb | 124 |
13 files changed, 477 insertions, 234 deletions
diff --git a/app/models/release.rb b/app/models/release.rb index 77d56fa6a79..0dae5c90394 100644 --- a/app/models/release.rb +++ b/app/models/release.rb @@ -31,11 +31,7 @@ class Release < ActiveRecord::Base end def assets_count -<<<<<<< HEAD links.count + sources.count -======= - links.size + sources.size ->>>>>>> Support CURD operation for release asset links end def sources diff --git a/app/models/releases/source.rb b/app/models/releases/source.rb index 625501bbe7a..4d3d54457af 100644 --- a/app/models/releases/source.rb +++ b/app/models/releases/source.rb @@ -3,10 +3,7 @@ module Releases class Source include ActiveModel::Model -<<<<<<< HEAD -======= ->>>>>>> Support CURD operation for release asset links attr_accessor :project, :tag_name, :format FORMATS = %w(zip tar.gz tar.bz2 tar).freeze @@ -25,21 +22,13 @@ module Releases Gitlab::Routing .url_helpers .project_archive_url(project, -<<<<<<< HEAD id: File.join(tag_name, archive_prefix), -======= - id: File.join(tag_name, archive_path), ->>>>>>> Support CURD operation for release asset links format: format) end private -<<<<<<< HEAD def archive_prefix -======= - def archive_path ->>>>>>> Support CURD operation for release asset links "#{project.path}-#{tag_name.tr('/', '-')}" end end diff --git a/app/services/releases/create_service.rb b/app/services/releases/create_service.rb index 7d9387a4106..c6e143d440d 100644 --- a/app/services/releases/create_service.rb +++ b/app/services/releases/create_service.rb @@ -44,11 +44,7 @@ module Releases author: current_user, tag: tag.name, sha: tag.dereferenced_target.sha, -<<<<<<< HEAD links_attributes: params.dig(:assets, 'links') || [] -======= - links_attributes: params[:links_attributes] || [] ->>>>>>> Support CURD operation for release asset links ) success(tag: tag, release: release) diff --git a/db/migrate/20181228175414_create_releases_link_table.rb b/db/migrate/20181228175414_create_releases_link_table.rb index dacb586aeb4..03558202137 100644 --- a/db/migrate/20181228175414_create_releases_link_table.rb +++ b/db/migrate/20181228175414_create_releases_link_table.rb @@ -6,20 +6,13 @@ class CreateReleasesLinkTable < ActiveRecord::Migration[5.0] DOWNTIME = false def change -<<<<<<< HEAD create_table :release_links, id: :bigserial do |t| -======= - create_table :release_links do |t| ->>>>>>> Support CURD operation for release asset links t.references :release, null: false, index: false, foreign_key: { on_delete: :cascade } t.string :url, null: false t.string :name, null: false t.timestamps_with_timezone null: false -<<<<<<< HEAD t.index [:release_id, :url], unique: true -======= ->>>>>>> Support CURD operation for release asset links t.index [:release_id, :name], unique: true end end diff --git a/db/schema.rb b/db/schema.rb index caa6d82f44e..97daf8ee617 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,11 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -<<<<<<< HEAD ActiveRecord::Schema.define(version: 20190103140724) do -======= -ActiveRecord::Schema.define(version: 20181228175414) do ->>>>>>> Support CURD operation for release asset links # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -1802,21 +1798,14 @@ ActiveRecord::Schema.define(version: 20181228175414) do t.index ["source_type", "source_id"], name: "index_redirect_routes_on_source_type_and_source_id", using: :btree end -<<<<<<< HEAD create_table "release_links", id: :bigserial, force: :cascade do |t| -======= - create_table "release_links", force: :cascade do |t| ->>>>>>> Support CURD operation for release asset links t.integer "release_id", null: false t.string "url", null: false t.string "name", null: false t.datetime_with_timezone "created_at", null: false t.datetime_with_timezone "updated_at", null: false t.index ["release_id", "name"], name: "index_release_links_on_release_id_and_name", unique: true, using: :btree -<<<<<<< HEAD t.index ["release_id", "url"], name: "index_release_links_on_release_id_and_url", unique: true, using: :btree -======= ->>>>>>> Support CURD operation for release asset links end create_table "releases", force: :cascade do |t| diff --git a/lib/api/release/link.rb b/lib/api/release/links.rb index 72b67b8ce1b..91c3944b429 100644 --- a/lib/api/release/link.rb +++ b/lib/api/release/links.rb @@ -14,6 +14,9 @@ module API requires :id, type: String, desc: 'The ID of a project' end resource 'projects/:id', requirements: API::NAMESPACE_OR_PROJECT_REQUIREMENTS do + params do + requires :tag_name, type: String, desc: 'The name of the tag', as: :tag + end resource 'releases/:tag_name', requirements: RELEASE_ENDPOINT_REQUIREMETS do resource :assets do desc 'Get a list of links of a release' do @@ -26,20 +29,7 @@ module API get 'links' do authorize! :read_release, user_project - present paginate(release.links), with: Entities::Releases::Link - end - - desc 'Get a link detail of a release' do - detail 'This feature was introduced in GitLab 11.7.' - success Entities::Releases::Link - end - params do - requires :link_id, type: String, desc: 'The id of the link' - end - get 'links/:link_id' do - authorize! :read_release, release - - present link, with: Entities::Releases::Link + present paginate(release.links.sorted), with: Entities::Releases::Link end desc 'Create a link of a release' do @@ -58,44 +48,55 @@ module API if new_link.persisted? present new_link, with: Entities::Releases::Link else - render_api_error!(result[:message], result[:http_status]) + render_api_error!(new_link.errors.messages, 400) end end - desc 'Update a link of a release' do - detail 'This feature was introduced in GitLab 11.7.' - success Entities::Releases::Link - end params do - requires :link_id, type: Integer, desc: 'The id of the link' - optional :name, type: String, desc: 'The name of the link' - optional :url, type: String, desc: 'The URL of the link' - at_least_one_of :name, :url + requires :link_id, type: String, desc: 'The id of the link' end - put 'links/:link_id' do - authorize! :update_release, release + resource 'links/:link_id' do + desc 'Get a link detail of a release' do + detail 'This feature was introduced in GitLab 11.7.' + success Entities::Releases::Link + end + get do + authorize! :read_release, release - if link.update(declared_params(include_missing: false)) present link, with: Entities::Releases::Link - else - render_api_error!(result[:message], result[:http_status]) end - end - desc 'Delete a link of a release' do - detail 'This feature was introduced in GitLab 11.7.' - success Entities::Releases::Link - end - params do - requires :link_id, type: Integer, desc: 'The id of the link' - end - put 'links/:link_id' do - authorize! :destroy_release, release + desc 'Update a link of a release' do + detail 'This feature was introduced in GitLab 11.7.' + success Entities::Releases::Link + end + params do + optional :name, type: String, desc: 'The name of the link' + optional :url, type: String, desc: 'The URL of the link' + at_least_one_of :name, :url + end + put do + authorize! :update_release, release + + if link.update(declared_params(include_missing: false)) + present link, with: Entities::Releases::Link + else + render_api_error!(link.errors.messages, 400) + end + end - if link.destroy - present link, with: Entities::Releases::Link - else - render_api_error!(result[:message], result[:http_status]) + desc 'Delete a link of a release' do + detail 'This feature was introduced in GitLab 11.7.' + success Entities::Releases::Link + end + delete do + authorize! :destroy_release, release + + if link.destroy + present link, with: Entities::Releases::Link + else + render_api_error!(link.errors.messages, 400) + end end end end @@ -104,7 +105,7 @@ module API helpers do def release - @release ||= user_project.releases.find_by_tag(params[:tag_name]) + @release ||= user_project.releases.find_by_tag!(params[:tag]) end def link diff --git a/lib/api/releases.rb b/lib/api/releases.rb index 2078261a8d9..c3d4101528c 100644 --- a/lib/api/releases.rb +++ b/lib/api/releases.rb @@ -49,17 +49,11 @@ module API requires :name, type: String, desc: 'The name of the release' requires :description, type: String, desc: 'The release notes' optional :ref, type: String, desc: 'The commit sha or branch name' -<<<<<<< HEAD optional :assets, type: Hash do optional :links, type: Array do requires :name, type: String requires :url, type: String end -======= - optional :links_attributes, type: Array do - requires :name, type: String - requires :url, type: String ->>>>>>> Support CURD operation for release asset links end end post ':id/releases' do @@ -84,13 +78,6 @@ module API requires :tag_name, type: String, desc: 'The name of the tag', as: :tag optional :name, type: String, desc: 'The name of the release' optional :description, type: String, desc: 'Release notes with markdown support' - optional :links_attributes, type: Array do - optional :id, type: Integer - optional :name, type: String - optional :url, type: String - optional :_destroy, type: Integer - at_least_one_of :name, :url, :_destroy - end end put ':id/releases/:tag_name', requirements: RELEASE_ENDPOINT_REQUIREMETS do authorize_update_release! diff --git a/spec/factories/releases/link.rb b/spec/factories/releases/link.rb index 8633fcf4977..d23db6d4bad 100644 --- a/spec/factories/releases/link.rb +++ b/spec/factories/releases/link.rb @@ -1,4 +1,3 @@ -<<<<<<< HEAD # frozen_string_literal: true FactoryBot.define do @@ -6,12 +5,5 @@ FactoryBot.define do release sequence(:name) { |n| "release-18.#{n}.dmg" } sequence(:url) { |n| "https://example.com/scrambled-url/app-#{n}.zip" } -======= -FactoryBot.define do - factory :release_link, class: ::Releases::Link do - release - name "release-18.04.dmg" - url 'https://my-external-hosting.example.com/scrambled-url/app.zip' ->>>>>>> Support CURD operation for release asset links end end diff --git a/spec/fixtures/api/schemas/release.json b/spec/fixtures/api/schemas/release.json index 45fa8b074d4..86f0f27606c 100644 --- a/spec/fixtures/api/schemas/release.json +++ b/spec/fixtures/api/schemas/release.json @@ -15,15 +15,7 @@ }, "assets": { "count": { "type": "integer" }, - "links": { - "type": "array", - "items": { - "id": "integer", - "name": "string", - "url": "string", - "external": "boolean" - } - }, + "links": { "$ref": "release/links.json" }, "sources": { "type": "array", "items": { diff --git a/spec/fixtures/api/schemas/release/link.json b/spec/fixtures/api/schemas/release/link.json new file mode 100644 index 00000000000..97347cb91cc --- /dev/null +++ b/spec/fixtures/api/schemas/release/link.json @@ -0,0 +1,11 @@ +{ + "type": "object", + "required": ["name", "url"], + "properties": { + "id": { "type": "integer" }, + "name": { "type": "string" }, + "url": { "type": "string" }, + "external": { "type": "boolean" } + }, + "additionalProperties": false +} diff --git a/spec/fixtures/api/schemas/release/links.json b/spec/fixtures/api/schemas/release/links.json new file mode 100644 index 00000000000..766bc7ce20a --- /dev/null +++ b/spec/fixtures/api/schemas/release/links.json @@ -0,0 +1,4 @@ +{ + "type": "array", + "items": { "$ref": "link.json" } +} diff --git a/spec/requests/api/release/links_spec.rb b/spec/requests/api/release/links_spec.rb new file mode 100644 index 00000000000..9d62257d470 --- /dev/null +++ b/spec/requests/api/release/links_spec.rb @@ -0,0 +1,417 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe API::Release::Links do + let(:project) { create(:project, :repository, :private) } + let(:maintainer) { create(:user) } + let(:reporter) { create(:user) } + let(:non_project_member) { create(:user) } + let(:commit) { create(:commit, project: project) } + + let!(:release) do + create(:release, + project: project, + tag: 'v0.1', + author: maintainer) + end + + before do + project.add_maintainer(maintainer) + project.add_reporter(reporter) + + project.repository.add_tag(maintainer, 'v0.1', commit.id) + end + + describe 'GET /projects/:id/releases/:tag_name/assets/links' do + context 'when there are two release links' do + let!(:release_link_1) { create(:release_link, release: release, created_at: 2.days.ago) } + let!(:release_link_2) { create(:release_link, release: release, created_at: 1.day.ago) } + + it 'returns 200 HTTP status' do + get api("/projects/#{project.id}/releases/v0.1/assets/links", maintainer) + + expect(response).to have_gitlab_http_status(:ok) + end + + it 'returns release links ordered by created_at' do + get api("/projects/#{project.id}/releases/v0.1/assets/links", maintainer) + + expect(json_response.count).to eq(2) + expect(json_response.first['name']).to eq(release_link_2.name) + expect(json_response.second['name']).to eq(release_link_1.name) + end + + it 'matches response schema' do + get api("/projects/#{project.id}/releases/v0.1/assets/links", maintainer) + + expect(response).to match_response_schema('release/links') + end + end + + context 'when release does not exist' do + let!(:release) { } + + it_behaves_like '404 response' do + let(:request) { get api("/projects/#{project.id}/releases/v0.1/assets/links", maintainer) } + let(:message) { '404 Not found' } + end + end + + context 'when user is not a project member' do + it_behaves_like '404 response' do + let(:request) { get api("/projects/#{project.id}/releases/v0.1/assets/links", non_project_member) } + let(:message) { '404 Project Not Found' } + end + + context 'when project is public' do + let(:project) { create(:project, :repository, :public) } + + it 'allows the request' do + get api("/projects/#{project.id}/releases/v0.1/assets/links", non_project_member) + + expect(response).to have_gitlab_http_status(:ok) + end + end + end + + context 'when feature flag is disabled' do + before do + stub_feature_flags(releases_page: false) + end + + it_behaves_like '404 response' do + let(:request) { get api("/projects/#{project.id}/releases/v0.1/assets/links", maintainer) } + end + end + end + + describe 'GET /projects/:id/releases/:tag_name/assets/links/:link_id' do + let!(:release_link) { create(:release_link, release: release) } + + it 'returns 200 HTTP status' do + get api("/projects/#{project.id}/releases/v0.1/assets/links/#{release_link.id}", maintainer) + + expect(response).to have_gitlab_http_status(:ok) + end + + it 'returns a link entry' do + get api("/projects/#{project.id}/releases/v0.1/assets/links/#{release_link.id}", maintainer) + + expect(json_response['name']).to eq(release_link.name) + expect(json_response['url']).to eq(release_link.url) + end + + it 'matches response schema' do + get api("/projects/#{project.id}/releases/v0.1/assets/links/#{release_link.id}", maintainer) + + expect(response).to match_response_schema('release/link') + end + + context 'when specified tag is not found in the project' do + it_behaves_like '404 response' do + let(:request) { get api("/projects/#{project.id}/releases/non_existing_tag/assets/links/#{release_link.id}", maintainer) } + end + end + + context 'when user is not a project member' do + it_behaves_like '404 response' do + let(:request) { get api("/projects/#{project.id}/releases/non_existing_tag/assets/links/#{release_link.id}", non_project_member) } + end + + context 'when project is public' do + let(:project) { create(:project, :repository, :public) } + + it 'allows the request' do + get api("/projects/#{project.id}/releases/v0.1/assets/links/#{release_link.id}", non_project_member) + + expect(response).to have_gitlab_http_status(:ok) + end + end + end + + context 'when feature flag is disabled' do + before do + stub_feature_flags(releases_page: false) + end + + it_behaves_like '404 response' do + let(:request) { get api("/projects/#{project.id}/releases/non_existing_tag/assets/links/#{release_link.id}", maintainer) } + end + end + end + + describe 'POST /projects/:id/releases/:tag_name/assets/links' do + let(:params) do + { + name: 'awesome-app.dmg', + url: 'https://example.com/download/awesome-app.dmg' + } + end + + it 'accepts the request' do + post api("/projects/#{project.id}/releases/v0.1/assets/links", maintainer), params: params + + expect(response).to have_gitlab_http_status(:created) + end + + it 'creates a new release' do + expect do + post api("/projects/#{project.id}/releases/v0.1/assets/links", maintainer), params: params + end.to change { Releases::Link.count }.by(1) + + release.reload + expect(release.links.last.name).to eq('awesome-app.dmg') + expect(release.links.last.url).to eq('https://example.com/download/awesome-app.dmg') + end + + it 'matches response schema' do + post api("/projects/#{project.id}/releases/v0.1/assets/links", maintainer), params: params + + expect(response).to match_response_schema('release/link') + end + + context 'when name is empty' do + let(:params) do + { + name: '', + url: 'https://example.com/download/awesome-app.dmg' + } + end + + it_behaves_like '400 response' do + let(:request) do + post api("/projects/#{project.id}/releases/v0.1/assets/links", maintainer), + params: params + end + end + end + + context 'when user is a reporter' do + it_behaves_like '403 response' do + let(:request) do + post api("/projects/#{project.id}/releases/v0.1/assets/links", reporter), + params: params + end + end + end + + context 'when user is not a project member' do + it 'forbids the request' do + post api("/projects/#{project.id}/releases/v0.1/assets/links", non_project_member), + params: params + + expect(response).to have_gitlab_http_status(:not_found) + end + + context 'when project is public' do + let(:project) { create(:project, :repository, :public) } + + it 'forbids the request' do + post api("/projects/#{project.id}/releases/v0.1/assets/links", non_project_member), + params: params + + expect(response).to have_gitlab_http_status(:forbidden) + end + end + end + + context 'when the same link already exists' do + before do + create(:release_link, + release: release, + name: 'awesome-app.dmg', + url: 'https://example.com/download/awesome-app.dmg') + end + + it_behaves_like '400 response' do + let(:request) do + post api("/projects/#{project.id}/releases/v0.1/assets/links", maintainer), + params: params + end + end + end + + context 'when feature flag is disabled' do + before do + stub_feature_flags(releases_page: false) + end + + it_behaves_like '404 response' do + let(:request) do + post api("/projects/#{project.id}/releases/v0.1/assets/links", maintainer), + params: params + end + end + end + end + + describe 'PUT /projects/:id/releases/:tag_name/assets/links/:link_id' do + let(:params) { { name: 'awesome-app.msi' } } + let!(:release_link) { create(:release_link, release: release) } + + it 'accepts the request' do + put api("/projects/#{project.id}/releases/v0.1/assets/links/#{release_link.id}", maintainer), + params: params + + expect(response).to have_gitlab_http_status(:ok) + end + + it 'updates the name' do + put api("/projects/#{project.id}/releases/v0.1/assets/links/#{release_link.id}", maintainer), + params: params + + expect(json_response['name']).to eq('awesome-app.msi') + end + + it 'does not update the url' do + put api("/projects/#{project.id}/releases/v0.1/assets/links/#{release_link.id}", maintainer), + params: params + + expect(json_response['url']).to eq(release_link.url) + end + + it 'matches response schema' do + put api("/projects/#{project.id}/releases/v0.1/assets/links/#{release_link.id}", maintainer), + params: params + + expect(response).to match_response_schema('release/link') + end + + context 'when params is empty' do + let(:params) { {} } + + it 'does not allow the request' do + put api("/projects/#{project.id}/releases/v0.1/assets/links/#{release_link.id}", maintainer), + params: params + + expect(response).to have_gitlab_http_status(:bad_request) + end + end + + context 'when there are no corresponding release link' do + let!(:release_link) { } + + it_behaves_like '404 response' do + let(:request) do + put api("/projects/#{project.id}/releases/v0.1/assets/links/1", maintainer), + params: params + end + end + end + + context 'when user is a reporter' do + it_behaves_like '403 response' do + let(:request) do + put api("/projects/#{project.id}/releases/v0.1/assets/links/#{release_link.id}", reporter), + params: params + end + end + end + + context 'when user is not a project member' do + it_behaves_like '404 response' do + let(:request) do + put api("/projects/#{project.id}/releases/v0.1/assets/links/#{release_link.id}", non_project_member), + params: params + end + end + + context 'when project is public' do + let(:project) { create(:project, :repository, :public) } + + it_behaves_like '403 response' do + let(:request) do + put api("/projects/#{project.id}/releases/v0.1/assets/links/#{release_link.id}", non_project_member), + params: params + end + end + end + end + + context 'when feature flag is disabled' do + before do + stub_feature_flags(releases_page: false) + end + + it_behaves_like '404 response' do + let(:request) do + put api("/projects/#{project.id}/releases/v0.1/assets/links/#{release_link.id}", maintainer), + params: params + end + end + end + end + + describe 'DELETE /projects/:id/releases/:tag_name/assets/links/:link_id' do + let!(:release_link) do + create(:release_link, release: release) + end + + it 'accepts the request' do + delete api("/projects/#{project.id}/releases/v0.1/assets/links/#{release_link.id}", maintainer) + + expect(response).to have_gitlab_http_status(:ok) + end + + it 'destroys the release link' do + expect do + delete api("/projects/#{project.id}/releases/v0.1/assets/links/#{release_link.id}", maintainer) + end.to change { Releases::Link.count }.by(-1) + end + + it 'matches response schema' do + delete api("/projects/#{project.id}/releases/v0.1/assets/links/#{release_link.id}", maintainer) + + expect(response).to match_response_schema('release/link') + end + + context 'when there are no corresponding release link' do + let!(:release_link) { } + + it_behaves_like '404 response' do + let(:request) do + delete api("/projects/#{project.id}/releases/v0.1/assets/links/1", maintainer) + end + end + end + + context 'when user is a reporter' do + it_behaves_like '403 response' do + let(:request) do + delete api("/projects/#{project.id}/releases/v0.1/assets/links/#{release_link.id}", reporter) + end + end + end + + context 'when user is not a project member' do + it_behaves_like '404 response' do + let(:request) do + delete api("/projects/#{project.id}/releases/v0.1/assets/links/#{release_link.id}", non_project_member) + end + end + + context 'when project is public' do + let(:project) { create(:project, :repository, :public) } + + it_behaves_like '403 response' do + let(:request) do + delete api("/projects/#{project.id}/releases/v0.1/assets/links/#{release_link.id}", non_project_member) + end + end + end + end + + context 'when feature flag is disabled' do + before do + stub_feature_flags(releases_page: false) + end + + it_behaves_like '404 response' do + let(:request) do + delete api("/projects/#{project.id}/releases/v0.1/assets/links/#{release_link.id}", maintainer) + end + end + end + end +end diff --git a/spec/requests/api/releases_spec.rb b/spec/requests/api/releases_spec.rb index ad5991729c3..978fa0142c2 100644 --- a/spec/requests/api/releases_spec.rb +++ b/spec/requests/api/releases_spec.rb @@ -153,10 +153,7 @@ describe API::Releases do get api("/projects/#{project.id}/releases/v0.1", maintainer) expect(json_response['assets']['links'].count).to eq(1) -<<<<<<< HEAD expect(json_response['assets']['links'].first['id']).to eq(link.id) -======= ->>>>>>> Support CURD operation for release asset links expect(json_response['assets']['links'].first['name']) .to eq('release-18.04.dmg') expect(json_response['assets']['links'].first['url']) @@ -307,7 +304,6 @@ describe API::Releases do end context 'when create assets altogether' do -<<<<<<< HEAD let(:base_params) do { name: 'New release', @@ -323,21 +319,6 @@ describe API::Releases do links: [{ name: 'beta', url: 'https://dosuken.example.com/inspection.exe' }] } }) -======= - context 'when create one asset' do - let(:params) do - { - name: 'New release', - tag_name: 'v0.1', - description: 'Super nice release', - links_attributes: [ - { - name: 'beta', - url: 'https://dosuken.example.com/inspection.exe' - } - ] - } ->>>>>>> Support CURD operation for release asset links end it 'accepts the request' do @@ -364,7 +345,6 @@ describe API::Releases do context 'when create two assets' do let(:params) do -<<<<<<< HEAD base_params.merge({ assets: { links: [ @@ -373,23 +353,6 @@ describe API::Releases do ] } }) -======= - { - name: 'New release', - tag_name: 'v0.1', - description: 'Super nice release', - links_attributes: [ - { - name: 'alpha', - url: 'https://dosuken.example.com/alpha.exe' - }, - { - name: 'beta', - url: 'https://dosuken.example.com/beta.exe' - } - ] - } ->>>>>>> Support CURD operation for release asset links end it 'creates two assets with specified parameters' do @@ -402,7 +365,6 @@ describe API::Releases do .to match_array(%w[https://dosuken.example.com/alpha.exe https://dosuken.example.com/beta.exe]) end -<<<<<<< HEAD context 'when link names are duplicates' do let(:params) do @@ -422,8 +384,6 @@ describe API::Releases do expect(response).to have_gitlab_http_status(:bad_request) end end -======= ->>>>>>> Support CURD operation for release asset links end end end @@ -606,90 +566,6 @@ describe API::Releases do end end - context 'when links_attributes param is specified' do - context 'when the release does not have any link assets' do - let(:params) do - { links_attributes: [{ name: 'Beta release', - url: 'http://dosuken.com/win.exe' }] } - end - - it 'creates an asset' do - put api("/projects/#{project.id}/releases/v0.1", maintainer), - params: params - - expect(json_response['assets']['links'].count).to eq(1) - expect(json_response['assets']['links'].first['name']) - .to eq('Beta release') - expect(json_response['assets']['links'].first['url']) - .to eq('http://dosuken.com/win.exe') - end - - context 'when url is invalid' do - let(:params) do - { links_attributes: [{ name: 'Beta release', - url: 'SELECT 1 from ci_builds;' }] } - end - - it 'returns an error' do - put api("/projects/#{project.id}/releases/v0.1", maintainer), - params: params - - expect(json_response['message']['links.url'].first) - .to include('Only allowed protocols are http, https') - end - end - end - - context 'when the release has asset links' do - let!(:release_link_1) do - create(:release_link, - name: 'gcc', - url: 'http://dosuken.com/executable-gcc', - release: release, - created_at: 1.day.ago) - end - - let!(:release_link_2) do - create(:release_link, - name: 'llvm', - url: 'http://dosuken.com/executable-llvm', - release: release, - created_at: 2.days.ago) - end - - context 'when updates link names' do - let(:params) do - { links_attributes: [{ id: release_link_1.id, name: 'bin-gcc' }, - { id: release_link_2.id, name: 'bin-llvm' }] } - end - - it 'updates the asset' do - put api("/projects/#{project.id}/releases/v0.1", maintainer), - params: params - - expect(json_response['assets']['links'].first['name']) - .to eq('bin-gcc') - expect(json_response['assets']['links'].second['name']) - .to eq('bin-llvm') - end - end - - context 'when destroys an asset' do - let(:params) do - { links_attributes: [{ id: release_link_1.id, _destroy: '1' }] } - end - - it 'updates the asset' do - put api("/projects/#{project.id}/releases/v0.1", maintainer), - params: params - - expect(json_response['assets']['links'].count).to eq(1) - expect(json_response['assets']['links'].first['name']).to eq('llvm') - end - end - end - end - context 'when feature flag is disabled' do before do stub_feature_flags(releases_page: false) |