Implement `file_write' action
This commit is contained in:
29
spec/producer/core/actions/file_writer_spec.rb
Normal file
29
spec/producer/core/actions/file_writer_spec.rb
Normal file
@@ -0,0 +1,29 @@
|
||||
require 'spec_helper'
|
||||
|
||||
module Producer::Core
|
||||
describe Actions::FileWriter do
|
||||
let(:env) { Env.new }
|
||||
let(:path) { 'some_path' }
|
||||
let(:content) { 'some_content' }
|
||||
subject(:writer) { Actions::FileWriter.new(env, path, content) }
|
||||
|
||||
describe '#apply' do
|
||||
it 'delegates the call to env.remote.fs.file_write method' do
|
||||
expect(env.remote.fs).to receive(:file_write).with(path, content)
|
||||
writer.apply
|
||||
end
|
||||
end
|
||||
|
||||
describe '#path' do
|
||||
it 'returns the path' do
|
||||
expect(writer.path).to eq path
|
||||
end
|
||||
end
|
||||
|
||||
describe '#content' do
|
||||
it 'returns the content' do
|
||||
expect(writer.content).to eq content
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@@ -72,5 +72,30 @@ module Producer::Core
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#file_write' do
|
||||
let(:sftp) { double('sftp').as_null_object }
|
||||
let(:file) { double('sftp').as_null_object }
|
||||
let(:path) { 'some_file_path' }
|
||||
let(:content) { 'some_content' }
|
||||
|
||||
before do
|
||||
allow(fs).to receive(:sftp) { sftp }
|
||||
allow(sftp).to receive(:file) { file }
|
||||
end
|
||||
|
||||
it 'opens the file' do
|
||||
expect(file).to receive(:open).with(path, 'w')
|
||||
fs.file_write path, content
|
||||
end
|
||||
|
||||
it 'writes the content' do
|
||||
expect(file).to receive(:open).with(any_args) do |&b|
|
||||
expect(file).to receive(:write).with(content)
|
||||
b.call file
|
||||
end
|
||||
fs.file_write path, content
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@@ -94,8 +94,7 @@ module Producer::Core
|
||||
ch.sends_exec command
|
||||
ch.gets_data arguments
|
||||
end
|
||||
remote.execute command
|
||||
expect(story_completed?).to be
|
||||
expect_story_completed { remote.execute command }
|
||||
end
|
||||
|
||||
it 'returns the output' do
|
||||
|
@@ -6,7 +6,7 @@ module Producer::Core
|
||||
let(:env) { double 'env' }
|
||||
subject(:dsl) { Task::DSL.new(&block) }
|
||||
|
||||
%w[echo sh].each do |action|
|
||||
%w[echo sh file_write].each do |action|
|
||||
it "has `#{action}' action defined" do
|
||||
expect(dsl).to respond_to action.to_sym
|
||||
end
|
||||
|
@@ -29,10 +29,6 @@ module NetSSHStoryHelpers
|
||||
end
|
||||
end
|
||||
|
||||
def story_completed?
|
||||
socket.script.events.empty?
|
||||
end
|
||||
|
||||
def sftp_story
|
||||
story do |session|
|
||||
ch = session.opens_channel
|
||||
@@ -48,4 +44,11 @@ module NetSSHStoryHelpers
|
||||
yield ch if block_given?
|
||||
end
|
||||
end
|
||||
|
||||
def expect_story_completed
|
||||
raise 'there is no story to expect' if socket.script.events.empty?
|
||||
yield
|
||||
expect(socket.script.events)
|
||||
.to be_empty, "#{socket.script.events.count} story events still pending"
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user