Merge branch 'ci_closer_integration' into 'master'
Remove API calls CE->CI See merge request !1307
This commit is contained in:
commit
dfa32123e3
22 changed files with 30 additions and 296 deletions
|
@ -55,6 +55,7 @@ v 8.0.0 (unreleased)
|
||||||
- Webhook for issue now contains repository field (Jungkook Park)
|
- Webhook for issue now contains repository field (Jungkook Park)
|
||||||
- Add ability to add custom text to the help page (Jeroen van Baarsen)
|
- Add ability to add custom text to the help page (Jeroen van Baarsen)
|
||||||
- Add pg_schema to backup config
|
- Add pg_schema to backup config
|
||||||
|
- Removed API calls from CE to CI
|
||||||
|
|
||||||
v 7.14.3
|
v 7.14.3
|
||||||
- No changes
|
- No changes
|
||||||
|
|
|
@ -55,7 +55,7 @@ module Ci
|
||||||
return redirect_to ci_root_path, alert: 'You have to have at least master role to enable CI for this project'
|
return redirect_to ci_root_path, alert: 'You have to have at least master role to enable CI for this project'
|
||||||
end
|
end
|
||||||
|
|
||||||
@project = Ci::CreateProjectService.new.execute(current_user, project_data, ci_project_url(":project_id"))
|
@project = Ci::CreateProjectService.new.execute(current_user, project_data)
|
||||||
|
|
||||||
if @project.persisted?
|
if @project.persisted?
|
||||||
redirect_to ci_project_path(@project, show_guide: true), notice: 'Project was successfully created.'
|
redirect_to ci_project_path(@project, show_guide: true), notice: 'Project was successfully created.'
|
||||||
|
@ -86,16 +86,6 @@ module Ci
|
||||||
redirect_to ci_projects_url
|
redirect_to ci_projects_url
|
||||||
end
|
end
|
||||||
|
|
||||||
def build
|
|
||||||
@commit = Ci::CreateCommitService.new.execute(@project, params.dup)
|
|
||||||
|
|
||||||
if @commit && @commit.valid?
|
|
||||||
head 201
|
|
||||||
else
|
|
||||||
head 400
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Project status badge
|
# Project status badge
|
||||||
# Image with build status for sha or ref
|
# Image with build status for sha or ref
|
||||||
def badge
|
def badge
|
||||||
|
|
|
@ -92,21 +92,6 @@ module Ci
|
||||||
project
|
project
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO: remove
|
|
||||||
def from_gitlab(user, scope = :owned, options)
|
|
||||||
opts = user.authenticate_options
|
|
||||||
opts.merge! options
|
|
||||||
|
|
||||||
raise 'Implement me of fix'
|
|
||||||
#projects = Ci::Network.new.projects(opts.compact, scope)
|
|
||||||
|
|
||||||
if projects
|
|
||||||
projects.map { |pr| OpenStruct.new(pr) }
|
|
||||||
else
|
|
||||||
[]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def already_added?(project)
|
def already_added?(project)
|
||||||
where(gitlab_id: project.id).any?
|
where(gitlab_id: project.id).any?
|
||||||
end
|
end
|
||||||
|
|
|
@ -19,22 +19,12 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
class GitlabCiService < CiService
|
class GitlabCiService < CiService
|
||||||
API_PREFIX = "api/v1"
|
prop_accessor :token
|
||||||
|
|
||||||
prop_accessor :project_url, :token, :enable_ssl_verification
|
|
||||||
validates :project_url,
|
|
||||||
presence: true,
|
|
||||||
format: { with: /\A#{URI.regexp(%w(http https))}\z/, message: "should be a valid url" }, if: :activated?
|
|
||||||
validates :token,
|
|
||||||
presence: true,
|
|
||||||
format: { with: /\A([A-Za-z0-9]+)\z/ }, if: :activated?
|
|
||||||
|
|
||||||
after_save :compose_service_hook, if: :activated?
|
after_save :compose_service_hook, if: :activated?
|
||||||
|
|
||||||
def compose_service_hook
|
def compose_service_hook
|
||||||
hook = service_hook || build_service_hook
|
hook = service_hook || build_service_hook
|
||||||
hook.url = [project_url, "/build", "?token=#{token}"].join("")
|
|
||||||
hook.enable_ssl_verification = enable_ssl_verification
|
|
||||||
hook.save
|
hook.save
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -55,7 +45,8 @@ class GitlabCiService < CiService
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
service_hook.execute(data)
|
ci_project = Ci::Project.find_by(gitlab_id: project.id)
|
||||||
|
Ci::CreateCommitService.new.execute(ci_project, data)
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_ci_commit(sha, ref)
|
def get_ci_commit(sha, ref)
|
||||||
|
@ -68,24 +59,22 @@ class GitlabCiService < CiService
|
||||||
:error
|
:error
|
||||||
end
|
end
|
||||||
|
|
||||||
def fork_registration(new_project, private_token)
|
def fork_registration(new_project, current_user)
|
||||||
params = {
|
params = OpenStruct.new({
|
||||||
id: new_project.id,
|
id: new_project.id,
|
||||||
name_with_namespace: new_project.name_with_namespace,
|
name_with_namespace: new_project.name_with_namespace,
|
||||||
path_with_namespace: new_project.path_with_namespace,
|
path_with_namespace: new_project.path_with_namespace,
|
||||||
web_url: new_project.web_url,
|
web_url: new_project.web_url,
|
||||||
default_branch: new_project.default_branch,
|
default_branch: new_project.default_branch,
|
||||||
ssh_url_to_repo: new_project.ssh_url_to_repo
|
ssh_url_to_repo: new_project.ssh_url_to_repo
|
||||||
}
|
})
|
||||||
|
|
||||||
HTTParty.post(
|
ci_project = Ci::Project.find_by!(gitlab_id: project.id)
|
||||||
fork_registration_path,
|
|
||||||
body: {
|
Ci::CreateProjectService.new.execute(
|
||||||
project_id: project.id,
|
current_user,
|
||||||
project_token: token,
|
params,
|
||||||
private_token: private_token,
|
ci_project
|
||||||
data: params },
|
|
||||||
verify: false
|
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -112,11 +101,7 @@ class GitlabCiService < CiService
|
||||||
end
|
end
|
||||||
|
|
||||||
def fields
|
def fields
|
||||||
[
|
[]
|
||||||
{ type: 'text', name: 'token', placeholder: 'GitLab CI project specific token' },
|
|
||||||
{ type: 'text', name: 'project_url', placeholder: 'http://ci.gitlabhq.com/projects/3' },
|
|
||||||
{ type: 'checkbox', name: 'enable_ssl_verification', title: "Enable SSL verification" }
|
|
||||||
]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -125,10 +110,6 @@ class GitlabCiService < CiService
|
||||||
repository.blob_at(sha, '.gitlab-ci.yml')
|
repository.blob_at(sha, '.gitlab-ci.yml')
|
||||||
end
|
end
|
||||||
|
|
||||||
def fork_registration_path
|
|
||||||
project_url.sub(/projects\/\d*/, "#{API_PREFIX}/forks")
|
|
||||||
end
|
|
||||||
|
|
||||||
def repository
|
def repository
|
||||||
project.repository
|
project.repository
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,20 +2,15 @@ module Ci
|
||||||
class CreateProjectService
|
class CreateProjectService
|
||||||
include Gitlab::Application.routes.url_helpers
|
include Gitlab::Application.routes.url_helpers
|
||||||
|
|
||||||
def execute(current_user, params, project_route, forked_project = nil)
|
def execute(current_user, params, forked_project = nil)
|
||||||
@project = Ci::Project.parse(params)
|
@project = Ci::Project.parse(params)
|
||||||
|
|
||||||
Ci::Project.transaction do
|
Ci::Project.transaction do
|
||||||
@project.save!
|
@project.save!
|
||||||
|
|
||||||
data = {
|
|
||||||
token: @project.token,
|
|
||||||
project_url: project_route.gsub(":project_id", @project.id.to_s),
|
|
||||||
}
|
|
||||||
|
|
||||||
gl_project = ::Project.find(@project.gitlab_id)
|
gl_project = ::Project.find(@project.gitlab_id)
|
||||||
gl_project.build_missing_services
|
gl_project.build_missing_services
|
||||||
gl_project.gitlab_ci_service.update_attributes(data.merge(active: true))
|
gl_project.gitlab_ci_service.update_attributes(active: true, token: @project.token)
|
||||||
end
|
end
|
||||||
|
|
||||||
if forked_project
|
if forked_project
|
||||||
|
|
|
@ -18,7 +18,7 @@ module Projects
|
||||||
|
|
||||||
if new_project.persisted?
|
if new_project.persisted?
|
||||||
if @project.gitlab_ci?
|
if @project.gitlab_ci?
|
||||||
ForkRegistrationWorker.perform_async(@project.id, new_project.id, @current_user.private_token)
|
@project.gitlab_ci_service.fork_registration(new_project, @current_user)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
class ForkRegistrationWorker
|
|
||||||
include Sidekiq::Worker
|
|
||||||
|
|
||||||
sidekiq_options queue: :default
|
|
||||||
|
|
||||||
def perform(from_project_id, to_project_id, private_token)
|
|
||||||
from_project = Project.find(from_project_id)
|
|
||||||
to_project = Project.find(to_project_id)
|
|
||||||
|
|
||||||
from_project.gitlab_ci_service.fork_registration(to_project, private_token)
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -18,7 +18,6 @@ Gitlab::Application.routes.draw do
|
||||||
member do
|
member do
|
||||||
get :status, to: 'projects#badge'
|
get :status, to: 'projects#badge'
|
||||||
get :integration
|
get :integration
|
||||||
post :build
|
|
||||||
post :toggle_shared_runners
|
post :toggle_shared_runners
|
||||||
get :dumped_yaml
|
get :dumped_yaml
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
- [Runners](runners.md)
|
- [Runners](runners.md)
|
||||||
- [Commits](commits.md)
|
- [Commits](commits.md)
|
||||||
- [Builds](builds.md)
|
- [Builds](builds.md)
|
||||||
- [Forks](forks.md)
|
|
||||||
|
|
||||||
|
|
||||||
## Authentication
|
## Authentication
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Forks API
|
|
||||||
|
|
||||||
This API is intended to aid in the setup and configuration of
|
|
||||||
forked projects on Gitlab CI.
|
|
||||||
|
|
||||||
__Authentication is done by GitLab user token & GitLab project token__
|
|
||||||
|
|
||||||
## Forks
|
|
||||||
|
|
||||||
### Create fork for project
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
```
|
|
||||||
POST /ci/forks
|
|
||||||
```
|
|
||||||
|
|
||||||
Parameters:
|
|
||||||
|
|
||||||
project_id (required) - The ID of a project
|
|
||||||
project_token (requires) - Project token
|
|
||||||
private_token(required) - User private token
|
|
||||||
data (required) - GitLab project data (name_with_namespace, web_url, default_branch, ssh_url_to_repo)
|
|
|
@ -26,13 +26,11 @@ class Spinach::Features::ProjectServices < Spinach::FeatureSteps
|
||||||
|
|
||||||
step 'I fill gitlab-ci settings' do
|
step 'I fill gitlab-ci settings' do
|
||||||
check 'Active'
|
check 'Active'
|
||||||
fill_in 'Project url', with: 'http://ci.gitlab.org/projects/3'
|
|
||||||
fill_in 'Token', with: 'verySecret'
|
|
||||||
click_button 'Save'
|
click_button 'Save'
|
||||||
end
|
end
|
||||||
|
|
||||||
step 'I should see service settings saved' do
|
step 'I should see service settings saved' do
|
||||||
expect(find_field('Project url').value).to eq 'http://ci.gitlab.org/projects/3'
|
expect(find_field('Active').value).to eq '1'
|
||||||
end
|
end
|
||||||
|
|
||||||
step 'I click hipchat service link' do
|
step 'I click hipchat service link' do
|
||||||
|
|
|
@ -36,7 +36,6 @@ module Ci
|
||||||
mount Commits
|
mount Commits
|
||||||
mount Runners
|
mount Runners
|
||||||
mount Projects
|
mount Projects
|
||||||
mount Forks
|
|
||||||
mount Triggers
|
mount Triggers
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
module Ci
|
|
||||||
module API
|
|
||||||
class Forks < Grape::API
|
|
||||||
resource :forks do
|
|
||||||
# Create a fork
|
|
||||||
#
|
|
||||||
# Parameters:
|
|
||||||
# project_id (required) - The ID of a project
|
|
||||||
# project_token (requires) - Project token
|
|
||||||
# private_token(required) - User private token
|
|
||||||
# data (required) - GitLab project data (name_with_namespace, web_url, default_branch, ssh_url_to_repo)
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# Example Request:
|
|
||||||
# POST /forks
|
|
||||||
post do
|
|
||||||
required_attributes! [:project_id, :data, :project_token, :private_token]
|
|
||||||
project = Ci::Project.find_by!(gitlab_id: params[:project_id])
|
|
||||||
authenticate_project_token!(project)
|
|
||||||
|
|
||||||
fork = Ci::CreateProjectService.new.execute(
|
|
||||||
current_user,
|
|
||||||
params[:data],
|
|
||||||
Ci::RoutesHelper.ci_project_url(":project_id"),
|
|
||||||
project
|
|
||||||
)
|
|
||||||
|
|
||||||
if fork
|
|
||||||
present fork, with: Entities::Project
|
|
||||||
else
|
|
||||||
not_found!
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -5,49 +5,6 @@ describe Ci::ProjectsController do
|
||||||
@project = FactoryGirl.create :ci_project
|
@project = FactoryGirl.create :ci_project
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "POST #build" do
|
|
||||||
it 'should respond 200 if params is ok' do
|
|
||||||
post :build, {
|
|
||||||
id: @project.id,
|
|
||||||
ref: 'master',
|
|
||||||
before: '2aa371379db71ac89ae20843fcff3b3477cf1a1d',
|
|
||||||
after: '1c8a9df454ef68c22c2a33cca8232bb50849e5c5',
|
|
||||||
token: @project.token,
|
|
||||||
ci_yaml_file: gitlab_ci_yaml,
|
|
||||||
commits: [ { message: "Message" } ]
|
|
||||||
}
|
|
||||||
|
|
||||||
expect(response).to be_success
|
|
||||||
expect(response.code).to eq('201')
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'should respond 400 if push about removed branch' do
|
|
||||||
post :build, {
|
|
||||||
id: @project.id,
|
|
||||||
ref: 'master',
|
|
||||||
before: '2aa371379db71ac89ae20843fcff3b3477cf1a1d',
|
|
||||||
after: '0000000000000000000000000000000000000000',
|
|
||||||
token: @project.token,
|
|
||||||
ci_yaml_file: gitlab_ci_yaml
|
|
||||||
}
|
|
||||||
|
|
||||||
expect(response).not_to be_success
|
|
||||||
expect(response.code).to eq('400')
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'should respond 400 if some params missed' do
|
|
||||||
post :build, id: @project.id, token: @project.token, ci_yaml_file: gitlab_ci_yaml
|
|
||||||
expect(response).not_to be_success
|
|
||||||
expect(response.code).to eq('400')
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'should respond 403 if token is wrong' do
|
|
||||||
post :build, id: @project.id, token: 'invalid-token'
|
|
||||||
expect(response).not_to be_success
|
|
||||||
expect(response.code).to eq('403')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe "POST /projects" do
|
describe "POST /projects" do
|
||||||
let(:project_dump) { OpenStruct.new({ id: @project.gitlab_id }) }
|
let(:project_dump) { OpenStruct.new({ id: @project.gitlab_id }) }
|
||||||
|
|
||||||
|
|
|
@ -180,7 +180,6 @@ describe Grack::Auth do
|
||||||
gitlab_ci_service = project.build_gitlab_ci_service
|
gitlab_ci_service = project.build_gitlab_ci_service
|
||||||
gitlab_ci_service.active = true
|
gitlab_ci_service.active = true
|
||||||
gitlab_ci_service.token = token
|
gitlab_ci_service.token = token
|
||||||
gitlab_ci_service.project_url = "http://google.com"
|
|
||||||
gitlab_ci_service.save
|
gitlab_ci_service.save
|
||||||
|
|
||||||
env["HTTP_AUTHORIZATION"] = ActionController::HttpAuthentication::Basic.encode_credentials("gitlab-ci-token", token)
|
env["HTTP_AUTHORIZATION"] = ActionController::HttpAuthentication::Basic.encode_credentials("gitlab-ci-token", token)
|
||||||
|
|
|
@ -26,33 +26,6 @@ describe GitlabCiService do
|
||||||
it { is_expected.to have_one(:service_hook) }
|
it { is_expected.to have_one(:service_hook) }
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'validations' do
|
|
||||||
context 'active' do
|
|
||||||
before { allow(subject).to receive(:activated?).and_return(true) }
|
|
||||||
|
|
||||||
it { is_expected.to validate_presence_of(:token) }
|
|
||||||
it { is_expected.to validate_presence_of(:project_url) }
|
|
||||||
it { is_expected.to allow_value('ewf9843kdnfdfs89234n').for(:token) }
|
|
||||||
it { is_expected.to allow_value('http://ci.example.com/project/1').for(:project_url) }
|
|
||||||
it { is_expected.not_to allow_value('token with spaces').for(:token) }
|
|
||||||
it { is_expected.not_to allow_value('token/with%spaces').for(:token) }
|
|
||||||
it { is_expected.not_to allow_value('this is not url').for(:project_url) }
|
|
||||||
it { is_expected.not_to allow_value('http//noturl').for(:project_url) }
|
|
||||||
it { is_expected.not_to allow_value('ftp://ci.example.com/projects/3').for(:project_url) }
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'inactive' do
|
|
||||||
before { allow(subject).to receive(:activated?).and_return(false) }
|
|
||||||
|
|
||||||
it { is_expected.not_to validate_presence_of(:token) }
|
|
||||||
it { is_expected.not_to validate_presence_of(:project_url) }
|
|
||||||
it { is_expected.to allow_value('ewf9843kdnfdfs89234n').for(:token) }
|
|
||||||
it { is_expected.to allow_value('http://ci.example.com/project/1').for(:project_url) }
|
|
||||||
it { is_expected.to allow_value('token with spaces').for(:token) }
|
|
||||||
it { is_expected.to allow_value('ftp://ci.example.com/projects/3').for(:project_url) }
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe 'commits methods' do
|
describe 'commits methods' do
|
||||||
before do
|
before do
|
||||||
@ci_project = create(:ci_project)
|
@ci_project = create(:ci_project)
|
||||||
|
@ -77,8 +50,6 @@ describe GitlabCiService do
|
||||||
|
|
||||||
it "calls ci_yaml_file" do
|
it "calls ci_yaml_file" do
|
||||||
service_hook = double
|
service_hook = double
|
||||||
expect(service_hook).to receive(:execute)
|
|
||||||
expect(@service).to receive(:service_hook).and_return(service_hook)
|
|
||||||
expect(@service).to receive(:ci_yaml_file).with(push_sample_data[:checkout_sha])
|
expect(@service).to receive(:ci_yaml_file).with(push_sample_data[:checkout_sha])
|
||||||
|
|
||||||
@service.execute(push_sample_data)
|
@service.execute(push_sample_data)
|
||||||
|
@ -88,7 +59,7 @@ describe GitlabCiService do
|
||||||
|
|
||||||
describe "Fork registration" do
|
describe "Fork registration" do
|
||||||
before do
|
before do
|
||||||
@old_project = create(:empty_project)
|
@old_project = create(:ci_project).gl_project
|
||||||
@project = create(:empty_project)
|
@project = create(:empty_project)
|
||||||
@user = create(:user)
|
@user = create(:user)
|
||||||
|
|
||||||
|
@ -101,9 +72,9 @@ describe GitlabCiService do
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "performs http reuquest to ci" do
|
it "creates fork on CI" do
|
||||||
stub_request(:post, "http://ci.gitlab.org/api/v1/forks")
|
expect_any_instance_of(Ci::CreateProjectService).to receive(:execute)
|
||||||
@service.fork_registration(@project, @user.private_token)
|
@service.fork_registration(@project, @user)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -89,7 +89,7 @@ describe API::API, api: true do
|
||||||
|
|
||||||
it 'returns projects in the correct order when ci_enabled_first parameter is passed' do
|
it 'returns projects in the correct order when ci_enabled_first parameter is passed' do
|
||||||
[project, project2, project3].each{ |project| project.build_missing_services }
|
[project, project2, project3].each{ |project| project.build_missing_services }
|
||||||
project2.gitlab_ci_service.update(active: true, token: "token", project_url: "http://ci.example.com/projects/1")
|
project2.gitlab_ci_service.update(active: true, token: "token")
|
||||||
get api('/projects', user), { ci_enabled_first: 'true' }
|
get api('/projects', user), { ci_enabled_first: 'true' }
|
||||||
expect(response.status).to eq(200)
|
expect(response.status).to eq(200)
|
||||||
expect(json_response).to be_an Array
|
expect(json_response).to be_an Array
|
||||||
|
|
|
@ -17,9 +17,9 @@ describe API::API, api: true do
|
||||||
|
|
||||||
it "should return if required fields missing" do
|
it "should return if required fields missing" do
|
||||||
attrs = service_attrs
|
attrs = service_attrs
|
||||||
|
|
||||||
required_attributes = service_attrs_list.select do |attr|
|
required_attributes = service_attrs_list.select do |attr|
|
||||||
service_klass.validators_on(attr).any? do |v|
|
service_klass.validators_on(attr).any? do |v|
|
||||||
v.class == ActiveRecord::Validations::PresenceValidator
|
v.class == ActiveRecord::Validations::PresenceValidator
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,59 +0,0 @@
|
||||||
require 'spec_helper'
|
|
||||||
|
|
||||||
describe Ci::API::API do
|
|
||||||
include ApiHelpers
|
|
||||||
|
|
||||||
let(:project) { FactoryGirl.create(:ci_project) }
|
|
||||||
let(:private_token) { create(:user).private_token }
|
|
||||||
|
|
||||||
let(:options) do
|
|
||||||
{
|
|
||||||
private_token: private_token,
|
|
||||||
url: GitlabCi.config.gitlab_ci.url
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
before do
|
|
||||||
stub_gitlab_calls
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
describe "POST /forks" do
|
|
||||||
let(:project_info) do
|
|
||||||
{
|
|
||||||
project_id: project.gitlab_id,
|
|
||||||
project_token: project.token,
|
|
||||||
data: {
|
|
||||||
id: create(:empty_project).id,
|
|
||||||
name_with_namespace: "Gitlab.org / Underscore",
|
|
||||||
path_with_namespace: "gitlab-org/underscore",
|
|
||||||
default_branch: "master",
|
|
||||||
ssh_url_to_repo: "git@example.com:gitlab-org/underscore"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
context "with valid info" do
|
|
||||||
before do
|
|
||||||
options.merge!(project_info)
|
|
||||||
end
|
|
||||||
|
|
||||||
it "should create a project with valid data" do
|
|
||||||
post ci_api("/forks"), options
|
|
||||||
expect(response.status).to eq(201)
|
|
||||||
expect(json_response['name']).to eq("Gitlab.org / Underscore")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "with invalid project info" do
|
|
||||||
before do
|
|
||||||
options.merge!({})
|
|
||||||
end
|
|
||||||
|
|
||||||
it "should error with invalid data" do
|
|
||||||
post ci_api("/forks"), options
|
|
||||||
expect(response.status).to eq(400)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -7,7 +7,7 @@ describe Ci::CreateProjectService do
|
||||||
|
|
||||||
describe :execute do
|
describe :execute do
|
||||||
context 'valid params' do
|
context 'valid params' do
|
||||||
subject { service.execute(current_user, project, 'http://localhost/projects/:project_id') }
|
subject { service.execute(current_user, project) }
|
||||||
|
|
||||||
it { is_expected.to be_kind_of(Ci::Project) }
|
it { is_expected.to be_kind_of(Ci::Project) }
|
||||||
it { is_expected.to be_persisted }
|
it { is_expected.to be_persisted }
|
||||||
|
@ -24,7 +24,7 @@ describe Ci::CreateProjectService do
|
||||||
FactoryGirl.create(:ci_project, shared_runners_enabled: true, public: true, allow_git_fetch: true)
|
FactoryGirl.create(:ci_project, shared_runners_enabled: true, public: true, allow_git_fetch: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
subject { service.execute(current_user, project, 'http://localhost/projects/:project_id', ci_origin_project) }
|
subject { service.execute(current_user, project, ci_origin_project) }
|
||||||
|
|
||||||
it "uses project as a template for settings and jobs" do
|
it "uses project as a template for settings and jobs" do
|
||||||
expect(subject.shared_runners_enabled).to be_truthy
|
expect(subject.shared_runners_enabled).to be_truthy
|
||||||
|
|
|
@ -44,10 +44,11 @@ describe Projects::ForkService do
|
||||||
|
|
||||||
context 'GitLab CI is enabled' do
|
context 'GitLab CI is enabled' do
|
||||||
it "calls fork registrator for CI" do
|
it "calls fork registrator for CI" do
|
||||||
|
create(:ci_project, gl_project: @from_project)
|
||||||
@from_project.build_missing_services
|
@from_project.build_missing_services
|
||||||
@from_project.gitlab_ci_service.update_attributes(active: true)
|
@from_project.gitlab_ci_service.update_attributes(active: true)
|
||||||
|
|
||||||
expect(ForkRegistrationWorker).to receive(:perform_async)
|
expect_any_instance_of(Ci::CreateProjectService).to receive(:execute)
|
||||||
|
|
||||||
fork_project(@from_project, @to_user)
|
fork_project(@from_project, @to_user)
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
|
|
||||||
require 'spec_helper'
|
|
||||||
|
|
||||||
describe ForkRegistrationWorker do
|
|
||||||
context "as a resque worker" do
|
|
||||||
it "reponds to #perform" do
|
|
||||||
expect(ForkRegistrationWorker.new).to respond_to(:perform)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in a new issue