From 4624a81100099a224f083e5fdba684d869ded7d7 Mon Sep 17 00:00:00 2001 From: Thibault Jouan Date: Mon, 10 Feb 2014 16:45:06 +0000 Subject: [PATCH] Refactor actions specs with shared examples --- spec/producer/core/action_spec.rb | 42 +---------------- spec/producer/core/actions/echo_spec.rb | 2 + .../producer/core/actions/file_writer_spec.rb | 2 + spec/producer/core/actions/mkdir_spec.rb | 2 + .../core/actions/shell_command_spec.rb | 2 + spec/support/shared_action.rb | 45 +++++++++++++++++++ 6 files changed, 54 insertions(+), 41 deletions(-) create mode 100644 spec/support/shared_action.rb diff --git a/spec/producer/core/action_spec.rb b/spec/producer/core/action_spec.rb index fbe780b..884c4ad 100644 --- a/spec/producer/core/action_spec.rb +++ b/spec/producer/core/action_spec.rb @@ -2,46 +2,6 @@ require 'spec_helper' module Producer::Core describe Action do - let(:input) { StringIO.new } - let(:output) { StringIO.new } - let(:env) { Env.new(input: input, output: output) } - let(:arguments) { [:some, :arguments] } - subject(:action) { Action.new(env, *arguments) } - - describe '#env' do - it 'returns the assigned env' do - expect(action.env).to be env - end - end - - describe '#arguments' do - it 'returns the assigned arguments' do - expect(action.arguments).to eq arguments - end - end - - describe '#input' do - it 'returns env input' do - expect(action.input).to be input - end - end - - describe '#output' do - it 'returns env output' do - expect(action.output).to be output - end - end - - describe '#remote' do - it 'returns env remote' do - expect(action.remote).to be action.env.remote - end - end - - describe '#fs' do - it 'returns env remote fs' do - expect(action.fs).to be action.env.remote.fs - end - end + it_behaves_like 'action' end end diff --git a/spec/producer/core/actions/echo_spec.rb b/spec/producer/core/actions/echo_spec.rb index 35c8d3d..f48fded 100644 --- a/spec/producer/core/actions/echo_spec.rb +++ b/spec/producer/core/actions/echo_spec.rb @@ -7,6 +7,8 @@ module Producer::Core let(:text) { 'hello' } subject(:echo) { Echo.new(env, text) } + it_behaves_like 'action' + describe '#apply' do it 'writes the given string to env output with a record separator' do echo.apply diff --git a/spec/producer/core/actions/file_writer_spec.rb b/spec/producer/core/actions/file_writer_spec.rb index 4084910..79b7e19 100644 --- a/spec/producer/core/actions/file_writer_spec.rb +++ b/spec/producer/core/actions/file_writer_spec.rb @@ -8,6 +8,8 @@ module Producer::Core let(:content) { 'some_content' } subject(:writer) { FileWriter.new(env, path, content) } + it_behaves_like 'action' + describe '#apply' do it 'writes content to file on remote filesystem' do expect(writer.fs).to receive(:file_write).with(path, content) diff --git a/spec/producer/core/actions/mkdir_spec.rb b/spec/producer/core/actions/mkdir_spec.rb index 6847dc5..811cc92 100644 --- a/spec/producer/core/actions/mkdir_spec.rb +++ b/spec/producer/core/actions/mkdir_spec.rb @@ -7,6 +7,8 @@ module Producer::Core let(:path) { 'some_path' } subject(:mkdir) { Mkdir.new(env, path) } + it_behaves_like 'action' + describe '#apply' do it 'creates directory on remote filesystem' do expect(mkdir.fs).to receive(:mkdir).with(path) diff --git a/spec/producer/core/actions/shell_command_spec.rb b/spec/producer/core/actions/shell_command_spec.rb index 52fd597..79efe61 100644 --- a/spec/producer/core/actions/shell_command_spec.rb +++ b/spec/producer/core/actions/shell_command_spec.rb @@ -8,6 +8,8 @@ module Producer::Core let(:command) { "echo #{command_args}" } subject(:sh) { ShellCommand.new(env, command) } + it_behaves_like 'action' + describe '#apply' do it 'executes the remote command' do expect(sh.remote).to receive(:execute).with(command) diff --git a/spec/support/shared_action.rb b/spec/support/shared_action.rb new file mode 100644 index 0000000..132169a --- /dev/null +++ b/spec/support/shared_action.rb @@ -0,0 +1,45 @@ +module Producer::Core + shared_examples 'action' do + let(:input) { StringIO.new } + let(:output) { StringIO.new } + let(:env) { Env.new(input: input, output: output) } + let(:arguments) { [:some, :arguments] } + subject(:action) { described_class.new(env, *arguments) } + + describe '#env' do + it 'returns the assigned env' do + expect(action.env).to be env + end + end + + describe '#arguments' do + it 'returns the assigned arguments' do + expect(action.arguments).to eq arguments + end + end + + describe '#input' do + it 'returns env input' do + expect(action.input).to be input + end + end + + describe '#output' do + it 'returns env output' do + expect(action.output).to be output + end + end + + describe '#remote' do + it 'returns env remote' do + expect(action.remote).to be action.env.remote + end + end + + describe '#fs' do + it 'returns env remote fs' do + expect(action.fs).to be action.env.remote.fs + end + end + end +end