chef-dk 1.6.11 → 2.0.26

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +25 -38
  3. data/Gemfile.lock +199 -199
  4. data/README.md +4 -2
  5. data/Rakefile +1 -2
  6. data/acceptance/Gemfile +1 -1
  7. data/acceptance/Gemfile.lock +23 -21
  8. data/chef-dk.gemspec +4 -6
  9. data/lib/chef-dk/builtin_commands.rb +1 -1
  10. data/lib/chef-dk/chef_runner.rb +1 -1
  11. data/lib/chef-dk/cli.rb +1 -0
  12. data/lib/chef-dk/command/generate.rb +5 -2
  13. data/lib/chef-dk/command/generator_commands/helpers.rb +36 -0
  14. data/lib/chef-dk/command/generator_commands/{lwrp.rb → resource.rb} +4 -4
  15. data/lib/chef-dk/command/update.rb +11 -18
  16. data/lib/chef-dk/command/verify.rb +1 -16
  17. data/lib/chef-dk/commands_map.rb +3 -3
  18. data/lib/chef-dk/policyfile/artifactory_cookbook_source.rb +102 -0
  19. data/lib/chef-dk/policyfile/cookbook_location_specification.rb +2 -2
  20. data/lib/chef-dk/policyfile/cookbook_sources.rb +1 -0
  21. data/lib/chef-dk/policyfile/dsl.rb +10 -0
  22. data/lib/chef-dk/policyfile/solution_dependencies.rb +15 -1
  23. data/lib/chef-dk/policyfile_lock.rb +1 -1
  24. data/lib/chef-dk/policyfile_services/install.rb +30 -2
  25. data/lib/chef-dk/skeletons/code_generator/files/default/Berksfile +1 -0
  26. data/lib/chef-dk/skeletons/code_generator/files/default/build_cookbook/test-fixture-recipe.rb +1 -0
  27. data/lib/chef-dk/skeletons/code_generator/files/default/cookbook_readmes/README.md +2 -2
  28. data/lib/chef-dk/skeletons/code_generator/files/default/delivery-config.json +3 -0
  29. data/lib/chef-dk/skeletons/code_generator/files/default/delivery-project.toml +1 -1
  30. data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/attributes/default.rb +1 -0
  31. data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/metadata.rb +2 -1
  32. data/lib/chef-dk/skeletons/code_generator/files/default/repo/cookbooks/example/recipes/default.rb +1 -0
  33. data/lib/chef-dk/skeletons/code_generator/files/default/spec_helper.rb +1 -0
  34. data/lib/chef-dk/skeletons/code_generator/files/default/spec_helper_policyfile.rb +1 -0
  35. data/lib/chef-dk/skeletons/code_generator/metadata.rb +3 -2
  36. data/lib/chef-dk/skeletons/code_generator/recipes/app.rb +1 -1
  37. data/lib/chef-dk/skeletons/code_generator/recipes/attribute.rb +1 -0
  38. data/lib/chef-dk/skeletons/code_generator/recipes/build_cookbook.rb +7 -12
  39. data/lib/chef-dk/skeletons/code_generator/recipes/cookbook.rb +1 -0
  40. data/lib/chef-dk/skeletons/code_generator/recipes/cookbook_file.rb +1 -0
  41. data/lib/chef-dk/skeletons/code_generator/recipes/helpers.rb +21 -0
  42. data/lib/chef-dk/skeletons/code_generator/recipes/policyfile.rb +1 -0
  43. data/lib/chef-dk/skeletons/code_generator/recipes/recipe.rb +1 -0
  44. data/lib/chef-dk/skeletons/code_generator/recipes/repo.rb +1 -0
  45. data/lib/chef-dk/skeletons/code_generator/recipes/{lwrp.rb → resource.rb} +1 -11
  46. data/lib/chef-dk/skeletons/code_generator/recipes/template.rb +3 -3
  47. data/lib/chef-dk/skeletons/code_generator/templates/default/helpers.rb.erb +39 -0
  48. data/lib/chef-dk/skeletons/code_generator/templates/default/metadata.rb.erb +1 -1
  49. data/lib/chef-dk/skeletons/code_generator/templates/default/resource.rb.erb +1 -0
  50. data/lib/chef-dk/version.rb +2 -2
  51. data/omnibus_overrides.rb +14 -12
  52. data/spec/unit/command/generator_commands/cookbook_spec.rb +7 -1
  53. data/spec/unit/command/generator_commands/helpers_spec.rb +31 -0
  54. data/spec/unit/command/generator_commands/{lwrp_spec.rb → resource_spec.rb} +5 -5
  55. data/spec/unit/command/install_spec.rb +2 -2
  56. data/spec/unit/command/update_spec.rb +11 -3
  57. data/spec/unit/command/verify_spec.rb +2 -1
  58. data/spec/unit/policyfile/artifactory_cookbook_source_spec.rb +59 -0
  59. data/spec/unit/policyfile/read_cookbook_for_compat_mode_upload_spec.rb +1 -1
  60. data/spec/unit/policyfile/solution_dependencies_spec.rb +25 -0
  61. data/spec/unit/policyfile_demands_spec.rb +2 -1
  62. data/spec/unit/policyfile_lock_build_spec.rb +23 -21
  63. data/spec/unit/policyfile_lock_install_spec.rb +2 -2
  64. data/spec/unit/policyfile_lock_validation_spec.rb +3 -3
  65. data/spec/unit/policyfile_services/export_repo_spec.rb +6 -6
  66. data/spec/unit/policyfile_services/install_spec.rb +1 -1
  67. data/spec/unit/policyfile_services/update_spec.rb +143 -0
  68. data/tasks/announce.rb +3 -2
  69. data/tasks/dependencies.rb +35 -111
  70. data/tasks/github_changelog_generator.rb +0 -3
  71. data/tasks/templates/prerelease.md.erb +1 -1
  72. data/tasks/templates/release.md.erb +1 -1
  73. metadata +20 -38
  74. data/lib/chef-dk/skeletons/code_generator/templates/default/provider.rb.erb +0 -0
  75. data/spec/unit/gemfile_util_spec.rb +0 -41
  76. data/spec/unit/helpers_spec.rb +0 -120
  77. data/spec/unit/tasks/helpers_spec.rb +0 -75
  78. data/tasks/bin/bundle-platform +0 -19
  79. data/tasks/bin/create-override-gemfile +0 -110
  80. data/tasks/bundle.rb +0 -96
  81. data/tasks/bundle_util.rb +0 -110
  82. data/tasks/gemfile_util.rb +0 -435
  83. data/tasks/helpers.rb +0 -47
  84. data/version_policy.rb +0 -142
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  context = ChefDK::Generator.context
2
3
  repo_dir = File.join(context.repo_root, context.repo_name)
3
4
 
@@ -1,23 +1,13 @@
1
-
1
+ # frozen_string_literal: true
2
2
  context = ChefDK::Generator.context
3
3
  cookbook_dir = File.join(context.cookbook_root, context.cookbook_name)
4
4
 
5
5
  resource_dir = File.join(cookbook_dir, 'resources')
6
6
  resource_path = File.join(resource_dir, "#{context.new_file_basename}.rb")
7
7
 
8
- provider_dir = File.join(cookbook_dir, 'providers')
9
- provider_path = File.join(provider_dir, "#{context.new_file_basename}.rb")
10
-
11
8
  directory resource_dir
12
9
 
13
10
  template resource_path do
14
11
  source 'resource.rb.erb'
15
12
  helpers(ChefDK::Generator::TemplateHelper)
16
13
  end
17
-
18
- directory provider_dir
19
-
20
- template provider_path do
21
- source 'provider.rb.erb'
22
- helpers(ChefDK::Generator::TemplateHelper)
23
- end
@@ -1,7 +1,7 @@
1
-
1
+ # frozen_string_literal: true
2
2
  context = ChefDK::Generator.context
3
3
  cookbook_dir = File.join(context.cookbook_root, context.cookbook_name)
4
- template_dir = File.join(cookbook_dir, 'templates', 'default')
4
+ template_dir = File.join(cookbook_dir, 'templates')
5
5
  template_filename = context.new_file_basename
6
6
 
7
7
  unless File.extname(template_filename) == '.erb'
@@ -19,7 +19,7 @@ end
19
19
  if context.content_source
20
20
 
21
21
  file template_path do
22
- content(IO.read(context.context_source))
22
+ content(IO.read(context.content_source))
23
23
  end
24
24
 
25
25
  else
@@ -0,0 +1,39 @@
1
+ #
2
+ # Chef Documentation
3
+ # https://docs.chef.io/libraries.html
4
+ #
5
+
6
+ #
7
+ # This module name was auto-generated from the cookbook name. This name is a
8
+ # single word that starts with a capital letter and then continues to use
9
+ # camel-casing throughout the remainder of the name.
10
+ #
11
+ module <%= @cookbook_class_name %>
12
+ module <%= @helper_class_name %>
13
+ #
14
+ # Define the methods that you would like to assist the work you do in recipes,
15
+ # resources, or templates.
16
+ #
17
+ # def my_helper_method
18
+ # # help method implementation
19
+ # end
20
+ end
21
+ end
22
+
23
+ #
24
+ # The module you have defined may be extended within the recipe to grant the
25
+ # recipe the helper methods you define.
26
+ #
27
+ # Within your recipe you would write:
28
+ #
29
+ # extend <%= @cookbook_class_name %>::<%= @helper_class_name %>
30
+ #
31
+ # my_helper_method
32
+ #
33
+ # You may also add this to a single resource within a recipe:
34
+ #
35
+ # template '/etc/app.conf' do
36
+ # extend <%= @cookbook_class_name %>::<%= @helper_class_name %>
37
+ # variables specific_key: my_helper_method
38
+ # end
39
+ #
@@ -13,7 +13,7 @@ chef_version '>= 12.1' if respond_to?(:chef_version)
13
13
  #
14
14
  # issues_url 'https://github.com/<insert_org_here>/<%= cookbook_name %>/issues'
15
15
 
16
- # The `source_url` points to the development reposiory for this cookbook. A
16
+ # The `source_url` points to the development repository for this cookbook. A
17
17
  # `View Source` link will be displayed on this cookbook's page when uploaded to
18
18
  # a Supermarket.
19
19
  #
@@ -0,0 +1 @@
1
+ # To learn more about Custom Resources, see https://docs.chef.io/custom_resources.html
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright:: Copyright (c) 2014-2017, Chef Software Inc.
2
+ # Copyright:: Copyright (c) 2014 Chef Software Inc.
3
3
  # License:: Apache License, Version 2.0
4
4
  #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -16,5 +16,5 @@
16
16
  #
17
17
 
18
18
  module ChefDK
19
- VERSION = "1.6.11"
19
+ VERSION = "2.0.26"
20
20
  end
@@ -1,20 +1,22 @@
1
- # DO NOT EDIT. Generated by "rake dependencies". Edit version_policy.rb instead.
2
- override :bundler, version: "1.16.0"
3
- override :rubygems, version: "2.6.14"
1
+ # THIS IS NOW HAND MANAGED, JUST EDIT THE THING
2
+ # .travis.yml and appveyor.yml consume this,
3
+ # try to keep it machine-parsable.
4
+ override :rubygems, version: "2.6.11"
5
+ override :bundler, version: "1.15.1"
4
6
  override "libffi", version: "3.2.1"
5
- override "libiconv", version: "1.15"
7
+ override "libiconv", version: "1.14"
6
8
  override "liblzma", version: "5.2.3"
7
- override "libxml2", version: "2.9.5"
8
- override "libxslt", version: "1.1.30"
9
- override "libyaml", version: "0.1.7"
9
+ override "libtool", version: "2.4.2"
10
+ override "libxml2", version: "2.9.4"
11
+ override "libxslt", version: "1.1.29"
12
+ override "libyaml", version: "0.1.6"
10
13
  override "makedepend", version: "1.0.5"
11
14
  override "ncurses", version: "5.9"
12
- override "openssl", version: "1.0.2m"
13
15
  override "pkg-config-lite", version: "0.28-1"
14
- override "ruby", version: "2.3.5"
16
+ override "ruby", version: "2.4.1"
17
+ override "ruby-windows-devkit-bash", version: "3.1.23-4-msys-1.0.18"
15
18
  override "util-macros", version: "1.19.0"
16
19
  override "xproto", version: "7.0.28"
17
20
  override "zlib", version: "1.2.11"
18
- override "libtool", version: "2.4.2"
19
- override "ruby-windows-devkit-bash", version: "3.1.23-4-msys-1.0.18"
20
- override "libzmq", version: "4.0.7"
21
+ override "libzmq", version: "4.0.5"
22
+ override "openssl", version: "1.0.2l"
@@ -198,7 +198,7 @@ lint = "chef exec cookstyle"
198
198
  # uploaded to Supermarket. We turn off any rules tagged "supermarket"
199
199
  # by default. If you plan to share this cookbook you should remove
200
200
  # '-t ~supermarket' below to enable supermarket rules.
201
- syntax = "chef exec foodcritic . --exclude spec -f any -t ~supermarket"
201
+ syntax = "chef exec foodcritic . -t ~supermarket"
202
202
  provision = "chef exec kitchen create"
203
203
  deploy = "chef exec kitchen converge"
204
204
  smoke = "chef exec kitchen verify"
@@ -235,6 +235,9 @@ PROJECT_DOT_TOML
235
235
  "name": "build_cookbook",
236
236
  "path": ".delivery/build_cookbook"
237
237
  },
238
+ "delivery-truck": {
239
+ "enable_cookstyle": true
240
+ },
238
241
  "skip_phases": [],
239
242
  "job_dispatch": {
240
243
  "version": "v2"
@@ -589,6 +592,7 @@ KITCHEN_YML
589
592
 
590
593
  let(:expected_chefspec_spec_helper_content) do
591
594
  <<-SPEC_HELPER
595
+ # frozen_string_literal: true
592
596
  require 'chefspec'
593
597
  require 'chefspec/policyfile'
594
598
  SPEC_HELPER
@@ -608,6 +612,7 @@ SPEC_HELPER
608
612
 
609
613
  let(:expected_content) do
610
614
  <<-POLICYFILE_RB
615
+ # frozen_string_literal: true
611
616
  source 'https://supermarket.chef.io'
612
617
 
613
618
  metadata
@@ -666,6 +671,7 @@ KITCHEN_YML
666
671
 
667
672
  let(:expected_chefspec_spec_helper_content) do
668
673
  <<-SPEC_HELPER
674
+ # frozen_string_literal: true
669
675
  require 'chefspec'
670
676
  require 'chefspec/berkshelf'
671
677
  SPEC_HELPER
@@ -0,0 +1,31 @@
1
+ #
2
+ # Copyright:: Copyright (c) 2014 Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require 'spec_helper'
19
+ require 'shared/a_file_generator'
20
+ require 'chef-dk/command/generator_commands/helpers'
21
+
22
+ describe ChefDK::Command::GeneratorCommands::Helpers do
23
+
24
+ include_examples "a file generator" do
25
+
26
+ let(:generator_name) { "helpers" }
27
+ let(:generated_files) { [ "libraries/new_helpers.rb" ] }
28
+ let(:new_file_name) { "new_helpers" }
29
+
30
+ end
31
+ end
@@ -17,15 +17,15 @@
17
17
 
18
18
  require "spec_helper"
19
19
  require "shared/a_file_generator"
20
- require "chef-dk/command/generator_commands/lwrp"
20
+ require "chef-dk/command/generator_commands/resource"
21
21
 
22
- describe ChefDK::Command::GeneratorCommands::LWRP do
22
+ describe ChefDK::Command::GeneratorCommands::Resource do
23
23
 
24
24
  include_examples "a file generator" do
25
25
 
26
- let(:generator_name) { "lwrp" }
27
- let(:generated_files) { [ "resources/new_lwrp.rb", "providers/new_lwrp.rb" ] }
28
- let(:new_file_name) { "new_lwrp" }
26
+ let(:generator_name) { "resource" }
27
+ let(:generated_files) { [ "resources/new_resource.rb" ] }
28
+ let(:new_file_name) { "new_resource" }
29
29
 
30
30
  end
31
31
  end
@@ -78,7 +78,7 @@ describe ChefDK::Command::Install do
78
78
 
79
79
  it "creates the installer service with a `nil` policyfile path" do
80
80
  expect(ChefDK::PolicyfileServices::Install).to receive(:new).
81
- with(hash_including(policyfile: nil, ui: command.ui, root_dir: Dir.pwd)).
81
+ with(hash_including(policyfile: nil, ui: command.ui, root_dir: Dir.pwd, config: Chef::Config)).
82
82
  and_return(install_service)
83
83
  expect(command.installer).to eq(install_service)
84
84
  end
@@ -95,7 +95,7 @@ describe ChefDK::Command::Install do
95
95
 
96
96
  it "creates the installer service with the specified policyfile path" do
97
97
  expect(ChefDK::PolicyfileServices::Install).to receive(:new).
98
- with(hash_including(policyfile: "MyPolicy.rb", ui: command.ui, root_dir: Dir.pwd)).
98
+ with(hash_including(policyfile: "MyPolicy.rb", ui: command.ui, root_dir: Dir.pwd, config: Chef::Config)).
99
99
  and_return(install_service)
100
100
  expect(command.installer).to eq(install_service)
101
101
  end
@@ -77,7 +77,7 @@ describe ChefDK::Command::Update do
77
77
  let(:params) { ["-a"] }
78
78
 
79
79
  it "enables attributes update mode" do
80
- expect(command.update_attributes?).to be(true)
80
+ expect(command.update_attributes_only?).to be(true)
81
81
  end
82
82
 
83
83
  it "creates an attributes update service object" do
@@ -96,7 +96,7 @@ describe ChefDK::Command::Update do
96
96
 
97
97
  it "creates the installer service with a `nil` policyfile path" do
98
98
  expect(ChefDK::PolicyfileServices::Install).to receive(:new).
99
- with(policyfile: nil, ui: command.ui, root_dir: Dir.pwd, overwrite: true).
99
+ with(policyfile: nil, ui: command.ui, root_dir: Dir.pwd, config: Chef::Config, overwrite: true).
100
100
  and_return(install_service)
101
101
  expect(command.installer).to eq(install_service)
102
102
  end
@@ -113,7 +113,7 @@ describe ChefDK::Command::Update do
113
113
 
114
114
  it "creates the installer service with the specified policyfile path" do
115
115
  expect(ChefDK::PolicyfileServices::Install).to receive(:new).
116
- with(policyfile: "MyPolicy.rb", ui: command.ui, root_dir: Dir.pwd, overwrite: true).
116
+ with(policyfile: "MyPolicy.rb", ui: command.ui, root_dir: Dir.pwd, config: Chef::Config, overwrite: true).
117
117
  and_return(install_service)
118
118
  expect(command.installer).to eq(install_service)
119
119
  end
@@ -132,6 +132,10 @@ describe ChefDK::Command::Update do
132
132
  context "when the command is successful" do
133
133
  before do
134
134
  expect(install_service).to receive(:run)
135
+ expect(ChefDK::PolicyfileServices::UpdateAttributes).to receive(:new).
136
+ with(policyfile: nil, ui: command.ui, root_dir: Dir.pwd).
137
+ and_return(update_attrs_service)
138
+ expect(update_attrs_service).to receive(:run)
135
139
  end
136
140
 
137
141
  it "returns 0" do
@@ -155,6 +159,10 @@ describe ChefDK::Command::Update do
155
159
 
156
160
  before do
157
161
  expect(install_service).to receive(:run).and_raise(exception)
162
+ expect(ChefDK::PolicyfileServices::UpdateAttributes).to receive(:new).
163
+ with(policyfile: nil, ui: command.ui, root_dir: Dir.pwd).
164
+ and_return(update_attrs_service)
165
+ expect(update_attrs_service).to receive(:run)
158
166
  end
159
167
 
160
168
  it "returns 1" do
@@ -45,7 +45,6 @@ describe ChefDK::Command::Verify do
45
45
  "chef-provisioning",
46
46
  "chefspec",
47
47
  "generated-cookbooks-pass-chefspec",
48
- "rubocop",
49
48
  "fauxhai",
50
49
  "knife-spork",
51
50
  "kitchen-vagrant",
@@ -106,6 +105,7 @@ describe ChefDK::Command::Verify do
106
105
 
107
106
  describe "when running verify command" do
108
107
  let(:stdout_io) { StringIO.new }
108
+ let(:stderr_io) { StringIO.new }
109
109
  let(:ruby_path) { File.join(fixtures_path, "eg_omnibus_dir/valid/embedded/bin/ruby") }
110
110
 
111
111
  def run_unit_test
@@ -170,6 +170,7 @@ describe ChefDK::Command::Verify do
170
170
  before do
171
171
  allow(Gem).to receive(:ruby).and_return(ruby_path)
172
172
  allow(command_instance).to receive(:stdout).and_return(stdout_io)
173
+ allow(command_instance).to receive(:stderr).and_return(stderr_io)
173
174
  allow(command_instance).to receive(:components).and_return(components)
174
175
  end
175
176
 
@@ -0,0 +1,59 @@
1
+ #
2
+ # Copyright:: Copyright (c) 2014 Chef Software Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require "spec_helper"
19
+ require "chef-dk/policyfile/source_uri"
20
+ require "chef-dk/policyfile/artifactory_cookbook_source"
21
+
22
+ describe ChefDK::Policyfile::ArtifactoryCookbookSource do
23
+ subject { described_class.new(cookbook_source) }
24
+
25
+ let(:cookbook_source) { "https://supermarket.chef.io/api/v1" }
26
+
27
+ let(:http_connection) { double("Chef::HTTP::Simple") }
28
+
29
+ let(:universe_response_encoded) { IO.read(File.join(fixtures_path, "cookbooks_api/small_universe.json")) }
30
+
31
+ let(:pruned_universe) { JSON.parse(IO.read(File.join(fixtures_path, "cookbooks_api/pruned_small_universe.json"))) }
32
+
33
+ describe "fetching the Universe graph" do
34
+
35
+ before do
36
+ expect(subject).to receive(:http_connection_for).with(cookbook_source).and_return(http_connection)
37
+ allow(http_connection).to receive(:get).with("/universe").and_return(universe_response_encoded)
38
+ end
39
+
40
+ it "fetches the universe graph" do
41
+ expect(http_connection).to receive(:get).with("/universe").and_return(universe_response_encoded)
42
+ actual_universe = subject.universe_graph
43
+ expect(actual_universe).to have_key("apt")
44
+ expect(actual_universe["apt"]).to eq(pruned_universe["apt"])
45
+ expect(subject.universe_graph).to eq(pruned_universe)
46
+ end
47
+
48
+ it "generates location options for a cookbook from the given graph" do
49
+ cookbook_url = "https://supermarket.chef.io/api/v1/cookbooks/apache2/versions/1.10.4/download"
50
+ expect(subject).to receive(:http_connection_for).with(cookbook_url).and_return(http_connection)
51
+ expected_opts = {
52
+ artifactory: cookbook_url,
53
+ http_client: http_connection,
54
+ version: "1.10.4",
55
+ }
56
+ expect(subject.source_options_for("apache2", "1.10.4")).to eq(expected_opts)
57
+ end
58
+ end
59
+ end
@@ -85,7 +85,7 @@ describe ChefDK::Policyfile::ReadCookbookForCompatModeUpload do
85
85
  end
86
86
 
87
87
  it "excludes ignored files from the list of cookbook files" do
88
- expect(reader_with_ignored_files.cookbook_version.root_filenames).to_not include(chefignored_file)
88
+ expect(reader_with_ignored_files.cookbook_version.files_for("root_files")).to_not include(chefignored_file)
89
89
  end
90
90
 
91
91
  end
@@ -69,6 +69,31 @@ describe ChefDK::Policyfile::SolutionDependencies do
69
69
 
70
70
  end
71
71
 
72
+ context 'when populated with dependency data from a complex lockfile' do
73
+ let(:dependency_data) do
74
+ {
75
+ "Policyfile" => [
76
+ [ "a", ">= 0.0.0"], ["b", ">= 0.0.0" ]
77
+ ],
78
+ "dependencies" => {
79
+ "a (0.1.0)" => [ ["c", "~> 1.0.0"], ["d", "~> 0.0.0"] ],
80
+ "b (1.0.0)" => [ ["f", ">= 0.0.1"] ],
81
+ "c (1.0.1)" => [ ["e", ">= 0.0.1"] ],
82
+ "d (0.0.1)" => [],
83
+ "e (0.0.1)" => [],
84
+ "f (0.0.1)" => [],
85
+ },
86
+ }
87
+ end
88
+ it "can compute list of transitive dependencies" do
89
+
90
+ expect(solution_dependencies.transitive_deps(["e"])).to eq(["e"])
91
+ expect(solution_dependencies.transitive_deps(["c"])).to eq(["c", "e"])
92
+ expect(solution_dependencies.transitive_deps(["c", "d"])).to eq(["c", "d", "e"])
93
+ expect(solution_dependencies.transitive_deps(["a"])).to eq(["a", "c", "d", "e"])
94
+ end
95
+ end
96
+
72
97
  context "when populated with dependency data" do
73
98
 
74
99
  let(:expected_deps_for_lock) do
@@ -861,12 +861,13 @@ MESSAGE
861
861
 
862
862
  it "includes the policyfile constraint in the solution dependencies" do
863
863
  expected_solution_deps = {
864
- "Policyfile" => [ [ "remote-cb", "~> 0.1" ], [ "local-cookbook", ">= 0.0.0"] ],
864
+ "Policyfile" => [ [ "local-cookbook", ">= 0.0.0" ], [ "remote-cb", "~> 0.1" ] ],
865
865
  "dependencies" => {
866
866
  "local-cookbook (2.3.4)" => [],
867
867
  "remote-cb (0.1.0)" => [],
868
868
  },
869
869
 
870
+
870
871
  }
871
872
  expect(policyfile.solution_dependencies.to_lock).to eq(expected_solution_deps)
872
873
  end