Commit bafec400 authored by Valery Sizov's avatar Valery Sizov
Browse files

CI forking: tests

parent e8889aeb4d72
......@@ -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 @@ def commit_status(sha, ref)
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 @@ def register_fork(new_project, user_token)
}
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 @@ def builds_path
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 @@ def fields
{ 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 @@ def execute
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.')
......
class ForkRegistratorWorker
class ForkRegistrationWorker
include Sidekiq::Worker
sidekiq_options queue: :default
......@@ -7,6 +7,6 @@ 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.register_fork(to_project, private_token)
from_project.gitlab_ci_service.fork_registration(to_project, private_token)
end
end
......@@ -46,4 +46,25 @@
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 @@
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 @@
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
......
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
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment