Skip to content
代码片段 群组 项目
未验证 提交 77ef83e4 编辑于 作者: Max Fan's avatar Max Fan 提交者: GitLab
浏览文件

Merge branch '385579-renaming-pipeline-scheduleservice' into 'master'

Rename to Ci::PipelineSchedules::PlayService

See merge request https://gitlab.com/gitlab-org/gitlab/-/merge_requests/177203



Merged-by: default avatarMax Fan <mfan@gitlab.com>
Approved-by: default avatarIan Baum <ibaum@gitlab.com>
Approved-by: default avatarJennifer Li <jli@gitlab.com>
Approved-by: default avatarMax Fan <mfan@gitlab.com>
Co-authored-by: default avatarVlad Wolanyk <vwolanyk@gitlab.com>
No related branches found
No related tags found
无相关合并请求
...@@ -45,7 +45,9 @@ def update ...@@ -45,7 +45,9 @@ def update
end end
def play def play
job_id = RunPipelineScheduleWorker.perform_async(schedule.id, current_user.id) # rubocop:disable CodeReuse/Worker job_id = Ci::PipelineSchedules::PlayService
.new(schedule.project, current_user)
.execute(schedule)
if job_id if job_id
pipelines_link_start = "<a href=\"#{project_pipelines_path(@project)}\">" pipelines_link_start = "<a href=\"#{project_pipelines_path(@project)}\">"
......
...@@ -16,7 +16,7 @@ class Play < Base ...@@ -16,7 +16,7 @@ class Play < Base
def resolve(id:) def resolve(id:)
schedule = authorized_find!(id: id) schedule = authorized_find!(id: id)
job_id = ::Ci::PipelineScheduleService job_id = ::Ci::PipelineSchedules::PlayService
.new(schedule.project, current_user) .new(schedule.project, current_user)
.execute(schedule) .execute(schedule)
......
# frozen_string_literal: true
module Ci
class PipelineScheduleService < BaseService
include Services::ReturnServiceResponses
def execute(schedule)
check_access!(schedule)
return error("Failed to schedule pipeline.", :bad_request) unless project.persisted?
# Ensure `next_run_at` is set properly before creating a pipeline.
# Otherwise, multiple pipelines could be created in a short interval.
schedule.schedule_next_run!
RunPipelineScheduleWorker.perform_async(schedule.id, current_user&.id)
end
private
def check_access!(schedule)
raise Gitlab::Access::AccessDeniedError unless can?(current_user, :play_pipeline_schedule, schedule)
end
end
end
# frozen_string_literal: true
module Ci
module PipelineSchedules
class PlayService < BaseService
include Services::ReturnServiceResponses
def execute(schedule)
check_access!(schedule)
return error("Failed to schedule pipeline.", :bad_request) unless project.persisted?
# Ensure `next_run_at` is set properly before creating a pipeline.
# Otherwise, multiple pipelines could be created in a short interval.
schedule.schedule_next_run!
RunPipelineScheduleWorker.perform_async(schedule.id, current_user&.id)
end
private
def check_access!(schedule)
raise Gitlab::Access::AccessDeniedError unless can?(current_user, :play_pipeline_schedule, schedule)
end
end
end
end
...@@ -192,8 +192,9 @@ class PipelineSchedules < ::API::Base ...@@ -192,8 +192,9 @@ class PipelineSchedules < ::API::Base
post ':id/pipeline_schedules/:pipeline_schedule_id/play' do post ':id/pipeline_schedules/:pipeline_schedule_id/play' do
authorize! :play_pipeline_schedule, pipeline_schedule authorize! :play_pipeline_schedule, pipeline_schedule
job_id = RunPipelineScheduleWorker # rubocop:disable CodeReuse/Worker job_id = ::Ci::PipelineSchedules::PlayService
.perform_async(pipeline_schedule.id, current_user.id) .new(pipeline_schedule.project, current_user)
.execute(pipeline_schedule)
if job_id if job_id
created! created!
......
...@@ -519,7 +519,7 @@ def go ...@@ -519,7 +519,7 @@ def go
end end
it 'does not allow pipeline to be executed' do it 'does not allow pipeline to be executed' do
expect(RunPipelineScheduleWorker).not_to receive(:perform_async) expect(Ci::PipelineSchedules::PlayService).not_to receive(:new)
go go
...@@ -529,7 +529,7 @@ def go ...@@ -529,7 +529,7 @@ def go
context 'when a developer makes the request' do context 'when a developer makes the request' do
it 'executes a new pipeline' do it 'executes a new pipeline' do
expect(RunPipelineScheduleWorker).to receive(:perform_async).with(pipeline_schedule.id, user.id).and_return('job-123') expect(Ci::PipelineSchedules::PlayService).to receive_message_chain(:new, :execute).with(pipeline_schedule).and_return('job-123')
go go
......
...@@ -57,9 +57,10 @@ ...@@ -57,9 +57,10 @@
context 'when mutation fails' do context 'when mutation fails' do
it do it do
expect(RunPipelineScheduleWorker) expect(Ci::PipelineSchedules::PlayService)
.to receive(:perform_async) .to receive_message_chain(:new, :execute)
.with(pipeline_schedule.id, current_user.id).and_return(nil) .with(pipeline_schedule)
.and_return(nil)
post_graphql_mutation(mutation, current_user: current_user) post_graphql_mutation(mutation, current_user: current_user)
...@@ -70,7 +71,7 @@ ...@@ -70,7 +71,7 @@
context 'when PipelineScheduleService raises AccessDeniedError' do context 'when PipelineScheduleService raises AccessDeniedError' do
before do before do
allow(Ci::PipelineScheduleService).to receive_message_chain(:new, allow(Ci::PipelineSchedules::PlayService).to receive_message_chain(:new,
:execute).and_raise Gitlab::Access::AccessDeniedError :execute).and_raise Gitlab::Access::AccessDeniedError
end end
......
...@@ -2,14 +2,14 @@ ...@@ -2,14 +2,14 @@
require 'spec_helper' require 'spec_helper'
RSpec.describe Ci::PipelineScheduleService, feature_category: :continuous_integration do RSpec.describe Ci::PipelineSchedules::PlayService, feature_category: :continuous_integration do
let_it_be(:user) { create(:user) } let_it_be(:user) { create(:user) }
let_it_be(:project) { create(:project) } let_it_be(:project) { create(:project) }
let(:service) { described_class.new(project, user) } let(:service) { described_class.new(project, user) }
describe '#execute' do describe '#execute' do
subject { service.execute(schedule) } subject(:execute_service) { service.execute(schedule) }
let_it_be(:schedule) { create(:ci_pipeline_schedule, project: project, owner: user) } let_it_be(:schedule) { create(:ci_pipeline_schedule, project: project, owner: user) }
...@@ -21,21 +21,21 @@ ...@@ -21,21 +21,21 @@
it 'schedules next run' do it 'schedules next run' do
expect(schedule).to receive(:schedule_next_run!) expect(schedule).to receive(:schedule_next_run!)
subject execute_service
end end
it 'runs RunPipelineScheduleWorker' do it 'runs RunPipelineScheduleWorker' do
expect(RunPipelineScheduleWorker) expect(RunPipelineScheduleWorker)
.to receive(:perform_async).with(schedule.id, schedule.owner.id) .to receive(:perform_async).with(schedule.id, schedule.owner.id)
subject execute_service
end end
context 'when owner is nil' do context 'when owner is nil' do
let(:schedule) { create(:ci_pipeline_schedule, project: project, owner: nil) } let(:schedule) { create(:ci_pipeline_schedule, project: project, owner: nil) }
it 'does not raise an error' do it 'does not raise an error' do
expect { subject }.not_to raise_error expect { execute_service }.not_to raise_error
end end
end end
...@@ -43,18 +43,18 @@ ...@@ -43,18 +43,18 @@
let_it_be(:project) { create(:project).tap(&:delete) } let_it_be(:project) { create(:project).tap(&:delete) }
it 'does not raise an exception' do it 'does not raise an exception' do
expect { subject }.not_to raise_error expect { execute_service }.not_to raise_error
end end
it "returns a service response error" do it "returns a service response error" do
expect(subject).to be_error expect(execute_service).to be_error
end end
it 'does not run RunPipelineScheduleWorker' do it 'does not run RunPipelineScheduleWorker' do
expect(RunPipelineScheduleWorker) expect(RunPipelineScheduleWorker)
.not_to receive(:perform_async).with(schedule.id, schedule.owner.id) .not_to receive(:perform_async).with(schedule.id, schedule.owner.id)
subject execute_service
end end
end end
end end
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
end end
it 'raises an AccessDeniedError' do it 'raises an AccessDeniedError' do
expect { subject }.to raise_error Gitlab::Access::AccessDeniedError expect { execute_service }.to raise_error Gitlab::Access::AccessDeniedError
end end
end end
end end
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册