diff options
7 files changed, 47 insertions, 26 deletions
diff --git a/app/controllers/projects/clusters/applications_controller.rb b/app/controllers/projects/clusters/applications_controller.rb index a3fc4f4741b..bcea96bce94 100644 --- a/app/controllers/projects/clusters/applications_controller.rb +++ b/app/controllers/projects/clusters/applications_controller.rb @@ -6,12 +6,10 @@ class Projects::Clusters::ApplicationsController < Projects::ApplicationControll before_action :authorize_create_cluster!, only: [:create] def create - application = Clusters::Applications::CreateService + Clusters::Applications::CreateService .new(@cluster, current_user, create_cluster_application_params) .execute(request) - Clusters::Applications::ScheduleInstallationService.new(project, current_user).execute(application) - head :no_content rescue Clusters::Applications::CreateService::InvalidApplicationError render_404 diff --git a/app/services/clusters/applications/create_service.rb b/app/services/clusters/applications/create_service.rb index d69e8612eed..55f917798de 100644 --- a/app/services/clusters/applications/create_service.rb +++ b/app/services/clusters/applications/create_service.rb @@ -24,6 +24,8 @@ module Clusters end application.save! + + Clusters::Applications::ScheduleInstallationService.new(application).execute end end diff --git a/app/services/clusters/applications/schedule_installation_service.rb b/app/services/clusters/applications/schedule_installation_service.rb index 4ead4f619c8..d75ba70c27e 100644 --- a/app/services/clusters/applications/schedule_installation_service.rb +++ b/app/services/clusters/applications/schedule_installation_service.rb @@ -2,8 +2,14 @@ module Clusters module Applications - class ScheduleInstallationService < ::BaseService - def execute(application) + class ScheduleInstallationService + attr_reader :application + + def initialize(application) + @application = application + end + + def execute application.make_scheduled! ClusterInstallAppWorker.perform_async(application.name, application.id) diff --git a/spec/services/applications/create_service_spec.rb b/spec/services/applications/create_service_spec.rb index 9c43b56744b..c8134087fa1 100644 --- a/spec/services/applications/create_service_spec.rb +++ b/spec/services/applications/create_service_spec.rb @@ -1,17 +1,14 @@ +# frozen_string_literal: true + require "spec_helper" describe ::Applications::CreateService do + include TestRequestHelpers + let(:user) { create(:user) } let(:params) { attributes_for(:application) } - let(:request) do - if Gitlab.rails5? - ActionController::TestRequest.new({ remote_ip: "127.0.0.1" }, ActionController::TestSession.new) - else - ActionController::TestRequest.new(remote_ip: "127.0.0.1") - end - end subject { described_class.new(user, params) } - it { expect { subject.execute(request) }.to change { Doorkeeper::Application.count }.by(1) } + it { expect { subject.execute(test_request) }.to change { Doorkeeper::Application.count }.by(1) } end diff --git a/spec/services/clusters/applications/create_service_spec.rb b/spec/services/clusters/applications/create_service_spec.rb index 58d9682602a..056db0c5486 100644 --- a/spec/services/clusters/applications/create_service_spec.rb +++ b/spec/services/clusters/applications/create_service_spec.rb @@ -3,21 +3,19 @@ require 'spec_helper' describe Clusters::Applications::CreateService do - let(:cluster) { create(:cluster) } + include TestRequestHelpers + + let(:cluster) { create(:cluster, :project, :provided_by_gcp) } let(:user) { create(:user) } let(:params) { { application: 'helm' } } let(:service) { described_class.new(cluster, user, params) } - let(:request) do - if Gitlab.rails5? - ActionController::TestRequest.new({ remote_ip: "127.0.0.1" }, ActionController::TestSession.new) - else - ActionController::TestRequest.new(remote_ip: "127.0.0.1") + describe '#execute' do + before do + allow(ClusterInstallAppWorker).to receive(:perform_async) end - end - describe '#execute' do - subject { service.execute(request) } + subject { service.execute(test_request) } it 'creates an application' do expect do @@ -27,6 +25,12 @@ describe Clusters::Applications::CreateService do end.to change(cluster, :application_helm) end + it 'schedules an install via worker' do + expect(ClusterInstallAppWorker).to receive(:perform_async).with('helm', anything).once + + subject + end + context 'jupyter application' do let(:params) do { @@ -35,6 +39,10 @@ describe Clusters::Applications::CreateService do } end + before do + allow_any_instance_of(Clusters::Applications::ScheduleInstallationService).to receive(:execute) + end + it 'creates the application' do expect do subject diff --git a/spec/services/clusters/applications/schedule_installation_service_spec.rb b/spec/services/clusters/applications/schedule_installation_service_spec.rb index bca1e71bef2..21797edd533 100644 --- a/spec/services/clusters/applications/schedule_installation_service_spec.rb +++ b/spec/services/clusters/applications/schedule_installation_service_spec.rb @@ -10,14 +10,13 @@ describe Clusters::Applications::ScheduleInstallationService do expect(ClusterInstallAppWorker).not_to receive(:perform_async) count_before = count_scheduled - expect { service.execute(application) }.to raise_error(StandardError) + expect { service.execute }.to raise_error(StandardError) expect(count_scheduled).to eq(count_before) end end describe '#execute' do - let(:project) { double(:project) } - let(:service) { described_class.new(project, nil) } + let(:service) { described_class.new(application) } context 'when application is installable' do let(:application) { create(:clusters_applications_helm, :installable) } @@ -25,7 +24,7 @@ describe Clusters::Applications::ScheduleInstallationService do it 'make the application scheduled' do expect(ClusterInstallAppWorker).to receive(:perform_async).with(application.name, kind_of(Numeric)).once - expect { service.execute(application) }.to change { application.class.with_status(:scheduled).count }.by(1) + expect { service.execute }.to change { application.class.with_status(:scheduled).count }.by(1) end end diff --git a/spec/support/helpers/test_request_helpers.rb b/spec/support/helpers/test_request_helpers.rb new file mode 100644 index 00000000000..187a0e07891 --- /dev/null +++ b/spec/support/helpers/test_request_helpers.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module TestRequestHelpers + def test_request(remote_ip: '127.0.0.1') + if Gitlab.rails5? + ActionController::TestRequest.new({ remote_ip: remote_ip }, ActionController::TestSession.new) + else + ActionController::TestRequest.new(remote_ip: remote_ip) + end + end +end |