license-acceptance 0.2.13 → 0.2.15

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a4e838f450a28b5543cbf2ebf0a620b4274567cc1f42067d2ebd859a5e122005
4
- data.tar.gz: 6257b8dd5964e8058e7614c219ebbe60234f9f060dff4c52cdd4df3a295daecb
3
+ metadata.gz: 2ff1d1fbab957952084fe44a975d3c4ddf8bbccfebda7e3a7c54caafd3f5bd28
4
+ data.tar.gz: 6a7274ee80f7da6465ab928c2e85e02a2da180028e449a2cc04ba7bc956bd655
5
5
  SHA512:
6
- metadata.gz: 81e308d0664299c9797fa0b06470f550aac3087f9d154ee0f8b3737aff4cfc09fca669a80f81d4be726d01e4166124ea3747630720f32d8115bc1c5d5fb38722
7
- data.tar.gz: 3677568ac06e369235ecba67c6ae38cd4f271a9ca19f495c8d2e789e32e18eea559fe40aea9a8f1b60cdef659828f5b892eacf1c70099ea83cae1b846bd27cf1
6
+ metadata.gz: 343c73d26b864e316cd742065d2b83527ee6d64ba5ff7bd97a00fa9c05c00c6fdf4ee61c9ddd3cfdd40225c6bdb7bf06fdcb601e425c529c1341e3b586523999
7
+ data.tar.gz: 3205485af5f026d1d888dec565c229e1c843acc9558693a217b74df70f217cf43124a9c438197a2b6e37874086c3b25dbdac7cf68d2e0724baeab110c1a019a5
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- license-acceptance (0.2.13)
4
+ license-acceptance (0.2.15)
5
5
  pastel (~> 0.7)
6
6
  tomlrb (~> 1.2)
7
7
  tty-box (~> 0.3)
@@ -6,6 +6,8 @@ name = "chef-client"
6
6
  pretty_name = "Chef Client"
7
7
  hab_pkg_id = "chef/chef-client"
8
8
  filename = "chef_client"
9
+ mixlib_name = "chef"
10
+ license_required_version = "15"
9
11
 
10
12
  [[products]]
11
13
  name = "inspec"
@@ -10,6 +10,11 @@ require "license_acceptance/strategy/prompt"
10
10
  require "license_acceptance/strategy/provided_value"
11
11
 
12
12
  module LicenseAcceptance
13
+
14
+ ACCEPT = "accept"
15
+ ACCEPT_SILENT = "accept-silent"
16
+ ACCEPT_NO_PERSIST = "accept-no-persist"
17
+
13
18
  class Acceptor
14
19
  extend Forwardable
15
20
  include Logger
@@ -20,11 +25,13 @@ module LicenseAcceptance
20
25
  @config = Config.new(opts)
21
26
  Logger.initialize(config.logger)
22
27
  @product_reader = ProductReader.new
28
+ product_reader.read
23
29
  @env_strategy = Strategy::Environment.new(ENV)
24
30
  @file_strategy = Strategy::File.new(config)
25
31
  @arg_strategy = Strategy::Argument.new(ARGV)
26
32
  @prompt_strategy = Strategy::Prompt.new(config)
27
33
  @provided_strategy = Strategy::ProvidedValue.new(opts.fetch(:provided, nil))
34
+ @acceptance_value = nil
28
35
  end
29
36
 
30
37
  def_delegator :@config, :output
@@ -42,10 +49,10 @@ module LicenseAcceptance
42
49
  def check_and_persist(product_name, version)
43
50
  if accepted_no_persist?
44
51
  logger.debug("Chef License accepted with no persistence")
52
+ @acceptance_value = ACCEPT_NO_PERSIST
45
53
  return true
46
54
  end
47
55
 
48
- product_reader.read
49
56
  product_relationship = product_reader.lookup(product_name, version)
50
57
 
51
58
  missing_licenses = file_strategy.accepted?(product_relationship)
@@ -53,6 +60,7 @@ module LicenseAcceptance
53
60
  # They have already accepted all licenses and stored their acceptance in the persistent files
54
61
  if missing_licenses.empty?
55
62
  logger.debug("All licenses present")
63
+ @acceptance_value = ACCEPT
56
64
  return true
57
65
  end
58
66
 
@@ -65,11 +73,15 @@ module LicenseAcceptance
65
73
  output_persist_failed(errs)
66
74
  end
67
75
  end
76
+ @acceptance_value = accepted_silent? ? ACCEPT_SILENT : ACCEPT
68
77
  return true
69
78
  elsif config.output.isatty && prompt_strategy.request(missing_licenses) do
79
+ # We have to infer the acceptance value if they use the prompt to accept
70
80
  if config.persist
81
+ @acceptance_value = ACCEPT
71
82
  file_strategy.persist(product_relationship, missing_licenses)
72
83
  else
84
+ @acceptance_value = ACCEPT_NO_PERSIST
73
85
  []
74
86
  end
75
87
  end
@@ -87,6 +99,29 @@ module LicenseAcceptance
87
99
  new(opts).check_and_persist(product_name, version)
88
100
  end
89
101
 
102
+ # Check whether the specified product requires license acceptance for the given version.
103
+ def license_required?(mixlib_name, version)
104
+ product = product_reader.lookup_by_mixlib(mixlib_name)
105
+ return false if product.nil?
106
+ return true if version == :latest
107
+ Gem::Version.new(version) >= Gem::Version.new(product.license_required_version)
108
+ end
109
+
110
+ # Some callers only know about mixlib names so we need a way for them to get the product
111
+ # name as this library knows it.
112
+ def name_from_mixlib(mixlib_name)
113
+ product = product_reader.lookup_by_mixlib(mixlib_name)
114
+ return nil if product.nil?
115
+ product.name
116
+ end
117
+
118
+ # Return the value that was matched ("accept", "accept-no-persist", etc.). Used by callers so they do not
119
+ # have to know the precedence order between provided/environment/argument. Can just get back the value
120
+ # that was used. Value is only guaranteed to be set after calling check_and_persist.
121
+ def acceptance_value
122
+ @acceptance_value
123
+ end
124
+
90
125
  def accepted?
91
126
  provided_strategy.accepted? || env_strategy.accepted? || arg_strategy.accepted?
92
127
  end
@@ -125,7 +160,7 @@ module LicenseAcceptance
125
160
 
126
161
  class LicenseNotAcceptedError < RuntimeError
127
162
  def initialize(missing_licenses)
128
- msg = "Missing licenses for the following:\n* " + missing_licenses.join("\n* ")
163
+ msg = "Missing licenses for the following:\n* " + missing_licenses.map(&:name).join("\n* ")
129
164
  super(msg)
130
165
  end
131
166
  end
@@ -1,19 +1,23 @@
1
1
  module LicenseAcceptance
2
2
  class Product
3
3
 
4
- attr_reader :name, :pretty_name, :filename
4
+ attr_reader :name, :pretty_name, :filename, :mixlib_name, :license_required_version
5
5
 
6
- def initialize(name, pretty_name, filename)
6
+ def initialize(name, pretty_name, filename, mixlib_name, license_required_version)
7
7
  @name = name
8
8
  @pretty_name = pretty_name
9
9
  @filename = filename
10
+ @mixlib_name = mixlib_name
11
+ @license_required_version = license_required_version
10
12
  end
11
13
 
12
14
  def ==(other)
13
15
  return false if other.class != Product
14
16
  if other.name == name &&
15
17
  other.pretty_name == pretty_name &&
16
- other.filename == filename
18
+ other.filename == filename &&
19
+ other.mixlib_name == mixlib_name
20
+ other.license_required_version == license_required_version
17
21
  return true
18
22
  end
19
23
  return false
@@ -19,7 +19,11 @@ module LicenseAcceptance
19
19
  raise InvalidProductInfo.new(location) if toml.empty? || toml["products"].nil? || toml["relationships"].nil?
20
20
 
21
21
  for product in toml["products"]
22
- products[product["name"]] = Product.new(product["name"], product["pretty_name"], product["filename"])
22
+ products[product["name"]] = Product.new(
23
+ product["name"], product["pretty_name"],
24
+ product["filename"], product["mixlib_name"],
25
+ product["license_required_version"]
26
+ )
23
27
  end
24
28
 
25
29
  for parent_name, children in toml["relationships"]
@@ -62,6 +66,13 @@ module LicenseAcceptance
62
66
  ProductRelationship.new(parent_product, children, parent_version)
63
67
  end
64
68
 
69
+ def lookup_by_mixlib(mixlib_name)
70
+ found_product = products.values.find(nil) do |p|
71
+ p.mixlib_name == mixlib_name
72
+ end
73
+ found_product
74
+ end
75
+
65
76
  end
66
77
 
67
78
  class UnknownProduct < RuntimeError
@@ -2,10 +2,6 @@ module LicenseAcceptance
2
2
  module Strategy
3
3
  class Base
4
4
 
5
- ACCEPT = "accept"
6
- ACCEPT_SILENT = "accept-silent"
7
- ACCEPT_NO_PERSIST = "accept-no-persist"
8
-
9
5
  end
10
6
  end
11
7
  end
@@ -1,3 +1,3 @@
1
1
  module LicenseAcceptance
2
- VERSION = "0.2.13"
2
+ VERSION = "0.2.15"
3
3
  end
@@ -13,18 +13,17 @@ RSpec.describe LicenseAcceptance::Acceptor do
13
13
  end
14
14
  let(:opts) { { output: output } }
15
15
  let(:acc) { LicenseAcceptance::Acceptor.new(opts) }
16
- let(:product) { "chef_client" }
16
+ let(:product) { instance_double(LicenseAcceptance::Product, name: "chef_client") }
17
17
  let(:version) { "version" }
18
18
  let(:relationship) { instance_double(LicenseAcceptance::ProductRelationship) }
19
- let(:p1) { instance_double(LicenseAcceptance::Product) }
20
- let(:missing) { [p1] }
19
+ let(:missing) { [product] }
21
20
 
22
21
  describe "#check_and_persist!" do
23
22
  let(:err) { LicenseAcceptance::LicenseNotAcceptedError.new([product]) }
24
23
  it "outputs an error message to stdout and exits when license acceptance is declined" do
25
24
  expect(acc).to receive(:check_and_persist).and_raise(err)
26
- expect { acc.check_and_persist!(product, version) }.to raise_error(SystemExit)
27
- expect(output.string).to match(/#{product}/)
25
+ expect { acc.check_and_persist!(product.name, version) }.to raise_error(SystemExit)
26
+ expect(output.string).to match(/#{product.name}/)
28
27
  end
29
28
  end
30
29
 
@@ -53,12 +52,15 @@ RSpec.describe LicenseAcceptance::Acceptor do
53
52
  allow(provided_acc).to receive(:silent?).and_return(false)
54
53
  allow(env_acc).to receive(:silent?).and_return(false)
55
54
  allow(arg_acc).to receive(:silent?).and_return(false)
55
+
56
+ expect(reader).to receive(:read)
56
57
  end
57
58
 
58
59
  describe "when accept-no-persist is provided from the caller" do
59
60
  it "returns true" do
60
61
  expect(provided_acc).to receive(:no_persist?).and_return(true)
61
62
  expect(acc.check_and_persist(product, version)).to eq(true)
63
+ expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT_NO_PERSIST)
62
64
  end
63
65
  end
64
66
 
@@ -66,6 +68,7 @@ RSpec.describe LicenseAcceptance::Acceptor do
66
68
  it "returns true" do
67
69
  expect(env_acc).to receive(:no_persist?).and_return(true)
68
70
  expect(acc.check_and_persist(product, version)).to eq(true)
71
+ expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT_NO_PERSIST)
69
72
  end
70
73
  end
71
74
 
@@ -73,39 +76,40 @@ RSpec.describe LicenseAcceptance::Acceptor do
73
76
  it "returns true" do
74
77
  expect(arg_acc).to receive(:no_persist?).and_return(true)
75
78
  expect(acc.check_and_persist(product, version)).to eq(true)
79
+ expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT_NO_PERSIST)
76
80
  end
77
81
  end
78
82
 
79
83
  describe "when there are no missing licenses" do
80
84
  it "returns true" do
81
- expect(reader).to receive(:read)
82
85
  expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
83
86
  expect(file_acc).to receive(:accepted?).with(relationship).and_return([])
84
87
  expect(acc.check_and_persist(product, version)).to eq(true)
88
+ expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT)
85
89
  end
86
90
  end
87
91
 
88
92
  describe "when the user accepts as an environment variable" do
89
93
  it "returns true" do
90
- expect(reader).to receive(:read)
91
94
  expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
92
95
  expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
93
96
  expect(env_acc).to receive(:accepted?).and_return(true)
94
97
  expect(file_acc).to receive(:persist).with(relationship, missing).and_return([])
95
98
  expect(acc.check_and_persist(product, version)).to eq(true)
96
99
  expect(output.string).to match(/1 product license accepted./)
100
+ expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT)
97
101
  end
98
102
 
99
103
  describe "when persist is set to false" do
100
104
  let(:opts) { { output: output, persist: false } }
101
105
 
102
106
  it "returns true" do
103
- expect(reader).to receive(:read)
104
107
  expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
105
108
  expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
106
109
  expect(env_acc).to receive(:accepted?).and_return(true)
107
110
  expect(acc.check_and_persist(product, version)).to eq(true)
108
111
  expect(output.string).to_not match(/accepted./)
112
+ expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT)
109
113
  end
110
114
  end
111
115
 
@@ -113,51 +117,51 @@ RSpec.describe LicenseAcceptance::Acceptor do
113
117
  let(:opts) { { output: output } }
114
118
 
115
119
  it "returns true and silently persists the file" do
116
- expect(reader).to receive(:read)
117
120
  expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
118
121
  expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
119
- expect(env_acc).to receive(:silent?).twice.and_return(true)
122
+ expect(env_acc).to receive(:silent?).times.exactly(3).and_return(true)
120
123
  expect(file_acc).to receive(:persist).with(relationship, missing).and_return([])
121
124
  expect(acc.check_and_persist(product, version)).to eq(true)
122
125
  expect(output.string).to be_empty
126
+ expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT_SILENT)
123
127
  end
124
128
  end
125
129
 
126
130
  describe "when file persistance fails" do
127
131
  it "returns true" do
128
- expect(reader).to receive(:read)
129
132
  expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
130
133
  expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
131
134
  expect(env_acc).to receive(:accepted?).and_return(true)
132
135
  expect(file_acc).to receive(:persist).with(relationship, missing).and_return([StandardError.new("foo")])
133
136
  expect(acc.check_and_persist(product, version)).to eq(true)
134
137
  expect(output.string).to match(/Could not persist acceptance:/)
138
+ expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT)
135
139
  end
136
140
  end
137
141
  end
138
142
 
139
143
  describe "when the user accepts as an arg" do
140
144
  it "returns true" do
141
- expect(reader).to receive(:read)
142
145
  expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
143
146
  expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
144
147
  expect(arg_acc).to receive(:accepted?).and_return(true)
145
148
  expect(file_acc).to receive(:persist).with(relationship, missing).and_return([])
146
149
  expect(acc.check_and_persist(product, version)).to eq(true)
147
150
  expect(output.string).to match(/1 product license accepted./)
151
+ expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT)
148
152
  end
149
153
 
150
154
  describe "when the silent option is used" do
151
155
  let(:opts) { { output: output } }
152
156
 
153
157
  it "returns true and silently persists the file" do
154
- expect(reader).to receive(:read)
155
158
  expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
156
159
  expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
157
- expect(arg_acc).to receive(:silent?).twice.and_return(true)
160
+ expect(arg_acc).to receive(:silent?).times.exactly(3).and_return(true)
158
161
  expect(file_acc).to receive(:persist).with(relationship, missing).and_return([])
159
162
  expect(acc.check_and_persist(product, version)).to eq(true)
160
163
  expect(output.string).to be_empty
164
+ expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT_SILENT)
161
165
  end
162
166
  end
163
167
 
@@ -166,24 +170,24 @@ RSpec.describe LicenseAcceptance::Acceptor do
166
170
  let(:opts) { { output: output, persist: false } }
167
171
 
168
172
  it "returns true" do
169
- expect(reader).to receive(:read)
170
173
  expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
171
174
  expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
172
175
  expect(arg_acc).to receive(:accepted?).and_return(true)
173
176
  expect(acc.check_and_persist(product, version)).to eq(true)
174
177
  expect(output.string).to_not match(/accepted./)
178
+ expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT)
175
179
  end
176
180
  end
177
181
 
178
182
  describe "when file persistance fails" do
179
183
  it "returns true" do
180
- expect(reader).to receive(:read)
181
184
  expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
182
185
  expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
183
186
  expect(arg_acc).to receive(:accepted?).and_return(true)
184
187
  expect(file_acc).to receive(:persist).with(relationship, missing).and_return([StandardError.new("bar")])
185
188
  expect(acc.check_and_persist(product, version)).to eq(true)
186
189
  expect(output.string).to match(/Could not persist acceptance:/)
190
+ expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT)
187
191
  end
188
192
  end
189
193
  end
@@ -191,44 +195,44 @@ RSpec.describe LicenseAcceptance::Acceptor do
191
195
  describe "when the prompt is not a tty" do
192
196
  let(:opts) { { output: File.open(File::NULL, "w") } }
193
197
  it "raises a LicenseNotAcceptedError error" do
194
- expect(reader).to receive(:read)
195
198
  expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
196
199
  expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
197
200
  expect(prompt_acc).to_not receive(:request)
198
201
  expect { acc.check_and_persist(product, version) }.to raise_error(LicenseAcceptance::LicenseNotAcceptedError)
202
+ expect(acc.acceptance_value).to eq(nil)
199
203
  end
200
204
  end
201
205
 
202
206
  describe "when the user accepts with the prompt" do
203
207
  it "returns true" do
204
- expect(reader).to receive(:read)
205
208
  expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
206
209
  expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
207
210
  expect(prompt_acc).to receive(:request).with(missing).and_yield.and_return(true)
208
211
  expect(file_acc).to receive(:persist).with(relationship, missing)
209
212
  expect(acc.check_and_persist(product, version)).to eq(true)
213
+ expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT)
210
214
  end
211
215
 
212
216
  describe "when persist is set to false" do
213
217
  let(:opts) { { output: output, persist: false } }
214
218
 
215
219
  it "returns true" do
216
- expect(reader).to receive(:read)
217
220
  expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
218
221
  expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
219
222
  expect(prompt_acc).to receive(:request).with(missing).and_yield.and_return(true)
220
223
  expect(acc.check_and_persist(product, version)).to eq(true)
224
+ expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT_NO_PERSIST)
221
225
  end
222
226
  end
223
227
  end
224
228
 
225
229
  describe "when the user declines with the prompt" do
226
230
  it "raises a LicenseNotAcceptedError error" do
227
- expect(reader).to receive(:read)
228
231
  expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
229
232
  expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
230
233
  expect(prompt_acc).to receive(:request).with(missing).and_return(false)
231
234
  expect { acc.check_and_persist(product, version) }.to raise_error(LicenseAcceptance::LicenseNotAcceptedError)
235
+ expect(acc.acceptance_value).to eq(nil)
232
236
  end
233
237
  end
234
238
 
@@ -7,11 +7,11 @@ RSpec.describe LicenseAcceptance::ProductReader do
7
7
  let(:version) { "0.1.0" }
8
8
  let(:location) { "location" }
9
9
 
10
- let(:p1) { {"name" => "p1", "pretty_name" => "P1", "filename" => "f1"} }
11
- let(:p2) { {"name" => "p2", "pretty_name" => "P2", "filename" => "f2"} }
10
+ let(:p1) { {"name" => "p1", "pretty_name" => "P1", "filename" => "f1", "mixlib_name" => "p1m", "license_required_version" => "p1v"} }
11
+ let(:p2) { {"name" => "p2", "pretty_name" => "P2", "filename" => "f2", "mixlib_name" => "p2m", "license_required_version" => "p2v"} }
12
12
  # defined the `==` operator on Product for ease of comparison
13
- let(:product1) { LicenseAcceptance::Product.new(p1["name"], p1["pretty_name"], p1["filename"]) }
14
- let(:product2) { LicenseAcceptance::Product.new(p2["name"], p2["pretty_name"], p2["filename"]) }
13
+ let(:product1) { LicenseAcceptance::Product.new(p1["name"], p1["pretty_name"], p1["filename"], p1["mixlib_name"], p1["license_required_version"]) }
14
+ let(:product2) { LicenseAcceptance::Product.new(p2["name"], p2["pretty_name"], p2["filename"], p2["mixlib_name"], p2["license_required_version"]) }
15
15
  let(:r1) { {p1 => p2} }
16
16
  let(:toml) { {"products" => [p1, p2], "relationships" => {"p1" => ["p2"]}} }
17
17
 
@@ -114,7 +114,7 @@ RSpec.describe LicenseAcceptance::ProductReader do
114
114
  end
115
115
  end
116
116
 
117
- let(:nonya) { LicenseAcceptance::Product.new("nonya", "NonYa", "nofile") }
117
+ let(:nonya) { LicenseAcceptance::Product.new("nonya", "NonYa", "nofile", "no_mixlib", "no_version") }
118
118
  describe "when called on a product with no relationship" do
119
119
  before do
120
120
  reader.products = { "nonya" => nonya }
@@ -136,4 +136,20 @@ RSpec.describe LicenseAcceptance::ProductReader do
136
136
  end
137
137
  end
138
138
 
139
+ describe "::lookup_by_mixlib" do
140
+ before do
141
+ expect(reader).to receive(:get_location).and_return(location)
142
+ expect(Tomlrb).to receive(:load_file).with(location, symbolize_keys: false).and_return(toml)
143
+ reader.read
144
+ end
145
+
146
+ it "returns a Product successfully" do
147
+ expect(reader.lookup_by_mixlib("p1m")).to eq(product1)
148
+ end
149
+
150
+ it "returns nil for an unknown product" do
151
+ expect(reader.lookup_by_mixlib("foo")).to eq(nil)
152
+ end
153
+ end
154
+
139
155
  end
@@ -2,12 +2,14 @@ require "spec_helper"
2
2
  require "license_acceptance/product"
3
3
 
4
4
  RSpec.describe LicenseAcceptance::Product do
5
- let(:instance) { LicenseAcceptance::Product.new("name", "Pretty Name", "filename") }
5
+ let(:instance) { LicenseAcceptance::Product.new("name", "Pretty Name", "filename", "mixlib_name", "version") }
6
6
 
7
7
  it "can lookup the product attributes" do
8
8
  expect(instance.name).to eq("name")
9
9
  expect(instance.pretty_name).to eq("Pretty Name")
10
10
  expect(instance.filename).to eq("filename")
11
+ expect(instance.mixlib_name).to eq("mixlib_name")
12
+ expect(instance.license_required_version).to eq("version")
11
13
  end
12
14
 
13
15
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: license-acceptance
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.13
4
+ version: 0.2.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - tyler-ball
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-23 00:00:00.000000000 Z
11
+ date: 2019-04-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pastel