spec/shared/custom_generator_cookbook.rb in chef-cli-5.6.11 vs spec/shared/custom_generator_cookbook.rb in chef-cli-5.6.12

- old
+ new

@@ -22,19 +22,17 @@ described_class.new(argv).tap do |gen| allow(gen).to receive(:stdout).and_return(stdout_io) end end - before do + it "configures the generator context" do reset_tempdir code_generator.read_and_validate_params allow(code_generator.config_loader).to receive(:load) - end - it "configures the generator context" do code_generator.setup_context - expect(generator_context.cookbook_name).to eq(generator_arg) + expect(generator_context.cookbook_name).to eq(File.basename(generator_arg)) expect(code_generator.chef_runner.cookbook_path).to eq(tempdir) expect(code_generator.chef_runner.run_list).to eq(["recipe[a_generator_cookbook::#{generator_name}]"]) end context "when the generator cookbook is configured in a configuration file" do @@ -53,23 +51,37 @@ generator_cookbook: generator_cookbook_path, generator: generator_config) end before do + reset_tempdir + code_generator.read_and_validate_params + allow(code_generator.config_loader).to receive(:load) allow(code_generator).to receive(:chefcli_config).and_return(chefcli_config) end it "configures the generator context" do code_generator.setup_context - expect(generator_context.cookbook_name).to eq(generator_arg) - expect(code_generator.chef_runner.cookbook_path).to eq(tempdir) - expect(code_generator.chef_runner.run_list).to eq(["recipe[a_generator_cookbook::#{generator_name}]"]) + expect(generator_context.cookbook_name).to eq(File.basename(generator_arg)) + expect(code_generator.chef_runner.cookbook_path).to eq(File.expand_path("lib/chef-cli/skeletons", project_root)) + expect(code_generator.chef_runner.run_list).to eq(["recipe[code_generator::#{generator_name}]"]) end end context "with an invalid generator-cookbook path" do + let(:argv) { ["new_cookbook", "--generator-cookbook", "#{tempdir}/nested/a_generator_cookbook"] } + + before do + reset_tempdir + FileUtils.mkdir_p("#{tempdir}/nested") + FileUtils.cp_r(default_generator_cookbook_path, "#{tempdir}/nested/") + + code_generator.read_and_validate_params + allow(code_generator.config_loader).to receive(:load) + end + it "fails with an informative error" do Dir.chdir(tempdir) do allow(code_generator.chef_runner).to receive(:stdout).and_return(stdout_io) allow(code_generator).to receive(:stderr).and_return(stderr_io) expect(code_generator.run).to eq(1) @@ -86,18 +98,22 @@ context "with a generator-cookbook path to a specific cookbook" do let(:metadata_file) { File.join(generator_cookbook_path, "metadata.rb") } before do + reset_tempdir + code_generator.read_and_validate_params + allow(code_generator.config_loader).to receive(:load) + FileUtils.cp_r(default_generator_cookbook_path, generator_cookbook_path) # have to update metadata with the correct name IO.binwrite(metadata_file, "name 'a_generator_cookbook'") end it "creates the new files" do - expect(code_generator.chef_runner.cookbook_path).to eq(tempdir) + expect(code_generator.chef_runner.cookbook_path).to eq("#{tempdir}") expect(code_generator.chef_runner.run_list).to eq(["recipe[a_generator_cookbook::#{generator_name}]"]) Dir.chdir(tempdir) do allow(code_generator.chef_runner).to receive(:stdout).and_return(stdout_io) code_generator.run @@ -106,23 +122,28 @@ end context "with a generator-cookbook path to a directory containing a 'code_generator' cookbook" do + let(:argv) { ["#{tempdir}/new_cookbook", "--generator-cookbook", generator_cookbook_path] } + before do + reset_tempdir FileUtils.mkdir_p(generator_cookbook_path) FileUtils.cp_r(default_generator_cookbook_path, generator_cookbook_path) allow(code_generator).to receive(:stderr).and_return(stderr_io) + code_generator.read_and_validate_params + allow(code_generator.config_loader).to receive(:load) end it "creates the new_files (and warns about deprecated usage)" do allow(code_generator.chef_runner).to receive(:stdout).and_return(stdout_io) Dir.chdir(tempdir) do code_generator.run end - generated_files = Dir.glob("#{tempdir}/#{generator_arg}/**/*", File::FNM_DOTMATCH) + generated_files = Dir.glob("#{tempdir}/new_cookbook/**/*", File::FNM_DOTMATCH) expected_cookbook_files.each do |expected_file| expect(generated_files).to include(expected_file) end code_generator_path = File.join(generator_cookbook_path, "code_generator")