* Move recipe processing code in the worker; * Refactor CLI and use the the worker; * Implement Recipe#tasks and remove tasks application during evaluation, tasks are now applied by the worker after all evaluations are done.
81 lines
2.2 KiB
Ruby
81 lines
2.2 KiB
Ruby
require 'spec_helper'
|
|
|
|
module Producer::Core
|
|
describe Recipe do
|
|
include FixturesHelpers
|
|
|
|
let(:code) { 'nil' }
|
|
subject(:recipe) { Recipe.new(code) }
|
|
|
|
describe '.from_file' do
|
|
let(:filepath) { fixture_path_for 'recipes/empty.rb' }
|
|
subject(:recipe) { Recipe.from_file(filepath) }
|
|
|
|
it 'builds a recipe whose code is read from given file path' do
|
|
expect(recipe.code).to eq File.read(filepath)
|
|
end
|
|
|
|
it 'builds a recipe whose file path is set from given file path' do
|
|
expect(recipe.filepath).to eq filepath
|
|
end
|
|
end
|
|
|
|
describe '#initialize' do
|
|
it 'assigns nil as a default filepath' do
|
|
expect(recipe.filepath).to be nil
|
|
end
|
|
|
|
it 'has no task' do
|
|
expect(recipe.tasks).to be_empty
|
|
end
|
|
end
|
|
|
|
describe '#code' do
|
|
it 'returns the assigned code' do
|
|
expect(recipe.code).to be code
|
|
end
|
|
end
|
|
|
|
describe '#filepath' do
|
|
let(:filepath) { 'some_file_path' }
|
|
let(:recipe) { Recipe.new(code, filepath) }
|
|
|
|
it 'returns the assigned file path' do
|
|
expect(recipe.filepath).to eq filepath
|
|
end
|
|
end
|
|
|
|
describe '#evaluate' do
|
|
let(:env) { double('env').as_null_object }
|
|
|
|
it 'builds a recipe DSL sandbox' do
|
|
expect(Recipe::DSL).to receive(:new).once.with(code).and_call_original
|
|
recipe.evaluate(env)
|
|
end
|
|
|
|
it 'evaluates the DSL sandbox with the environment given as argument' do
|
|
dsl = double('dsl').as_null_object
|
|
allow(Recipe::DSL).to receive(:new) { dsl }
|
|
expect(dsl).to receive(:evaluate)
|
|
recipe.evaluate(env)
|
|
end
|
|
|
|
it 'evaluates the DSL sandbox tasks' do
|
|
task = double('task')
|
|
allow(Task).to receive(:new) { task }
|
|
dsl = Recipe::DSL.new { task(:some_task) }
|
|
allow(Recipe::DSL).to receive(:new) { dsl }
|
|
expect(task).to receive(:evaluate).with(env)
|
|
recipe.evaluate(env)
|
|
end
|
|
|
|
it 'assigns the evaluated tasks' do
|
|
dsl = Recipe::DSL.new { task(:some_task) { } }
|
|
allow(Recipe::DSL).to receive(:new) { dsl }
|
|
recipe.evaluate(env)
|
|
expect(recipe.tasks.first.name).to eq :some_task
|
|
end
|
|
end
|
|
end
|
|
end
|