diff --git a/devops-service/spec/workers/create_server_worker_spec.rb b/devops-service/spec/workers/create_server_worker_spec.rb new file mode 100644 index 0000000..7bbd66a --- /dev/null +++ b/devops-service/spec/workers/create_server_worker_spec.rb @@ -0,0 +1,30 @@ +require 'workers/create_server_worker' + +RSpec.describe CreateServerWorker, type: :worker, stubbed_connector: true do + let(:worker) { described_class.new } + let(:perform) { worker.perform('owner' => 'user', 'server_attrs' => @server_attrs) } + + before do + allow(worker).to receive(:update_report) + allow_any_instance_of(Devops::Executor::ServerExecutor).to receive(:create_server) + @server_attrs = {'deploy_env' => 'foo'} + allow(stubbed_connector).to receive(:project) { build(:project) } + end + + it 'requires server attrs and owner' do + expect{ worker.perform('owner' => 'user') }.to raise_error KeyError + expect{ worker.perform('server_attrs' => {}) }.to raise_error KeyError + end + + it 'updates report' do + expect(worker).to receive(:update_report) + perform + end + + it 'calls #create_server with server attrs merged with "created_by" on executor' do + expect_any_instance_of(Devops::Executor::ServerExecutor).to receive(:create_server) do |caller, param| + expect(param).to eq @server_attrs.merge('created_by' => 'user') + end + perform + end +end \ No newline at end of file diff --git a/devops-service/workers/create_server_worker.rb b/devops-service/workers/create_server_worker.rb index 78c0e59..9326cc2 100644 --- a/devops-service/workers/create_server_worker.rb +++ b/devops-service/workers/create_server_worker.rb @@ -9,24 +9,27 @@ class CreateServerWorker < Worker # options must contain 'server_attrs', 'owner' def perform(options) call do - server_attrs = options.fetch('server_attrs') owner = options.fetch('owner') + server_attrs = options.fetch('server_attrs').merge('created_by' => owner) - project = mongo.project(server_attrs["project"]) - env = project.deploy_env(server_attrs["deploy_env"]) + project = mongo.project(server_attrs['project']) + env = project.deploy_env(server_attrs['deploy_env']) report = save_report(project, env, owner) - e = Devops::Executor::ServerExecutor.new(nil, out) - e.project = project - e.report = report - e.deploy_env = env - server_attrs["created_by"] = owner - e.create_server(server_attrs) + executor(project, env, report).create_server(server_attrs) end end private + def executor(project, env, report) + Devops::Executor::ServerExecutor.new(nil, out).tap do |executor| + executor.project = project + executor.deploy_env = env + executor.report = report + end + end + def save_report(project, env, owner) update_report( "created_by" => owner,