add CreateServerWorker specs

This commit is contained in:
Anton Chuchkalov 2016-03-17 12:49:35 +02:00
parent 5b139b5235
commit 6c40538a16
2 changed files with 42 additions and 9 deletions

View File

@ -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

View File

@ -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,