Merge branch '22818-licence-gitignore-and-yml-endpoints-removal' into 'master'
Remove deprecated templates endpoints in V4 Closes #22818 See merge request !8853
This commit is contained in:
commit
49e44d88b9
|
@ -11,7 +11,7 @@
|
||||||
licensePath: "/api/:version/templates/licenses/:key",
|
licensePath: "/api/:version/templates/licenses/:key",
|
||||||
gitignorePath: "/api/:version/templates/gitignores/:key",
|
gitignorePath: "/api/:version/templates/gitignores/:key",
|
||||||
gitlabCiYmlPath: "/api/:version/templates/gitlab_ci_ymls/:key",
|
gitlabCiYmlPath: "/api/:version/templates/gitlab_ci_ymls/:key",
|
||||||
dockerfilePath: "/api/:version/dockerfiles/:key",
|
dockerfilePath: "/api/:version/templates/dockerfiles/:key",
|
||||||
issuableTemplatePath: "/:namespace_path/:project_path/templates/:type/:key",
|
issuableTemplatePath: "/:namespace_path/:project_path/templates/:type/:key",
|
||||||
group: function(group_id, callback) {
|
group: function(group_id, callback) {
|
||||||
var url = Api.buildUrl(Api.groupPath)
|
var url = Api.buildUrl(Api.groupPath)
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
title: V3 deprecated templates endpoints removal
|
||||||
|
merge_request: 8853
|
||||||
|
author:
|
|
@ -13,3 +13,13 @@ changes are in V4:
|
||||||
- Project snippets do not return deprecated field `expires_at`
|
- Project snippets do not return deprecated field `expires_at`
|
||||||
- Endpoints under `projects/:id/keys` have been removed (use `projects/:id/deploy_keys`)
|
- Endpoints under `projects/:id/keys` have been removed (use `projects/:id/deploy_keys`)
|
||||||
- Status 409 returned for POST `project/:id/members` when a member already exists
|
- Status 409 returned for POST `project/:id/members` when a member already exists
|
||||||
|
- Removed the following deprecated Templates endpoints (these are still accessible with `/templates` prefix)
|
||||||
|
- `/licences`
|
||||||
|
- `/licences/:key`
|
||||||
|
- `/gitignores`
|
||||||
|
- `/gitlab_ci_ymls`
|
||||||
|
- `/dockerfiles`
|
||||||
|
- `/gitignores/:key`
|
||||||
|
- `/gitlab_ci_ymls/:key`
|
||||||
|
- `/dockerfiles/:key`
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ module API
|
||||||
mount ::API::V3::MergeRequests
|
mount ::API::V3::MergeRequests
|
||||||
mount ::API::V3::Projects
|
mount ::API::V3::Projects
|
||||||
mount ::API::V3::ProjectSnippets
|
mount ::API::V3::ProjectSnippets
|
||||||
|
mount ::API::V3::Templates
|
||||||
end
|
end
|
||||||
|
|
||||||
before { allow_access_with_scope :api }
|
before { allow_access_with_scope :api }
|
||||||
|
|
|
@ -24,7 +24,6 @@ module API
|
||||||
/[\<\{\[]
|
/[\<\{\[]
|
||||||
(fullname|name\sof\s(author|copyright\sowner))
|
(fullname|name\sof\s(author|copyright\sowner))
|
||||||
[\>\}\]]/xi.freeze
|
[\>\}\]]/xi.freeze
|
||||||
DEPRECATION_MESSAGE = ' This endpoint is deprecated and will be removed in GitLab 9.0.'.freeze
|
|
||||||
|
|
||||||
helpers do
|
helpers do
|
||||||
def parsed_license_template
|
def parsed_license_template
|
||||||
|
@ -46,74 +45,58 @@ module API
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
{ "licenses" => :deprecated, "templates/licenses" => :ok }.each do |route, status|
|
desc 'Get the list of the available license template' do
|
||||||
desc 'Get the list of the available license template' do
|
detail 'This feature was introduced in GitLab 8.7.'
|
||||||
detailed_desc = 'This feature was introduced in GitLab 8.7.'
|
success ::API::Entities::RepoLicense
|
||||||
detailed_desc << DEPRECATION_MESSAGE unless status == :ok
|
end
|
||||||
detail detailed_desc
|
params do
|
||||||
success Entities::RepoLicense
|
optional :popular, type: Boolean, desc: 'If passed, returns only popular licenses'
|
||||||
end
|
end
|
||||||
params do
|
get "templates/licenses" do
|
||||||
optional :popular, type: Boolean, desc: 'If passed, returns only popular licenses'
|
options = {
|
||||||
end
|
featured: declared(params).popular.present? ? true : nil
|
||||||
get route do
|
}
|
||||||
options = {
|
present Licensee::License.all(options), with: ::API::Entities::RepoLicense
|
||||||
featured: declared(params).popular.present? ? true : nil
|
|
||||||
}
|
|
||||||
present Licensee::License.all(options), with: Entities::RepoLicense
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
{ "licenses/:name" => :deprecated, "templates/licenses/:name" => :ok }.each do |route, status|
|
desc 'Get the text for a specific license' do
|
||||||
desc 'Get the text for a specific license' do
|
detail 'This feature was introduced in GitLab 8.7.'
|
||||||
detailed_desc = 'This feature was introduced in GitLab 8.7.'
|
success ::API::Entities::RepoLicense
|
||||||
detailed_desc << DEPRECATION_MESSAGE unless status == :ok
|
end
|
||||||
detail detailed_desc
|
params do
|
||||||
success Entities::RepoLicense
|
requires :name, type: String, desc: 'The name of the template'
|
||||||
end
|
end
|
||||||
params do
|
get "templates/licenses/:name", requirements: { name: /[\w\.-]+/ } do
|
||||||
requires :name, type: String, desc: 'The name of the template'
|
not_found!('License') unless Licensee::License.find(declared(params).name)
|
||||||
end
|
|
||||||
get route, requirements: { name: /[\w\.-]+/ } do
|
|
||||||
not_found!('License') unless Licensee::License.find(declared(params).name)
|
|
||||||
|
|
||||||
template = parsed_license_template
|
template = parsed_license_template
|
||||||
|
|
||||||
present template, with: Entities::RepoLicense
|
present template, with: ::API::Entities::RepoLicense
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
GLOBAL_TEMPLATE_TYPES.each do |template_type, properties|
|
GLOBAL_TEMPLATE_TYPES.each do |template_type, properties|
|
||||||
klass = properties[:klass]
|
klass = properties[:klass]
|
||||||
gitlab_version = properties[:gitlab_version]
|
gitlab_version = properties[:gitlab_version]
|
||||||
|
|
||||||
{ template_type => :deprecated, "templates/#{template_type}" => :ok }.each do |route, status|
|
desc 'Get the list of the available template' do
|
||||||
desc 'Get the list of the available template' do
|
detail "This feature was introduced in GitLab #{gitlab_version}."
|
||||||
detailed_desc = "This feature was introduced in GitLab #{gitlab_version}."
|
success Entities::TemplatesList
|
||||||
detailed_desc << DEPRECATION_MESSAGE unless status == :ok
|
end
|
||||||
detail detailed_desc
|
get "templates/#{template_type}" do
|
||||||
success Entities::TemplatesList
|
present klass.all, with: Entities::TemplatesList
|
||||||
end
|
|
||||||
get route do
|
|
||||||
present klass.all, with: Entities::TemplatesList
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
{ "#{template_type}/:name" => :deprecated, "templates/#{template_type}/:name" => :ok }.each do |route, status|
|
desc 'Get the text for a specific template present in local filesystem' do
|
||||||
desc 'Get the text for a specific template present in local filesystem' do
|
detail "This feature was introduced in GitLab #{gitlab_version}."
|
||||||
detailed_desc = "This feature was introduced in GitLab #{gitlab_version}."
|
success Entities::Template
|
||||||
detailed_desc << DEPRECATION_MESSAGE unless status == :ok
|
end
|
||||||
detail detailed_desc
|
params do
|
||||||
success Entities::Template
|
requires :name, type: String, desc: 'The name of the template'
|
||||||
end
|
end
|
||||||
params do
|
get "templates/#{template_type}/:name" do
|
||||||
requires :name, type: String, desc: 'The name of the template'
|
new_template = klass.find(declared(params).name)
|
||||||
end
|
|
||||||
get route do
|
|
||||||
new_template = klass.find(declared(params).name)
|
|
||||||
|
|
||||||
render_response(template_type, new_template)
|
render_response(template_type, new_template)
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,122 @@
|
||||||
|
module API
|
||||||
|
module V3
|
||||||
|
class Templates < Grape::API
|
||||||
|
GLOBAL_TEMPLATE_TYPES = {
|
||||||
|
gitignores: {
|
||||||
|
klass: Gitlab::Template::GitignoreTemplate,
|
||||||
|
gitlab_version: 8.8
|
||||||
|
},
|
||||||
|
gitlab_ci_ymls: {
|
||||||
|
klass: Gitlab::Template::GitlabCiYmlTemplate,
|
||||||
|
gitlab_version: 8.9
|
||||||
|
},
|
||||||
|
dockerfiles: {
|
||||||
|
klass: Gitlab::Template::DockerfileTemplate,
|
||||||
|
gitlab_version: 8.15
|
||||||
|
}
|
||||||
|
}.freeze
|
||||||
|
PROJECT_TEMPLATE_REGEX =
|
||||||
|
/[\<\{\[]
|
||||||
|
(project|description|
|
||||||
|
one\sline\s.+\swhat\sit\sdoes\.) # matching the start and end is enough here
|
||||||
|
[\>\}\]]/xi.freeze
|
||||||
|
YEAR_TEMPLATE_REGEX = /[<{\[](year|yyyy)[>}\]]/i.freeze
|
||||||
|
FULLNAME_TEMPLATE_REGEX =
|
||||||
|
/[\<\{\[]
|
||||||
|
(fullname|name\sof\s(author|copyright\sowner))
|
||||||
|
[\>\}\]]/xi.freeze
|
||||||
|
DEPRECATION_MESSAGE = ' This endpoint is deprecated and has been removed in V4.'.freeze
|
||||||
|
|
||||||
|
helpers do
|
||||||
|
def parsed_license_template
|
||||||
|
# We create a fresh Licensee::License object since we'll modify its
|
||||||
|
# content in place below.
|
||||||
|
template = Licensee::License.new(params[:name])
|
||||||
|
|
||||||
|
template.content.gsub!(YEAR_TEMPLATE_REGEX, Time.now.year.to_s)
|
||||||
|
template.content.gsub!(PROJECT_TEMPLATE_REGEX, params[:project]) if params[:project].present?
|
||||||
|
|
||||||
|
fullname = params[:fullname].presence || current_user.try(:name)
|
||||||
|
template.content.gsub!(FULLNAME_TEMPLATE_REGEX, fullname) if fullname
|
||||||
|
template
|
||||||
|
end
|
||||||
|
|
||||||
|
def render_response(template_type, template)
|
||||||
|
not_found!(template_type.to_s.singularize) unless template
|
||||||
|
present template, with: ::API::Entities::Template
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
{ "licenses" => :deprecated, "templates/licenses" => :ok }.each do |route, status|
|
||||||
|
desc 'Get the list of the available license template' do
|
||||||
|
detailed_desc = 'This feature was introduced in GitLab 8.7.'
|
||||||
|
detailed_desc << DEPRECATION_MESSAGE unless status == :ok
|
||||||
|
detail detailed_desc
|
||||||
|
success ::API::Entities::RepoLicense
|
||||||
|
end
|
||||||
|
params do
|
||||||
|
optional :popular, type: Boolean, desc: 'If passed, returns only popular licenses'
|
||||||
|
end
|
||||||
|
get route do
|
||||||
|
options = {
|
||||||
|
featured: declared(params).popular.present? ? true : nil
|
||||||
|
}
|
||||||
|
present Licensee::License.all(options), with: ::API::Entities::RepoLicense
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
{ "licenses/:name" => :deprecated, "templates/licenses/:name" => :ok }.each do |route, status|
|
||||||
|
desc 'Get the text for a specific license' do
|
||||||
|
detailed_desc = 'This feature was introduced in GitLab 8.7.'
|
||||||
|
detailed_desc << DEPRECATION_MESSAGE unless status == :ok
|
||||||
|
detail detailed_desc
|
||||||
|
success ::API::Entities::RepoLicense
|
||||||
|
end
|
||||||
|
params do
|
||||||
|
requires :name, type: String, desc: 'The name of the template'
|
||||||
|
end
|
||||||
|
get route, requirements: { name: /[\w\.-]+/ } do
|
||||||
|
not_found!('License') unless Licensee::License.find(declared(params).name)
|
||||||
|
|
||||||
|
template = parsed_license_template
|
||||||
|
|
||||||
|
present template, with: ::API::Entities::RepoLicense
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
GLOBAL_TEMPLATE_TYPES.each do |template_type, properties|
|
||||||
|
klass = properties[:klass]
|
||||||
|
gitlab_version = properties[:gitlab_version]
|
||||||
|
|
||||||
|
{ template_type => :deprecated, "templates/#{template_type}" => :ok }.each do |route, status|
|
||||||
|
desc 'Get the list of the available template' do
|
||||||
|
detailed_desc = "This feature was introduced in GitLab #{gitlab_version}."
|
||||||
|
detailed_desc << DEPRECATION_MESSAGE unless status == :ok
|
||||||
|
detail detailed_desc
|
||||||
|
success ::API::Entities::TemplatesList
|
||||||
|
end
|
||||||
|
get route do
|
||||||
|
present klass.all, with: ::API::Entities::TemplatesList
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
{ "#{template_type}/:name" => :deprecated, "templates/#{template_type}/:name" => :ok }.each do |route, status|
|
||||||
|
desc 'Get the text for a specific template present in local filesystem' do
|
||||||
|
detailed_desc = "This feature was introduced in GitLab #{gitlab_version}."
|
||||||
|
detailed_desc << DEPRECATION_MESSAGE unless status == :ok
|
||||||
|
detail detailed_desc
|
||||||
|
success ::API::Entities::Template
|
||||||
|
end
|
||||||
|
params do
|
||||||
|
requires :name, type: String, desc: 'The name of the template'
|
||||||
|
end
|
||||||
|
get route do
|
||||||
|
new_template = klass.find(declared(params).name)
|
||||||
|
|
||||||
|
render_response(template_type, new_template)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -3,23 +3,23 @@ require 'spec_helper'
|
||||||
describe API::Templates, api: true do
|
describe API::Templates, api: true do
|
||||||
include ApiHelpers
|
include ApiHelpers
|
||||||
|
|
||||||
shared_examples_for 'the Template Entity' do |path|
|
context 'the Template Entity' do
|
||||||
before { get api(path) }
|
before { get api('/templates/gitignores/Ruby') }
|
||||||
|
|
||||||
it { expect(json_response['name']).to eq('Ruby') }
|
it { expect(json_response['name']).to eq('Ruby') }
|
||||||
it { expect(json_response['content']).to include('*.gem') }
|
it { expect(json_response['content']).to include('*.gem') }
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for 'the TemplateList Entity' do |path|
|
context 'the TemplateList Entity' do
|
||||||
before { get api(path) }
|
before { get api('/templates/gitignores') }
|
||||||
|
|
||||||
it { expect(json_response.first['name']).not_to be_nil }
|
it { expect(json_response.first['name']).not_to be_nil }
|
||||||
it { expect(json_response.first['content']).to be_nil }
|
it { expect(json_response.first['content']).to be_nil }
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for 'requesting gitignores' do |path|
|
context 'requesting gitignores' do
|
||||||
it 'returns a list of available gitignore templates' do
|
it 'returns a list of available gitignore templates' do
|
||||||
get api(path)
|
get api('/templates/gitignores')
|
||||||
|
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
expect(json_response).to be_an Array
|
expect(json_response).to be_an Array
|
||||||
|
@ -27,9 +27,9 @@ describe API::Templates, api: true do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for 'requesting gitlab-ci-ymls' do |path|
|
context 'requesting gitlab-ci-ymls' do
|
||||||
it 'returns a list of available gitlab_ci_ymls' do
|
it 'returns a list of available gitlab_ci_ymls' do
|
||||||
get api(path)
|
get api('/templates/gitlab_ci_ymls')
|
||||||
|
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
expect(json_response).to be_an Array
|
expect(json_response).to be_an Array
|
||||||
|
@ -37,17 +37,17 @@ describe API::Templates, api: true do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for 'requesting gitlab-ci-yml for Ruby' do |path|
|
context 'requesting gitlab-ci-yml for Ruby' do
|
||||||
it 'adds a disclaimer on the top' do
|
it 'adds a disclaimer on the top' do
|
||||||
get api(path)
|
get api('/templates/gitlab_ci_ymls/Ruby')
|
||||||
|
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
expect(json_response['content']).to start_with("# This file is a template,")
|
expect(json_response['content']).to start_with("# This file is a template,")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for 'the License Template Entity' do |path|
|
context 'the License Template Entity' do
|
||||||
before { get api(path) }
|
before { get api('/templates/licenses/mit') }
|
||||||
|
|
||||||
it 'returns a license template' do
|
it 'returns a license template' do
|
||||||
expect(json_response['key']).to eq('mit')
|
expect(json_response['key']).to eq('mit')
|
||||||
|
@ -64,9 +64,9 @@ describe API::Templates, api: true do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for 'GET licenses' do |path|
|
context 'GET templates/licenses' do
|
||||||
it 'returns a list of available license templates' do
|
it 'returns a list of available license templates' do
|
||||||
get api(path)
|
get api('/templates/licenses')
|
||||||
|
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
expect(json_response).to be_an Array
|
expect(json_response).to be_an Array
|
||||||
|
@ -77,7 +77,7 @@ describe API::Templates, api: true do
|
||||||
describe 'the popular parameter' do
|
describe 'the popular parameter' do
|
||||||
context 'with popular=1' do
|
context 'with popular=1' do
|
||||||
it 'returns a list of available popular license templates' do
|
it 'returns a list of available popular license templates' do
|
||||||
get api("#{path}?popular=1")
|
get api('/templates/licenses?popular=1')
|
||||||
|
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
expect(json_response).to be_an Array
|
expect(json_response).to be_an Array
|
||||||
|
@ -88,10 +88,10 @@ describe API::Templates, api: true do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for 'GET licenses/:name' do |path|
|
context 'GET templates/licenses/:name' do
|
||||||
context 'with :project and :fullname given' do
|
context 'with :project and :fullname given' do
|
||||||
before do
|
before do
|
||||||
get api("#{path}/#{license_type}?project=My+Awesome+Project&fullname=Anton+#{license_type.upcase}")
|
get api("/templates/licenses/#{license_type}?project=My+Awesome+Project&fullname=Anton+#{license_type.upcase}")
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'for the mit license' do
|
context 'for the mit license' do
|
||||||
|
@ -178,26 +178,4 @@ describe API::Templates, api: true do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'with /templates namespace' do
|
|
||||||
it_behaves_like 'the Template Entity', '/templates/gitignores/Ruby'
|
|
||||||
it_behaves_like 'the TemplateList Entity', '/templates/gitignores'
|
|
||||||
it_behaves_like 'requesting gitignores', '/templates/gitignores'
|
|
||||||
it_behaves_like 'requesting gitlab-ci-ymls', '/templates/gitlab_ci_ymls'
|
|
||||||
it_behaves_like 'requesting gitlab-ci-yml for Ruby', '/templates/gitlab_ci_ymls/Ruby'
|
|
||||||
it_behaves_like 'the License Template Entity', '/templates/licenses/mit'
|
|
||||||
it_behaves_like 'GET licenses', '/templates/licenses'
|
|
||||||
it_behaves_like 'GET licenses/:name', '/templates/licenses'
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'without /templates namespace' do
|
|
||||||
it_behaves_like 'the Template Entity', '/gitignores/Ruby'
|
|
||||||
it_behaves_like 'the TemplateList Entity', '/gitignores'
|
|
||||||
it_behaves_like 'requesting gitignores', '/gitignores'
|
|
||||||
it_behaves_like 'requesting gitlab-ci-ymls', '/gitlab_ci_ymls'
|
|
||||||
it_behaves_like 'requesting gitlab-ci-yml for Ruby', '/gitlab_ci_ymls/Ruby'
|
|
||||||
it_behaves_like 'the License Template Entity', '/licenses/mit'
|
|
||||||
it_behaves_like 'GET licenses', '/licenses'
|
|
||||||
it_behaves_like 'GET licenses/:name', '/licenses'
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,203 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe API::V3::Templates, api: true do
|
||||||
|
include ApiHelpers
|
||||||
|
|
||||||
|
shared_examples_for 'the Template Entity' do |path|
|
||||||
|
before { get v3_api(path) }
|
||||||
|
|
||||||
|
it { expect(json_response['name']).to eq('Ruby') }
|
||||||
|
it { expect(json_response['content']).to include('*.gem') }
|
||||||
|
end
|
||||||
|
|
||||||
|
shared_examples_for 'the TemplateList Entity' do |path|
|
||||||
|
before { get v3_api(path) }
|
||||||
|
|
||||||
|
it { expect(json_response.first['name']).not_to be_nil }
|
||||||
|
it { expect(json_response.first['content']).to be_nil }
|
||||||
|
end
|
||||||
|
|
||||||
|
shared_examples_for 'requesting gitignores' do |path|
|
||||||
|
it 'returns a list of available gitignore templates' do
|
||||||
|
get v3_api(path)
|
||||||
|
|
||||||
|
expect(response).to have_http_status(200)
|
||||||
|
expect(json_response).to be_an Array
|
||||||
|
expect(json_response.size).to be > 15
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
shared_examples_for 'requesting gitlab-ci-ymls' do |path|
|
||||||
|
it 'returns a list of available gitlab_ci_ymls' do
|
||||||
|
get v3_api(path)
|
||||||
|
|
||||||
|
expect(response).to have_http_status(200)
|
||||||
|
expect(json_response).to be_an Array
|
||||||
|
expect(json_response.first['name']).not_to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
shared_examples_for 'requesting gitlab-ci-yml for Ruby' do |path|
|
||||||
|
it 'adds a disclaimer on the top' do
|
||||||
|
get v3_api(path)
|
||||||
|
|
||||||
|
expect(response).to have_http_status(200)
|
||||||
|
expect(json_response['content']).to start_with("# This file is a template,")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
shared_examples_for 'the License Template Entity' do |path|
|
||||||
|
before { get v3_api(path) }
|
||||||
|
|
||||||
|
it 'returns a license template' do
|
||||||
|
expect(json_response['key']).to eq('mit')
|
||||||
|
expect(json_response['name']).to eq('MIT License')
|
||||||
|
expect(json_response['nickname']).to be_nil
|
||||||
|
expect(json_response['popular']).to be true
|
||||||
|
expect(json_response['html_url']).to eq('http://choosealicense.com/licenses/mit/')
|
||||||
|
expect(json_response['source_url']).to eq('https://opensource.org/licenses/MIT')
|
||||||
|
expect(json_response['description']).to include('A permissive license that is short and to the point.')
|
||||||
|
expect(json_response['conditions']).to eq(%w[include-copyright])
|
||||||
|
expect(json_response['permissions']).to eq(%w[commercial-use modifications distribution private-use])
|
||||||
|
expect(json_response['limitations']).to eq(%w[no-liability])
|
||||||
|
expect(json_response['content']).to include('The MIT License (MIT)')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
shared_examples_for 'GET licenses' do |path|
|
||||||
|
it 'returns a list of available license templates' do
|
||||||
|
get v3_api(path)
|
||||||
|
|
||||||
|
expect(response).to have_http_status(200)
|
||||||
|
expect(json_response).to be_an Array
|
||||||
|
expect(json_response.size).to eq(15)
|
||||||
|
expect(json_response.map { |l| l['key'] }).to include('agpl-3.0')
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'the popular parameter' do
|
||||||
|
context 'with popular=1' do
|
||||||
|
it 'returns a list of available popular license templates' do
|
||||||
|
get v3_api("#{path}?popular=1")
|
||||||
|
|
||||||
|
expect(response).to have_http_status(200)
|
||||||
|
expect(json_response).to be_an Array
|
||||||
|
expect(json_response.size).to eq(3)
|
||||||
|
expect(json_response.map { |l| l['key'] }).to include('apache-2.0')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
shared_examples_for 'GET licenses/:name' do |path|
|
||||||
|
context 'with :project and :fullname given' do
|
||||||
|
before do
|
||||||
|
get v3_api("#{path}/#{license_type}?project=My+Awesome+Project&fullname=Anton+#{license_type.upcase}")
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'for the mit license' do
|
||||||
|
let(:license_type) { 'mit' }
|
||||||
|
|
||||||
|
it 'returns the license text' do
|
||||||
|
expect(json_response['content']).to include('The MIT License (MIT)')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'replaces placeholder values' do
|
||||||
|
expect(json_response['content']).to include("Copyright (c) #{Time.now.year} Anton")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'for the agpl-3.0 license' do
|
||||||
|
let(:license_type) { 'agpl-3.0' }
|
||||||
|
|
||||||
|
it 'returns the license text' do
|
||||||
|
expect(json_response['content']).to include('GNU AFFERO GENERAL PUBLIC LICENSE')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'replaces placeholder values' do
|
||||||
|
expect(json_response['content']).to include('My Awesome Project')
|
||||||
|
expect(json_response['content']).to include("Copyright (C) #{Time.now.year} Anton")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'for the gpl-3.0 license' do
|
||||||
|
let(:license_type) { 'gpl-3.0' }
|
||||||
|
|
||||||
|
it 'returns the license text' do
|
||||||
|
expect(json_response['content']).to include('GNU GENERAL PUBLIC LICENSE')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'replaces placeholder values' do
|
||||||
|
expect(json_response['content']).to include('My Awesome Project')
|
||||||
|
expect(json_response['content']).to include("Copyright (C) #{Time.now.year} Anton")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'for the gpl-2.0 license' do
|
||||||
|
let(:license_type) { 'gpl-2.0' }
|
||||||
|
|
||||||
|
it 'returns the license text' do
|
||||||
|
expect(json_response['content']).to include('GNU GENERAL PUBLIC LICENSE')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'replaces placeholder values' do
|
||||||
|
expect(json_response['content']).to include('My Awesome Project')
|
||||||
|
expect(json_response['content']).to include("Copyright (C) #{Time.now.year} Anton")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'for the apache-2.0 license' do
|
||||||
|
let(:license_type) { 'apache-2.0' }
|
||||||
|
|
||||||
|
it 'returns the license text' do
|
||||||
|
expect(json_response['content']).to include('Apache License')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'replaces placeholder values' do
|
||||||
|
expect(json_response['content']).to include("Copyright #{Time.now.year} Anton")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'for an uknown license' do
|
||||||
|
let(:license_type) { 'muth-over9000' }
|
||||||
|
|
||||||
|
it 'returns a 404' do
|
||||||
|
expect(response).to have_http_status(404)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with no :fullname given' do
|
||||||
|
context 'with an authenticated user' do
|
||||||
|
let(:user) { create(:user) }
|
||||||
|
|
||||||
|
it 'replaces the copyright owner placeholder with the name of the current user' do
|
||||||
|
get v3_api('/templates/licenses/mit', user)
|
||||||
|
|
||||||
|
expect(json_response['content']).to include("Copyright (c) #{Time.now.year} #{user.name}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'with /templates namespace' do
|
||||||
|
it_behaves_like 'the Template Entity', '/templates/gitignores/Ruby'
|
||||||
|
it_behaves_like 'the TemplateList Entity', '/templates/gitignores'
|
||||||
|
it_behaves_like 'requesting gitignores', '/templates/gitignores'
|
||||||
|
it_behaves_like 'requesting gitlab-ci-ymls', '/templates/gitlab_ci_ymls'
|
||||||
|
it_behaves_like 'requesting gitlab-ci-yml for Ruby', '/templates/gitlab_ci_ymls/Ruby'
|
||||||
|
it_behaves_like 'the License Template Entity', '/templates/licenses/mit'
|
||||||
|
it_behaves_like 'GET licenses', '/templates/licenses'
|
||||||
|
it_behaves_like 'GET licenses/:name', '/templates/licenses'
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'without /templates namespace' do
|
||||||
|
it_behaves_like 'the Template Entity', '/gitignores/Ruby'
|
||||||
|
it_behaves_like 'the TemplateList Entity', '/gitignores'
|
||||||
|
it_behaves_like 'requesting gitignores', '/gitignores'
|
||||||
|
it_behaves_like 'requesting gitlab-ci-ymls', '/gitlab_ci_ymls'
|
||||||
|
it_behaves_like 'requesting gitlab-ci-yml for Ruby', '/gitlab_ci_ymls/Ruby'
|
||||||
|
it_behaves_like 'the License Template Entity', '/licenses/mit'
|
||||||
|
it_behaves_like 'GET licenses', '/licenses'
|
||||||
|
it_behaves_like 'GET licenses/:name', '/licenses'
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue