CI forking: tests
This commit is contained in:
parent
9c2301808b
commit
bafec400f1
6 changed files with 59 additions and 12 deletions
|
@ -18,6 +18,8 @@
|
|||
#
|
||||
|
||||
class GitlabCiService < CiService
|
||||
API_PREFIX = "api/v1"
|
||||
|
||||
prop_accessor :project_url, :token
|
||||
validates :project_url, presence: true, if: :activated?
|
||||
validates :token, presence: true, if: :activated?
|
||||
|
@ -59,7 +61,7 @@ class GitlabCiService < CiService
|
|||
end
|
||||
end
|
||||
|
||||
def register_fork(new_project, user_token)
|
||||
def fork_registration(new_project, private_token)
|
||||
params = {
|
||||
id: new_project.id,
|
||||
name_with_namespace: new_project.name_with_namespace,
|
||||
|
@ -69,12 +71,12 @@ class GitlabCiService < CiService
|
|||
}
|
||||
|
||||
HTTParty.post(
|
||||
register_fork_path,
|
||||
fork_registration_path,
|
||||
body: {
|
||||
project_id: project.id,
|
||||
project_token: token,
|
||||
user_token: user_token,
|
||||
data: params.to_yaml},
|
||||
private_token: private_token,
|
||||
data: params },
|
||||
verify: false
|
||||
)
|
||||
end
|
||||
|
@ -95,10 +97,6 @@ class GitlabCiService < CiService
|
|||
project_url + "?ref=" + project.default_branch
|
||||
end
|
||||
|
||||
def register_fork_path
|
||||
project_url.sub(/projects\/\d*/, 'api/v1/forks')
|
||||
end
|
||||
|
||||
def status_img_path
|
||||
project_url + "/status.png?ref=" + project.default_branch
|
||||
end
|
||||
|
@ -121,4 +119,10 @@ class GitlabCiService < CiService
|
|||
{ type: 'text', name: 'project_url', placeholder: 'http://ci.gitlabhq.com/projects/3' }
|
||||
]
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def fork_registration_path
|
||||
project_url.sub(/projects\/\d*/, "#{API_PREFIX}/forks")
|
||||
end
|
||||
end
|
||||
|
|
|
@ -50,7 +50,7 @@ module Projects
|
|||
end
|
||||
|
||||
if @from_project.gitlab_ci?
|
||||
ForkRegistratorWorker.perform_async(@from_project.id, project.id, @current_user.private_token)
|
||||
ForkRegistrationWorker.perform_async(@from_project.id, project.id, @current_user.private_token)
|
||||
end
|
||||
rescue => ex
|
||||
project.errors.add(:base, 'Fork transaction failed.')
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
class ForkRegistratorWorker
|
||||
class ForkRegistrationWorker
|
||||
include Sidekiq::Worker
|
||||
|
||||
sidekiq_options queue: :default
|
||||
|
@ -7,6 +7,6 @@ class ForkRegistratorWorker
|
|||
from_project = Project.find(from_project_id)
|
||||
to_project = Project.find(to_project_id)
|
||||
|
||||
from_project.gitlab_ci_service.register_fork(to_project, private_token)
|
||||
from_project.gitlab_ci_service.fork_registration(to_project, private_token)
|
||||
end
|
||||
end
|
|
@ -46,4 +46,25 @@ describe GitlabCiService do
|
|||
it { expect(@service.build_page("2ab7834c", 'master')).to eq("http://ci.gitlab.org/projects/2/refs/master/commits/2ab7834c")}
|
||||
end
|
||||
end
|
||||
|
||||
describe "Fork registration" do
|
||||
before do
|
||||
@old_project = create(:empty_project)
|
||||
@project = create(:empty_project)
|
||||
@user = create(:user)
|
||||
|
||||
@service = GitlabCiService.new
|
||||
@service.stub(
|
||||
service_hook: true,
|
||||
project_url: 'http://ci.gitlab.org/projects/2',
|
||||
token: 'verySecret',
|
||||
project: @old_project
|
||||
)
|
||||
end
|
||||
|
||||
it "performs http reuquest to ci" do
|
||||
stub_request(:post, "http://ci.gitlab.org/api/v1/forks")
|
||||
@service.fork_registration(@project, @user.private_token)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -40,6 +40,17 @@ describe Projects::ForkService do
|
|||
expect(@to_project.errors[:base]).not_to include("Fork transaction failed.")
|
||||
end
|
||||
end
|
||||
|
||||
context 'GitLab CI is enabled' do
|
||||
it "calls fork registrator for CI" do
|
||||
@from_project.build_missing_services
|
||||
@from_project.gitlab_ci_service.update_attributes(active: true)
|
||||
|
||||
expect(ForkRegistrationWorker).to receive(:perform_async)
|
||||
|
||||
fork_project(@from_project, @to_user)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe :fork_to_namespace do
|
||||
|
@ -89,7 +100,8 @@ describe Projects::ForkService do
|
|||
|
||||
def fork_project(from_project, user, fork_success = true, params = {})
|
||||
context = Projects::ForkService.new(from_project, user, params)
|
||||
shell = double('gitlab_shell').stub(fork_repository: fork_success)
|
||||
shell = double('gitlab_shell')
|
||||
shell.stub(fork_repository: fork_success)
|
||||
context.stub(gitlab_shell: shell)
|
||||
context.execute
|
||||
end
|
||||
|
|
10
spec/workers/fork_registration_worker_spec.rb
Normal file
10
spec/workers/fork_registration_worker_spec.rb
Normal file
|
@ -0,0 +1,10 @@
|
|||
|
||||
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