diff --git a/lib/producer/core/remote/fs.rb b/lib/producer/core/remote/fs.rb index 19fec4f..f36a2e7 100644 --- a/lib/producer/core/remote/fs.rb +++ b/lib/producer/core/remote/fs.rb @@ -7,6 +7,10 @@ module Producer def initialize(remote) @remote = remote end + + def sftp + @sftp ||= @remote.session.sftp.connect + end end end end diff --git a/spec/producer/core/remote/fs_spec.rb b/spec/producer/core/remote/fs_spec.rb index 609b841..0a8d32b 100644 --- a/spec/producer/core/remote/fs_spec.rb +++ b/spec/producer/core/remote/fs_spec.rb @@ -10,5 +10,25 @@ module Producer::Core expect(fs.instance_eval { @remote }).to be remote end end + + describe '#sftp', :ssh do + before { sftp_story } + + it 'builds a new SFTP session' do + expect(remote.session.sftp).to receive(:connect) + fs.sftp + end + + it 'returns the new SFTP session' do + session = double('session') + allow(remote.session.sftp).to receive(:connect) { session } + expect(fs.sftp).to be session + end + + it 'memoizes the FS' do + allow(remote.session.sftp).to receive(:connect) { Object.new } + expect(fs.sftp).to be fs.sftp + end + end end end