spec/shared/a_file_generator.rb in chef-dk-0.8.0 vs spec/shared/a_file_generator.rb in chef-dk-0.9.0

- old
+ new

@@ -1,125 +1,125 @@ -shared_examples_for "a file generator" do - - let(:stdout_io) { StringIO.new } - let(:stderr_io) { StringIO.new } - - def stdout - stdout_io.string - end - - def stderr - stderr_io.string - end - - let(:expected_cookbook_root) { tempdir } - let(:cookbook_name) { "example_cookbook" } - - let(:cookbook_path) { File.join(tempdir, cookbook_name) } - - subject(:recipe_generator) do - generator = described_class.new(argv) - allow(generator).to receive(:stdout).and_return(stdout_io) - allow(generator).to receive(:stderr).and_return(stderr_io) - generator - end - - def generator_context - ChefDK::Generator.context - end - - before do - ChefDK::Generator.reset - reset_tempdir - end - - after(:each) do - ChefDK::Generator::Context.reset - end - - context "when argv is empty" do - let(:argv) { [] } - - it "emits an error message and exits" do - expected_stdout = "Usage: chef generate #{generator_name} [path/to/cookbook] NAME [options]" - - expect(recipe_generator.run).to eq(1) - expect(stdout).to include(expected_stdout) - end - end - - context "when CWD is a cookbook" do - - let(:argv) { [ new_file_name ] } - - before do - FileUtils.cp_r(File.join(fixtures_path, "example_cookbook"), tempdir) - end - - it "configures the generator context" do - Dir.chdir(cookbook_path) do - recipe_generator.read_and_validate_params - recipe_generator.setup_context - - expect(generator_context.cookbook_root).to eq(expected_cookbook_root) - expect(generator_context.cookbook_name).to eq(cookbook_name) - expect(generator_context.new_file_basename).to eq(new_file_name) - expect(generator_context.recipe_name).to eq(new_file_name) - end - end - - it "creates a new recipe" do - Dir.chdir(cookbook_path) do - allow(recipe_generator.chef_runner).to receive(:stdout).and_return(stdout_io) - recipe_generator.run - end - - generated_files.each do |expected_file| - expect(File).to exist(File.join(cookbook_path, expected_file)) - end - end - - end - - context "when CWD is not a cookbook" do - context "and path to the cookbook is not given in the agv" do - let(:argv) { [ new_file_name ] } - - it "emits an error message and exits" do - expected_stdout = "Usage: chef generate #{generator_name} [path/to/cookbook] NAME [options]" - expected_stderr = "Error: Directory #{Dir.pwd} is not a cookbook\n" - - expect(recipe_generator.run).to eq(1) - expect(stdout).to include(expected_stdout) - expect(stderr).to eq(expected_stderr) - end - end - - context "and path to the cookbook is given in the argv" do - let(:argv) { [cookbook_path, new_file_name ] } - - before do - FileUtils.cp_r(File.join(fixtures_path, "example_cookbook"), tempdir) - end - - it "configures the generator context" do - recipe_generator.read_and_validate_params - recipe_generator.setup_context - - expect(generator_context.cookbook_root).to eq(File.dirname(cookbook_path)) - expect(generator_context.cookbook_name).to eq(cookbook_name) - expect(generator_context.new_file_basename).to eq(new_file_name) - end - - it "creates a new recipe" do - allow(recipe_generator.chef_runner).to receive(:stdout).and_return(stdout_io) - recipe_generator.run - - generated_files.each do |expected_file| - expect(File).to exist(File.join(cookbook_path, expected_file)) - end - end - - end - end - -end +shared_examples_for "a file generator" do + + let(:stdout_io) { StringIO.new } + let(:stderr_io) { StringIO.new } + + def stdout + stdout_io.string + end + + def stderr + stderr_io.string + end + + let(:expected_cookbook_root) { tempdir } + let(:cookbook_name) { "example_cookbook" } + + let(:cookbook_path) { File.join(tempdir, cookbook_name) } + + subject(:recipe_generator) do + generator = described_class.new(argv) + allow(generator).to receive(:stdout).and_return(stdout_io) + allow(generator).to receive(:stderr).and_return(stderr_io) + generator + end + + def generator_context + ChefDK::Generator.context + end + + before do + ChefDK::Generator.reset + reset_tempdir + end + + after(:each) do + ChefDK::Generator::Context.reset + end + + context "when argv is empty" do + let(:argv) { [] } + + it "emits an error message and exits" do + expected_stdout = "Usage: chef generate #{generator_name} [path/to/cookbook] NAME [options]" + + expect(recipe_generator.run).to eq(1) + expect(stdout).to include(expected_stdout) + end + end + + context "when CWD is a cookbook" do + + let(:argv) { [ new_file_name ] } + + before do + FileUtils.cp_r(File.join(fixtures_path, "example_cookbook"), tempdir) + end + + it "configures the generator context" do + Dir.chdir(cookbook_path) do + recipe_generator.read_and_validate_params + recipe_generator.setup_context + + expect(generator_context.cookbook_root).to eq(expected_cookbook_root) + expect(generator_context.cookbook_name).to eq(cookbook_name) + expect(generator_context.new_file_basename).to eq(new_file_name) + expect(generator_context.recipe_name).to eq(new_file_name) + end + end + + it "creates a new recipe" do + Dir.chdir(cookbook_path) do + allow(recipe_generator.chef_runner).to receive(:stdout).and_return(stdout_io) + recipe_generator.run + end + + generated_files.each do |expected_file| + expect(File).to exist(File.join(cookbook_path, expected_file)) + end + end + + end + + context "when CWD is not a cookbook" do + context "and path to the cookbook is not given in the agv" do + let(:argv) { [ new_file_name ] } + + it "emits an error message and exits" do + expected_stdout = "Usage: chef generate #{generator_name} [path/to/cookbook] NAME [options]" + expected_stderr = "Error: Directory #{Dir.pwd} is not a cookbook\n" + + expect(recipe_generator.run).to eq(1) + expect(stdout).to include(expected_stdout) + expect(stderr).to eq(expected_stderr) + end + end + + context "and path to the cookbook is given in the argv" do + let(:argv) { [cookbook_path, new_file_name ] } + + before do + FileUtils.cp_r(File.join(fixtures_path, "example_cookbook"), tempdir) + end + + it "configures the generator context" do + recipe_generator.read_and_validate_params + recipe_generator.setup_context + + expect(generator_context.cookbook_root).to eq(File.dirname(cookbook_path)) + expect(generator_context.cookbook_name).to eq(cookbook_name) + expect(generator_context.new_file_basename).to eq(new_file_name) + end + + it "creates a new recipe" do + allow(recipe_generator.chef_runner).to receive(:stdout).and_return(stdout_io) + recipe_generator.run + + generated_files.each do |expected_file| + expect(File).to exist(File.join(cookbook_path, expected_file)) + end + end + + end + end + +end