license-acceptance 1.0.13 → 1.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/license_acceptance/version.rb +1 -1
- metadata +12 -20
- data/Gemfile.lock +0 -91
- data/Rakefile +0 -6
- data/spec/license_acceptance/acceptor_spec.rb +0 -302
- data/spec/license_acceptance/cli_flags/mixlib_cli_spec.rb +0 -14
- data/spec/license_acceptance/cli_flags/thor_spec.rb +0 -14
- data/spec/license_acceptance/config_spec.rb +0 -111
- data/spec/license_acceptance/product_reader_spec.rb +0 -155
- data/spec/license_acceptance/product_spec.rb +0 -15
- data/spec/license_acceptance/strategy/argument_spec.rb +0 -82
- data/spec/license_acceptance/strategy/environment_spec.rb +0 -76
- data/spec/license_acceptance/strategy/file_spec.rb +0 -127
- data/spec/license_acceptance/strategy/prompt_spec.rb +0 -100
- data/spec/license_acceptance/strategy/provided_value_spec.rb +0 -55
- data/spec/spec_helper.rb +0 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 857078f9f2d4c9d74fcb5a08876039fa5930c3f7286b1a7d03e2a84bda4d229b
|
4
|
+
data.tar.gz: c7c4d34ac946733f0f980f33d1b5fd0dd518e1c8fc1927a9a406580f3ac491c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c813cf96544c839b605631e587cad4ee3e798d6950022f454e417ac5f83234e969418f0d500f69ee730a102a046e5f20bf97782582fde203d58815d9dae30c9a
|
7
|
+
data.tar.gz: 6b497916918c9537c1cc234e6abace8ed448713640ac937b34593a8ac69b93bec72cfe4cca184514b4fe667203c5ec9af1546b1dcaf696a23d3318a47c37b4dd
|
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: 1.0.
|
4
|
+
version: 1.0.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tyler-ball
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-03-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pastel
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '13.0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '13.0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -154,16 +154,22 @@ dependencies:
|
|
154
154
|
name: thor
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
|
-
- - "
|
157
|
+
- - ">="
|
158
158
|
- !ruby/object:Gem::Version
|
159
159
|
version: '0.20'
|
160
|
+
- - "<"
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: '2.0'
|
160
163
|
type: :development
|
161
164
|
prerelease: false
|
162
165
|
version_requirements: !ruby/object:Gem::Requirement
|
163
166
|
requirements:
|
164
|
-
- - "
|
167
|
+
- - ">="
|
165
168
|
- !ruby/object:Gem::Version
|
166
169
|
version: '0.20'
|
170
|
+
- - "<"
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: '2.0'
|
167
173
|
- !ruby/object:Gem::Dependency
|
168
174
|
name: climate_control
|
169
175
|
requirement: !ruby/object:Gem::Requirement
|
@@ -186,9 +192,7 @@ extensions: []
|
|
186
192
|
extra_rdoc_files: []
|
187
193
|
files:
|
188
194
|
- Gemfile
|
189
|
-
- Gemfile.lock
|
190
195
|
- LICENSE
|
191
|
-
- Rakefile
|
192
196
|
- config/product_info.toml
|
193
197
|
- lib/license_acceptance/acceptor.rb
|
194
198
|
- lib/license_acceptance/cli_flags/mixlib_cli.rb
|
@@ -205,18 +209,6 @@ files:
|
|
205
209
|
- lib/license_acceptance/strategy/prompt.rb
|
206
210
|
- lib/license_acceptance/strategy/provided_value.rb
|
207
211
|
- lib/license_acceptance/version.rb
|
208
|
-
- spec/license_acceptance/acceptor_spec.rb
|
209
|
-
- spec/license_acceptance/cli_flags/mixlib_cli_spec.rb
|
210
|
-
- spec/license_acceptance/cli_flags/thor_spec.rb
|
211
|
-
- spec/license_acceptance/config_spec.rb
|
212
|
-
- spec/license_acceptance/product_reader_spec.rb
|
213
|
-
- spec/license_acceptance/product_spec.rb
|
214
|
-
- spec/license_acceptance/strategy/argument_spec.rb
|
215
|
-
- spec/license_acceptance/strategy/environment_spec.rb
|
216
|
-
- spec/license_acceptance/strategy/file_spec.rb
|
217
|
-
- spec/license_acceptance/strategy/prompt_spec.rb
|
218
|
-
- spec/license_acceptance/strategy/provided_value_spec.rb
|
219
|
-
- spec/spec_helper.rb
|
220
212
|
homepage: https://github.com/chef/license-acceptance/
|
221
213
|
licenses:
|
222
214
|
- Apache-2.0
|
data/Gemfile.lock
DELETED
@@ -1,91 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
license-acceptance (1.0.13)
|
5
|
-
pastel (~> 0.7)
|
6
|
-
tomlrb (~> 1.2)
|
7
|
-
tty-box (~> 0.3)
|
8
|
-
tty-prompt (~> 0.18)
|
9
|
-
|
10
|
-
GEM
|
11
|
-
remote: https://rubygems.org/
|
12
|
-
specs:
|
13
|
-
binding_of_caller (0.8.0)
|
14
|
-
debug_inspector (>= 0.0.1)
|
15
|
-
byebug (11.0.1)
|
16
|
-
climate_control (0.2.0)
|
17
|
-
coderay (1.1.2)
|
18
|
-
debug_inspector (0.0.3)
|
19
|
-
diff-lcs (1.3)
|
20
|
-
equatable (0.5.0)
|
21
|
-
method_source (0.9.2)
|
22
|
-
mixlib-cli (1.7.0)
|
23
|
-
necromancer (0.5.0)
|
24
|
-
pastel (0.7.2)
|
25
|
-
equatable (~> 0.5.0)
|
26
|
-
tty-color (~> 0.4.0)
|
27
|
-
pry (0.12.2)
|
28
|
-
coderay (~> 1.1.0)
|
29
|
-
method_source (~> 0.9.0)
|
30
|
-
pry-byebug (3.7.0)
|
31
|
-
byebug (~> 11.0)
|
32
|
-
pry (~> 0.10)
|
33
|
-
pry-stack_explorer (0.4.9.3)
|
34
|
-
binding_of_caller (>= 0.7)
|
35
|
-
pry (>= 0.9.11)
|
36
|
-
rake (10.5.0)
|
37
|
-
rspec (3.8.0)
|
38
|
-
rspec-core (~> 3.8.0)
|
39
|
-
rspec-expectations (~> 3.8.0)
|
40
|
-
rspec-mocks (~> 3.8.0)
|
41
|
-
rspec-core (3.8.0)
|
42
|
-
rspec-support (~> 3.8.0)
|
43
|
-
rspec-expectations (3.8.4)
|
44
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
45
|
-
rspec-support (~> 3.8.0)
|
46
|
-
rspec-mocks (3.8.0)
|
47
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
48
|
-
rspec-support (~> 3.8.0)
|
49
|
-
rspec-support (3.8.2)
|
50
|
-
strings (0.1.5)
|
51
|
-
strings-ansi (~> 0.1)
|
52
|
-
unicode-display_width (~> 1.5)
|
53
|
-
unicode_utils (~> 1.4)
|
54
|
-
strings-ansi (0.1.0)
|
55
|
-
thor (0.20.3)
|
56
|
-
tomlrb (1.2.8)
|
57
|
-
tty-box (0.4.0)
|
58
|
-
pastel (~> 0.7.2)
|
59
|
-
strings (~> 0.1.5)
|
60
|
-
tty-cursor (~> 0.7)
|
61
|
-
tty-color (0.4.3)
|
62
|
-
tty-cursor (0.7.0)
|
63
|
-
tty-prompt (0.19.0)
|
64
|
-
necromancer (~> 0.5.0)
|
65
|
-
pastel (~> 0.7.0)
|
66
|
-
tty-reader (~> 0.6.0)
|
67
|
-
tty-reader (0.6.0)
|
68
|
-
tty-cursor (~> 0.7)
|
69
|
-
tty-screen (~> 0.7)
|
70
|
-
wisper (~> 2.0.0)
|
71
|
-
tty-screen (0.7.0)
|
72
|
-
unicode-display_width (1.6.0)
|
73
|
-
unicode_utils (1.4.0)
|
74
|
-
wisper (2.0.0)
|
75
|
-
|
76
|
-
PLATFORMS
|
77
|
-
ruby
|
78
|
-
|
79
|
-
DEPENDENCIES
|
80
|
-
climate_control (~> 0.2)
|
81
|
-
license-acceptance!
|
82
|
-
mixlib-cli (~> 1.7)
|
83
|
-
pry (~> 0.12)
|
84
|
-
pry-byebug (~> 3.6)
|
85
|
-
pry-stack_explorer (~> 0.4)
|
86
|
-
rake (~> 10.0)
|
87
|
-
rspec (~> 3.0)
|
88
|
-
thor (~> 0.20)
|
89
|
-
|
90
|
-
BUNDLED WITH
|
91
|
-
1.17.3
|
data/Rakefile
DELETED
@@ -1,302 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "license_acceptance/acceptor"
|
3
|
-
|
4
|
-
RSpec.describe LicenseAcceptance::Acceptor do
|
5
|
-
it "has a version number" do
|
6
|
-
expect(LicenseAcceptance::VERSION).not_to be nil
|
7
|
-
end
|
8
|
-
|
9
|
-
let(:output) do
|
10
|
-
d = StringIO.new
|
11
|
-
allow(d).to receive(:isatty).and_return(true)
|
12
|
-
d
|
13
|
-
end
|
14
|
-
let(:opts) { { output: output } }
|
15
|
-
let(:reader) { instance_double(LicenseAcceptance::ProductReader) }
|
16
|
-
let(:acc) { LicenseAcceptance::Acceptor.new(opts) }
|
17
|
-
let(:product) { instance_double(LicenseAcceptance::Product, id: "foo", pretty_name: "Foo") }
|
18
|
-
let(:version) { "version" }
|
19
|
-
let(:relationship) { instance_double(LicenseAcceptance::ProductRelationship, parent: product) }
|
20
|
-
let(:missing) { [product] }
|
21
|
-
|
22
|
-
describe "#check_and_persist!" do
|
23
|
-
before do
|
24
|
-
expect(LicenseAcceptance::ProductReader).to receive(:new).and_return(reader)
|
25
|
-
expect(reader).to receive(:read)
|
26
|
-
end
|
27
|
-
|
28
|
-
let(:err) { LicenseAcceptance::LicenseNotAcceptedError.new(product, [product]) }
|
29
|
-
it "outputs an error message to stdout and exits when license acceptance is declined" do
|
30
|
-
expect(acc).to receive(:check_and_persist).and_raise(err)
|
31
|
-
expect { acc.check_and_persist!(product.id, version) }.to raise_error(SystemExit)
|
32
|
-
expect(output.string).to match(/#{product.pretty_name}/)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
describe "#check_and_persist" do
|
37
|
-
let(:file_acc) { instance_double(LicenseAcceptance::Strategy::File) }
|
38
|
-
let(:arg_acc) { instance_double(LicenseAcceptance::Strategy::Argument) }
|
39
|
-
let(:prompt_acc) { instance_double(LicenseAcceptance::Strategy::Prompt) }
|
40
|
-
let(:env_acc) { instance_double(LicenseAcceptance::Strategy::Environment) }
|
41
|
-
let(:provided_acc) { instance_double(LicenseAcceptance::Strategy::ProvidedValue) }
|
42
|
-
|
43
|
-
before do
|
44
|
-
expect(LicenseAcceptance::ProductReader).to receive(:new).and_return(reader)
|
45
|
-
expect(LicenseAcceptance::Strategy::File).to receive(:new).and_return(file_acc)
|
46
|
-
expect(LicenseAcceptance::Strategy::Argument).to receive(:new).and_return(arg_acc)
|
47
|
-
expect(LicenseAcceptance::Strategy::Prompt).to receive(:new).and_return(prompt_acc)
|
48
|
-
expect(LicenseAcceptance::Strategy::Environment).to receive(:new).and_return(env_acc)
|
49
|
-
expect(LicenseAcceptance::Strategy::ProvidedValue).to receive(:new).and_return(provided_acc)
|
50
|
-
|
51
|
-
allow(provided_acc).to receive(:no_persist?).and_return(false)
|
52
|
-
allow(env_acc).to receive(:no_persist?).and_return(false)
|
53
|
-
allow(arg_acc).to receive(:no_persist?).and_return(false)
|
54
|
-
allow(provided_acc).to receive(:accepted?).and_return(false)
|
55
|
-
allow(env_acc).to receive(:accepted?).and_return(false)
|
56
|
-
allow(arg_acc).to receive(:accepted?).and_return(false)
|
57
|
-
allow(provided_acc).to receive(:silent?).and_return(false)
|
58
|
-
allow(env_acc).to receive(:silent?).and_return(false)
|
59
|
-
allow(arg_acc).to receive(:silent?).and_return(false)
|
60
|
-
|
61
|
-
expect(reader).to receive(:read)
|
62
|
-
end
|
63
|
-
|
64
|
-
describe "when accept-no-persist is provided from the caller" do
|
65
|
-
it "returns true" do
|
66
|
-
expect(provided_acc).to receive(:no_persist?).and_return(true)
|
67
|
-
expect(acc.check_and_persist(product, version)).to eq(true)
|
68
|
-
expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT_NO_PERSIST)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe "when accept-no-persist environment variable is set" do
|
73
|
-
it "returns true" do
|
74
|
-
expect(env_acc).to receive(:no_persist?).and_return(true)
|
75
|
-
expect(acc.check_and_persist(product, version)).to eq(true)
|
76
|
-
expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT_NO_PERSIST)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
describe "when accept-no-persist command line argument is set" do
|
81
|
-
it "returns true" do
|
82
|
-
expect(arg_acc).to receive(:no_persist?).and_return(true)
|
83
|
-
expect(acc.check_and_persist(product, version)).to eq(true)
|
84
|
-
expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT_NO_PERSIST)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
describe "when there are no missing licenses" do
|
89
|
-
it "returns true" do
|
90
|
-
expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
|
91
|
-
expect(file_acc).to receive(:accepted?).with(relationship).and_return([])
|
92
|
-
expect(acc.check_and_persist(product, version)).to eq(true)
|
93
|
-
expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT)
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
describe "when the user accepts as an environment variable" do
|
98
|
-
it "returns true" do
|
99
|
-
expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
|
100
|
-
expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
|
101
|
-
expect(env_acc).to receive(:accepted?).and_return(true)
|
102
|
-
expect(file_acc).to receive(:persist).with(relationship, missing).and_return([])
|
103
|
-
expect(acc.check_and_persist(product, version)).to eq(true)
|
104
|
-
expect(output.string).to match(/1 product license accepted./)
|
105
|
-
expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT)
|
106
|
-
end
|
107
|
-
|
108
|
-
describe "when persist is set to false" do
|
109
|
-
let(:opts) { { output: output, persist: false } }
|
110
|
-
|
111
|
-
it "returns true" do
|
112
|
-
expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
|
113
|
-
expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
|
114
|
-
expect(env_acc).to receive(:accepted?).and_return(true)
|
115
|
-
expect(acc.check_and_persist(product, version)).to eq(true)
|
116
|
-
expect(output.string).to_not match(/accepted./)
|
117
|
-
expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT)
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
describe "when the silent option is used" do
|
122
|
-
let(:opts) { { output: output } }
|
123
|
-
|
124
|
-
it "returns true and silently persists the file" do
|
125
|
-
expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
|
126
|
-
expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
|
127
|
-
expect(env_acc).to receive(:silent?).times.exactly(3).and_return(true)
|
128
|
-
expect(file_acc).to receive(:persist).with(relationship, missing).and_return([])
|
129
|
-
expect(acc.check_and_persist(product, version)).to eq(true)
|
130
|
-
expect(output.string).to be_empty
|
131
|
-
expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT_SILENT)
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
describe "when file persistance fails" do
|
136
|
-
it "returns true" do
|
137
|
-
expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
|
138
|
-
expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
|
139
|
-
expect(env_acc).to receive(:accepted?).and_return(true)
|
140
|
-
expect(file_acc).to receive(:persist).with(relationship, missing).and_return([StandardError.new("foo")])
|
141
|
-
expect(acc.check_and_persist(product, version)).to eq(true)
|
142
|
-
expect(output.string).to match(/Could not persist acceptance:/)
|
143
|
-
expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT)
|
144
|
-
end
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
|
-
describe "when the user accepts as an arg" do
|
149
|
-
it "returns true" do
|
150
|
-
expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
|
151
|
-
expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
|
152
|
-
expect(arg_acc).to receive(:accepted?).and_return(true)
|
153
|
-
expect(file_acc).to receive(:persist).with(relationship, missing).and_return([])
|
154
|
-
expect(acc.check_and_persist(product, version)).to eq(true)
|
155
|
-
expect(output.string).to match(/1 product license accepted./)
|
156
|
-
expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT)
|
157
|
-
end
|
158
|
-
|
159
|
-
describe "when the silent option is used" do
|
160
|
-
let(:opts) { { output: output } }
|
161
|
-
|
162
|
-
it "returns true and silently persists the file" do
|
163
|
-
expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
|
164
|
-
expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
|
165
|
-
expect(arg_acc).to receive(:silent?).times.exactly(3).and_return(true)
|
166
|
-
expect(file_acc).to receive(:persist).with(relationship, missing).and_return([])
|
167
|
-
expect(acc.check_and_persist(product, version)).to eq(true)
|
168
|
-
expect(output.string).to be_empty
|
169
|
-
expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT_SILENT)
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
|
-
|
174
|
-
describe "when persist is set to false" do
|
175
|
-
let(:opts) { { output: output, persist: false } }
|
176
|
-
|
177
|
-
it "returns true" do
|
178
|
-
expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
|
179
|
-
expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
|
180
|
-
expect(arg_acc).to receive(:accepted?).and_return(true)
|
181
|
-
expect(acc.check_and_persist(product, version)).to eq(true)
|
182
|
-
expect(output.string).to_not match(/accepted./)
|
183
|
-
expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT)
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
|
-
describe "when file persistance fails" do
|
188
|
-
it "returns true" do
|
189
|
-
expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
|
190
|
-
expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
|
191
|
-
expect(arg_acc).to receive(:accepted?).and_return(true)
|
192
|
-
expect(file_acc).to receive(:persist).with(relationship, missing).and_return([StandardError.new("bar")])
|
193
|
-
expect(acc.check_and_persist(product, version)).to eq(true)
|
194
|
-
expect(output.string).to match(/Could not persist acceptance:/)
|
195
|
-
expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT)
|
196
|
-
end
|
197
|
-
end
|
198
|
-
end
|
199
|
-
|
200
|
-
describe "when the prompt is not a tty" do
|
201
|
-
let(:opts) { { output: File.open(File::NULL, "w") } }
|
202
|
-
it "raises a LicenseNotAcceptedError error" do
|
203
|
-
expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
|
204
|
-
expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
|
205
|
-
expect(prompt_acc).to_not receive(:request)
|
206
|
-
expect { acc.check_and_persist(product, version) }.to raise_error(LicenseAcceptance::LicenseNotAcceptedError)
|
207
|
-
expect(acc.acceptance_value).to eq(nil)
|
208
|
-
end
|
209
|
-
end
|
210
|
-
|
211
|
-
describe "when the user accepts with the prompt" do
|
212
|
-
it "returns true" do
|
213
|
-
expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
|
214
|
-
expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
|
215
|
-
expect(prompt_acc).to receive(:request).with(missing).and_yield.and_return(true)
|
216
|
-
expect(file_acc).to receive(:persist).with(relationship, missing)
|
217
|
-
expect(acc.check_and_persist(product, version)).to eq(true)
|
218
|
-
expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT)
|
219
|
-
end
|
220
|
-
|
221
|
-
describe "when persist is set to false" do
|
222
|
-
let(:opts) { { output: output, persist: false } }
|
223
|
-
|
224
|
-
it "returns true" do
|
225
|
-
expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
|
226
|
-
expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
|
227
|
-
expect(prompt_acc).to receive(:request).with(missing).and_yield.and_return(true)
|
228
|
-
expect(acc.check_and_persist(product, version)).to eq(true)
|
229
|
-
expect(acc.acceptance_value).to eq(LicenseAcceptance::ACCEPT_NO_PERSIST)
|
230
|
-
end
|
231
|
-
end
|
232
|
-
end
|
233
|
-
|
234
|
-
describe "when the user declines with the prompt" do
|
235
|
-
it "raises a LicenseNotAcceptedError error" do
|
236
|
-
expect(reader).to receive(:lookup).with(product, version).and_return(relationship)
|
237
|
-
expect(file_acc).to receive(:accepted?).with(relationship).and_return(missing)
|
238
|
-
expect(prompt_acc).to receive(:request).with(missing).and_return(false)
|
239
|
-
expect { acc.check_and_persist(product, version) }.to raise_error(LicenseAcceptance::LicenseNotAcceptedError)
|
240
|
-
expect(acc.acceptance_value).to eq(nil)
|
241
|
-
end
|
242
|
-
end
|
243
|
-
end
|
244
|
-
|
245
|
-
describe "#license_required?" do
|
246
|
-
let(:reader) { instance_double(LicenseAcceptance::ProductReader) }
|
247
|
-
let(:mixlib_name) { "chef" }
|
248
|
-
let(:version) { "15.0.0" }
|
249
|
-
let(:product) { instance_double(LicenseAcceptance::Product, id: "foo", license_required_version: "15.0.0") }
|
250
|
-
|
251
|
-
before do
|
252
|
-
expect(LicenseAcceptance::ProductReader).to receive(:new).and_return(reader)
|
253
|
-
expect(reader).to receive(:read)
|
254
|
-
end
|
255
|
-
|
256
|
-
it "returns false if no product can be found" do
|
257
|
-
expect(reader).to receive(:lookup_by_mixlib).with(mixlib_name).and_return nil
|
258
|
-
expect(acc.license_required?(mixlib_name, version)).to eq(false)
|
259
|
-
end
|
260
|
-
|
261
|
-
describe "when version is :latest" do
|
262
|
-
let(:version) { :latest }
|
263
|
-
it "returns true" do
|
264
|
-
expect(reader).to receive(:lookup_by_mixlib).with(mixlib_name).and_return product
|
265
|
-
expect(acc.license_required?(mixlib_name, version)).to eq(true)
|
266
|
-
end
|
267
|
-
end
|
268
|
-
|
269
|
-
["latest", "unstable", "current", "stable"].each do |version|
|
270
|
-
describe "when version is '#{version}'" do
|
271
|
-
it "returns true" do
|
272
|
-
expect(reader).to receive(:lookup_by_mixlib).with(mixlib_name).and_return product
|
273
|
-
expect(acc.license_required?(mixlib_name, version)).to eq(true)
|
274
|
-
end
|
275
|
-
end
|
276
|
-
end
|
277
|
-
|
278
|
-
describe "when version is nil" do
|
279
|
-
let(:version) { nil }
|
280
|
-
it "returns true" do
|
281
|
-
expect(reader).to receive(:lookup_by_mixlib).with(mixlib_name).and_return product
|
282
|
-
expect(acc.license_required?(mixlib_name, version)).to eq(true)
|
283
|
-
end
|
284
|
-
end
|
285
|
-
|
286
|
-
describe "when version is >= than required version" do
|
287
|
-
let(:version) { "15.0.0" }
|
288
|
-
it "returns true" do
|
289
|
-
expect(reader).to receive(:lookup_by_mixlib).with(mixlib_name).and_return product
|
290
|
-
expect(acc.license_required?(mixlib_name, version)).to eq(true)
|
291
|
-
end
|
292
|
-
end
|
293
|
-
|
294
|
-
describe "when version is < required version" do
|
295
|
-
let(:version) { "14.99.99" }
|
296
|
-
it "returns false" do
|
297
|
-
expect(reader).to receive(:lookup_by_mixlib).with(mixlib_name).and_return product
|
298
|
-
expect(acc.license_required?(mixlib_name, version)).to eq(false)
|
299
|
-
end
|
300
|
-
end
|
301
|
-
end
|
302
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "license_acceptance/cli_flags/mixlib_cli"
|
3
|
-
|
4
|
-
class TestMixlibKlass
|
5
|
-
include Mixlib::CLI
|
6
|
-
include LicenseAcceptance::CLIFlags::MixlibCLI
|
7
|
-
end
|
8
|
-
|
9
|
-
RSpec.describe LicenseAcceptance::CLIFlags::MixlibCLI do
|
10
|
-
let(:klass) { TestMixlibKlass.new }
|
11
|
-
it "adds the correct command line flag" do
|
12
|
-
expect(klass.options).to include(:chef_license)
|
13
|
-
end
|
14
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "license_acceptance/cli_flags/thor"
|
3
|
-
require "thor"
|
4
|
-
|
5
|
-
class TestThorKlass < Thor
|
6
|
-
include LicenseAcceptance::CLIFlags::Thor
|
7
|
-
end
|
8
|
-
|
9
|
-
RSpec.describe LicenseAcceptance::CLIFlags::Thor do
|
10
|
-
let(:klass) { TestThorKlass.new }
|
11
|
-
it "adds the correct command line flag" do
|
12
|
-
expect(klass.class.class_options.keys).to eq([:chef_license])
|
13
|
-
end
|
14
|
-
end
|
@@ -1,111 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "climate_control"
|
3
|
-
require "license_acceptance/config"
|
4
|
-
require "license_acceptance/product_relationship"
|
5
|
-
|
6
|
-
RSpec.describe LicenseAcceptance::Config do
|
7
|
-
let(:opts) { {} }
|
8
|
-
let(:config) { LicenseAcceptance::Config.new(opts) }
|
9
|
-
|
10
|
-
it "loads correctly with default values" do
|
11
|
-
config
|
12
|
-
end
|
13
|
-
|
14
|
-
describe "with overwritten values" do
|
15
|
-
let(:output) { StringIO.new }
|
16
|
-
let(:logger) { "logger" }
|
17
|
-
let(:license_locations) { [] }
|
18
|
-
let(:persist_location) { "foo" }
|
19
|
-
let(:persist) { false }
|
20
|
-
let(:opts) { { output: output, logger: logger, license_locations: license_locations, persist_location: persist_location, persist: persist } }
|
21
|
-
|
22
|
-
it "loads correctly" do
|
23
|
-
expect(config.output).to eq(output)
|
24
|
-
expect(config.logger).to eq(logger)
|
25
|
-
expect(config.license_locations).to eq(license_locations)
|
26
|
-
expect(config.persist_location).to eq("foo")
|
27
|
-
expect(config.persist).to eq(false)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe "#default_license_locations and #default_persist_location" do
|
32
|
-
before do
|
33
|
-
expect(Process).to receive(:uid).and_return(uid)
|
34
|
-
end
|
35
|
-
|
36
|
-
describe "when platform is Windows" do
|
37
|
-
before do
|
38
|
-
stub_const("RUBY_PLATFORM", "mingw")
|
39
|
-
end
|
40
|
-
|
41
|
-
describe "when user is Administrator" do
|
42
|
-
let(:uid) { 0 }
|
43
|
-
|
44
|
-
it "returns the default value" do
|
45
|
-
ClimateControl.modify HOMEDRIVE: "C:" do
|
46
|
-
expect(config.license_locations).to eq(["C:/chef/accepted_licenses/"])
|
47
|
-
expect(config.persist_location).to eq("C:/chef/accepted_licenses/")
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
describe "when user is not Administrator" do
|
53
|
-
let(:uid) { 1000 }
|
54
|
-
|
55
|
-
it "returns the default USERPROFILE value" do
|
56
|
-
ClimateControl.modify HOMEDRIVE: "C:", USERPROFILE: "C:/Users/foo", HOME: nil do
|
57
|
-
expect(Dir).to receive(:exist?).with("C:/Users/foo").and_return(true)
|
58
|
-
expect(config.license_locations).to eq([
|
59
|
-
"C:/chef/accepted_licenses/",
|
60
|
-
"C:/Users/foo/.chef/accepted_licenses/"
|
61
|
-
])
|
62
|
-
expect(config.persist_location).to eq("C:/Users/foo/.chef/accepted_licenses/")
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
it "returns the default HOMEDRIVE + HOMEPATH value" do
|
67
|
-
ClimateControl.modify HOMEDRIVE: "C:", USERPROFILE: "C:/Users/bar", HOME: nil do
|
68
|
-
expect(Dir).to receive(:exist?).with("C:/Users/bar").and_return(true)
|
69
|
-
expect(config.license_locations).to eq([
|
70
|
-
"C:/chef/accepted_licenses/",
|
71
|
-
"C:/Users/bar/.chef/accepted_licenses/"
|
72
|
-
])
|
73
|
-
expect(config.persist_location).to eq("C:/Users/bar/.chef/accepted_licenses/")
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
end
|
79
|
-
|
80
|
-
describe "when platform is non-Windows" do
|
81
|
-
before do
|
82
|
-
stub_const("RUBY_PLATFORM", "darwin")
|
83
|
-
end
|
84
|
-
|
85
|
-
describe "when user is root" do
|
86
|
-
let(:uid) { 0 }
|
87
|
-
|
88
|
-
it "returns the default value" do
|
89
|
-
expect(config.license_locations).to eq(["/etc/chef/accepted_licenses/"])
|
90
|
-
expect(config.persist_location).to eq("/etc/chef/accepted_licenses/")
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
describe "when user is not root" do
|
95
|
-
let(:uid) { 1000 }
|
96
|
-
|
97
|
-
it "returns the default user value" do
|
98
|
-
ClimateControl.modify HOME: "/Users/foo" do
|
99
|
-
expect(config.license_locations).to eq([
|
100
|
-
"/etc/chef/accepted_licenses/",
|
101
|
-
"/Users/foo/.chef/accepted_licenses/"
|
102
|
-
])
|
103
|
-
expect(config.persist_location).to eq("/Users/foo/.chef/accepted_licenses/")
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
end
|
@@ -1,155 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "license_acceptance/product_reader"
|
3
|
-
require "license_acceptance/product_relationship"
|
4
|
-
|
5
|
-
RSpec.describe LicenseAcceptance::ProductReader do
|
6
|
-
let(:reader) { LicenseAcceptance::ProductReader.new }
|
7
|
-
let(:version) { "0.1.0" }
|
8
|
-
let(:location) { "location" }
|
9
|
-
|
10
|
-
let(:p1) { {"id" => "p1", "pretty_name" => "P1", "filename" => "f1", "mixlib_name" => "p1m", "license_required_version" => "p1v"} }
|
11
|
-
let(:p2) { {"id" => "p2", "pretty_name" => "P2", "filename" => "f2", "mixlib_name" => "p2m", "license_required_version" => "p2v"} }
|
12
|
-
# defined the `==` operator on Product for ease of comparison
|
13
|
-
let(:product1) { LicenseAcceptance::Product.new(p1["id"], p1["pretty_name"], p1["filename"], p1["mixlib_name"], p1["license_required_version"]) }
|
14
|
-
let(:product2) { LicenseAcceptance::Product.new(p2["id"], p2["pretty_name"], p2["filename"], p2["mixlib_name"], p2["license_required_version"]) }
|
15
|
-
let(:r1) { {p1 => p2} }
|
16
|
-
let(:toml) { {"products" => [p1, p2], "relationships" => {"p1" => ["p2"]}} }
|
17
|
-
|
18
|
-
describe "#read" do
|
19
|
-
it "reads products and relationships" do
|
20
|
-
expect(reader).to receive(:get_location).and_return(location)
|
21
|
-
expect(Tomlrb).to receive(:load_file).with(location, symbolize_keys: false).and_return(toml)
|
22
|
-
reader.read
|
23
|
-
expect(reader.products).to eq({
|
24
|
-
"p1" => product1,
|
25
|
-
"p2" => product2
|
26
|
-
})
|
27
|
-
expect(reader.relationships.size).to eq(1)
|
28
|
-
expect(reader.relationships.first).to eq([product1, [product2]])
|
29
|
-
end
|
30
|
-
|
31
|
-
describe "with an empty file" do
|
32
|
-
it "raises a InvalidProductInfo error" do
|
33
|
-
expect(reader).to receive(:get_location).and_return(location)
|
34
|
-
expect(Tomlrb).to receive(:load_file).with(location, symbolize_keys: false).and_return({})
|
35
|
-
|
36
|
-
expect { reader.read }.to raise_error(LicenseAcceptance::InvalidProductInfo)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "with an unknown parent" do
|
41
|
-
let(:toml) { {"products" => [p1, p2], "relationships" => {"p3" => ["p2"]}} }
|
42
|
-
|
43
|
-
it "raises a UnknownParent error" do
|
44
|
-
expect(reader).to receive(:get_location).and_return(location)
|
45
|
-
expect(Tomlrb).to receive(:load_file).with(location, symbolize_keys: false).and_return(toml)
|
46
|
-
|
47
|
-
expect { reader.read }.to raise_error(LicenseAcceptance::UnknownParent)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
describe "with a relationship of nil children" do
|
52
|
-
let(:toml) { {"products" => [p1], "relationships" => {"p1" => nil}} }
|
53
|
-
|
54
|
-
it "raises a NoChildRelationships error" do
|
55
|
-
expect(reader).to receive(:get_location).and_return(location)
|
56
|
-
expect(Tomlrb).to receive(:load_file).with(location, symbolize_keys: false).and_return(toml)
|
57
|
-
|
58
|
-
expect { reader.read }.to raise_error(LicenseAcceptance::NoChildRelationships)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
describe "with a relationship of empty children" do
|
63
|
-
let(:toml) { {"products" => [p1], "relationships" => {"p1" => []}} }
|
64
|
-
|
65
|
-
it "raises a NoChildRelationships error" do
|
66
|
-
expect(reader).to receive(:get_location).and_return(location)
|
67
|
-
expect(Tomlrb).to receive(:load_file).with(location, symbolize_keys: false).and_return(toml)
|
68
|
-
|
69
|
-
expect { reader.read }.to raise_error(LicenseAcceptance::NoChildRelationships)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe "with a relationship of non-array children" do
|
74
|
-
let(:toml) { {"products" => [p1], "relationships" => {"p1" => "p2"}} }
|
75
|
-
|
76
|
-
it "raises a NoChildRelationships error" do
|
77
|
-
expect(reader).to receive(:get_location).and_return(location)
|
78
|
-
expect(Tomlrb).to receive(:load_file).with(location, symbolize_keys: false).and_return(toml)
|
79
|
-
|
80
|
-
expect { reader.read }.to raise_error(LicenseAcceptance::NoChildRelationships)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
describe "with an unknown child" do
|
85
|
-
let(:toml) { {"products" => [p1, p2], "relationships" => {"p1" => ["p2", "p3"]}} }
|
86
|
-
|
87
|
-
it "raises a UnknownChild error" do
|
88
|
-
expect(reader).to receive(:get_location).and_return(location)
|
89
|
-
expect(Tomlrb).to receive(:load_file).with(location, symbolize_keys: false).and_return(toml)
|
90
|
-
|
91
|
-
expect { reader.read }.to raise_error(LicenseAcceptance::UnknownChild)
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
describe "::lookup" do
|
97
|
-
before do
|
98
|
-
expect(reader).to receive(:get_location).and_return(location)
|
99
|
-
expect(Tomlrb).to receive(:load_file).with(location, symbolize_keys: false).and_return(toml)
|
100
|
-
reader.read
|
101
|
-
end
|
102
|
-
|
103
|
-
it "returns a ProductRelationship instance successfully" do
|
104
|
-
expect(reader.lookup("p1", version)).to be_an_instance_of(LicenseAcceptance::ProductRelationship) do |instance|
|
105
|
-
expect(instance.parent_product).to eq(product1)
|
106
|
-
expect(instance.children).to eq([prouct2])
|
107
|
-
expect(instance.version).to eq(version)
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
describe "when called on an unknown product" do
|
112
|
-
it "raises an UnknownProduct error" do
|
113
|
-
expect { reader.lookup("DNE", nil) }.to raise_error(LicenseAcceptance::UnknownProduct)
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
let(:nonya) { LicenseAcceptance::Product.new("nonya", "NonYa", "nofile", "no_mixlib", "no_version") }
|
118
|
-
describe "when called on a product with no relationship" do
|
119
|
-
before do
|
120
|
-
reader.products = { "nonya" => nonya }
|
121
|
-
end
|
122
|
-
|
123
|
-
it "returns the product" do
|
124
|
-
expect(reader.lookup('nonya', version)).to be_an_instance_of(LicenseAcceptance::ProductRelationship) do |instance|
|
125
|
-
expect(instance.parent_product).to eq(nonya)
|
126
|
-
expect(instance.children).to eq([])
|
127
|
-
expect(instance.version).to eq(version)
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
describe "when called with an invalid parent version type" do
|
133
|
-
it "raises an ProductVersionTypeError error" do
|
134
|
-
expect { reader.lookup("p1", 1) }.to raise_error(LicenseAcceptance::ProductVersionTypeError)
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
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
|
-
|
155
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "license_acceptance/product"
|
3
|
-
|
4
|
-
RSpec.describe LicenseAcceptance::Product do
|
5
|
-
let(:instance) { LicenseAcceptance::Product.new("id", "Pretty Name", "filename", "mixlib_name", "version") }
|
6
|
-
|
7
|
-
it "can lookup the product attributes" do
|
8
|
-
expect(instance.id).to eq("id")
|
9
|
-
expect(instance.pretty_name).to eq("Pretty Name")
|
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")
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
@@ -1,82 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "license_acceptance/strategy/argument"
|
3
|
-
|
4
|
-
RSpec.describe LicenseAcceptance::Strategy::Argument do
|
5
|
-
let(:acc) { LicenseAcceptance::Strategy::Argument.new(argv) }
|
6
|
-
|
7
|
-
describe "#accepted?" do
|
8
|
-
describe "when value is space seperated" do
|
9
|
-
let(:argv) { ["--chef-license", "accept"] }
|
10
|
-
it "returns true if the args contain the required flag with spaces" do
|
11
|
-
expect(acc.accepted?).to eq(true)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "when the value is equal seperated" do
|
16
|
-
let(:argv) { ["--chef-license=accept"] }
|
17
|
-
it "returns true if the args contain the required flag with equal" do
|
18
|
-
expect(acc.accepted?).to eq(true)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
[ ["--chef-license"], ["--chef-license=foo"], ["--chef-license", "foo"] ].each do |v|
|
23
|
-
describe "when the value is #{v}" do
|
24
|
-
let(:argv) { v }
|
25
|
-
it "returns false if the args do not contain the required value" do
|
26
|
-
expect(acc.accepted?).to eq(false)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
describe "#silent?" do
|
33
|
-
describe "when value is space seperated" do
|
34
|
-
let(:argv) { ["--chef-license", "accept-silent"] }
|
35
|
-
it "returns true if the args contain the required flag with spaces" do
|
36
|
-
expect(acc.silent?).to eq(true)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "when the value is equal seperated" do
|
41
|
-
let(:argv) { ["--chef-license=accept-silent"] }
|
42
|
-
it "returns true if the args contain the required flag with equal" do
|
43
|
-
expect(acc.silent?).to eq(true)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
[ ["--chef-license"], ["--chef-license=accept"], ["--chef-license", "accept"] ].each do |v|
|
48
|
-
describe "when the value is #{v}" do
|
49
|
-
let(:argv) { v }
|
50
|
-
it "returns false if the args do not contain the required value" do
|
51
|
-
expect(acc.silent?).to eq(false)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
describe "#no_persist?" do
|
58
|
-
describe "when value is space seperated" do
|
59
|
-
let(:argv) { ["--chef-license", "accept-no-persist"] }
|
60
|
-
it "returns true if the args contain the required flag with spaces" do
|
61
|
-
expect(acc.no_persist?).to eq(true)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
describe "when the value is equal seperated" do
|
66
|
-
let(:argv) { ["--chef-license=accept-no-persist"] }
|
67
|
-
it "returns true if the args contain the required flag with equal" do
|
68
|
-
expect(acc.no_persist?).to eq(true)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
[ ["--chef-license"], ["--chef-license=accept"], ["--chef-license", "accept"] ].each do |v|
|
73
|
-
describe "when the value is #{v}" do
|
74
|
-
let(:argv) { v }
|
75
|
-
it "returns false if the args do not contain the required value" do
|
76
|
-
expect(acc.no_persist?).to eq(false)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
end
|
@@ -1,76 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "license_acceptance/strategy/environment"
|
3
|
-
|
4
|
-
RSpec.describe LicenseAcceptance::Strategy::Environment do
|
5
|
-
let(:acc) { LicenseAcceptance::Strategy::Environment.new(env) }
|
6
|
-
|
7
|
-
describe "#accepted?" do
|
8
|
-
describe "when the environment contains the correct key and value" do
|
9
|
-
let(:env) { {"CHEF_LICENSE" => "accept"} }
|
10
|
-
it "returns true" do
|
11
|
-
expect(acc.accepted?).to eq(true)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "when the env has a key but nil value" do
|
16
|
-
let(:env) { {"CHEF_LICENSE" => nil} }
|
17
|
-
it "returns false" do
|
18
|
-
expect(acc.accepted?).to eq(false)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe "when the env has a key but incorrect value" do
|
23
|
-
let(:env) { {"CHEF_LICENSE" => "foo"} }
|
24
|
-
it "returns false" do
|
25
|
-
expect(acc.accepted?).to eq(false)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe "#silent?" do
|
31
|
-
describe "when the environment contains the correct key and value" do
|
32
|
-
let(:env) { {"CHEF_LICENSE" => "accept-silent"} }
|
33
|
-
it "returns true" do
|
34
|
-
expect(acc.silent?).to eq(true)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
describe "when the env has a key but nil value" do
|
39
|
-
let(:env) { {"CHEF_LICENSE" => nil} }
|
40
|
-
it "returns false" do
|
41
|
-
expect(acc.silent?).to eq(false)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
describe "when the env has a key but incorrect value" do
|
46
|
-
let(:env) { {"CHEF_LICENSE" => "accept"} }
|
47
|
-
it "returns false" do
|
48
|
-
expect(acc.silent?).to eq(false)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe "#no_persist?" do
|
54
|
-
describe "when the environment contains the correct key and value" do
|
55
|
-
let(:env) { {"CHEF_LICENSE" => "accept-no-persist"} }
|
56
|
-
it "returns true" do
|
57
|
-
expect(acc.no_persist?).to eq(true)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
describe "when the env has a key but nil value" do
|
62
|
-
let(:env) { {"CHEF_LICENSE" => nil} }
|
63
|
-
it "returns false" do
|
64
|
-
expect(acc.no_persist?).to eq(false)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
describe "when the env has a key but incorrect value" do
|
69
|
-
let(:env) { {"CHEF_LICENSE" => "accept-silent"} }
|
70
|
-
it "returns false" do
|
71
|
-
expect(acc.no_persist?).to eq(false)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
end
|
@@ -1,127 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "license_acceptance/config"
|
3
|
-
require "license_acceptance/strategy/file"
|
4
|
-
require "license_acceptance/product_relationship"
|
5
|
-
require "license_acceptance/product"
|
6
|
-
|
7
|
-
RSpec.describe LicenseAcceptance::Strategy::File do
|
8
|
-
let(:dir1) { "/dir1" }
|
9
|
-
let(:dir2) { "/dir2" }
|
10
|
-
let(:dir3) { "/dir3" }
|
11
|
-
let(:config) do
|
12
|
-
instance_double(LicenseAcceptance::Config, license_locations: [dir1, dir2], persist_location: dir3)
|
13
|
-
end
|
14
|
-
let(:acc) { LicenseAcceptance::Strategy::File.new(config) }
|
15
|
-
let(:p1_id) { "foo" }
|
16
|
-
let(:p1_filename) { "p1_filename" }
|
17
|
-
let(:p1_pretty) { "Pretty Name" }
|
18
|
-
let(:p1) { instance_double(LicenseAcceptance::Product, id: p1_id, filename: p1_filename, pretty_name: p1_pretty) }
|
19
|
-
let(:version) { "0.1.0" }
|
20
|
-
let(:product_relationship) { instance_double(LicenseAcceptance::ProductRelationship, parent: p1, children: [], parent_version: version) }
|
21
|
-
let(:mode) { File::WRONLY | File::CREAT | File::EXCL }
|
22
|
-
|
23
|
-
describe "#check" do
|
24
|
-
describe "when there is an existing license file" do
|
25
|
-
it "returns an empty missing product list" do
|
26
|
-
expect(File).to receive(:exist?).with(File.join(dir1, p1_filename)).and_return(true)
|
27
|
-
expect(acc.accepted?(product_relationship)).to eq([])
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe "when there is not an existing license file" do
|
32
|
-
it "returns the product in the missing product list" do
|
33
|
-
expect(File).to receive(:exist?).with(File.join(dir1, p1_filename)).and_return(false)
|
34
|
-
expect(File).to receive(:exist?).with(File.join(dir2, p1_filename)).and_return(false)
|
35
|
-
expect(acc.accepted?(product_relationship)).to eq([p1])
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe "#persist" do
|
40
|
-
let(:file) { double("file") }
|
41
|
-
|
42
|
-
it "stores a single license without children" do
|
43
|
-
expect(Dir).to receive(:exist?).with(dir3).and_return(true)
|
44
|
-
expect(File).to receive(:open).with(File.join(dir3, p1_filename), mode).and_yield(file)
|
45
|
-
expect(file).to receive(:<<) do |yaml|
|
46
|
-
yaml = YAML.load(yaml)
|
47
|
-
expect(yaml["id"]).to eq(p1_id)
|
48
|
-
expect(yaml["name"]).to eq(p1_pretty)
|
49
|
-
expect(yaml["accepting_product"]).to eq(p1_id)
|
50
|
-
expect(yaml["accepting_product_version"]).to eq(version)
|
51
|
-
end
|
52
|
-
expect(acc.persist(product_relationship, [p1])).to eq([])
|
53
|
-
end
|
54
|
-
|
55
|
-
describe "when license has children" do
|
56
|
-
let(:p2_id) { "bar" }
|
57
|
-
let(:p2_filename) { "p2_filename" }
|
58
|
-
let(:p2_pretty) { "Other Pretty Name" }
|
59
|
-
let(:p2) { instance_double(LicenseAcceptance::Product, id: p2_id, filename: p2_filename, pretty_name: p2_pretty) }
|
60
|
-
let(:product_relationship) {
|
61
|
-
instance_double(
|
62
|
-
LicenseAcceptance::ProductRelationship,
|
63
|
-
parent: p1,
|
64
|
-
children: [p2],
|
65
|
-
parent_version: version
|
66
|
-
)
|
67
|
-
}
|
68
|
-
|
69
|
-
it "stores a license file for all" do
|
70
|
-
expect(Dir).to receive(:exist?).with(dir3).and_return(true)
|
71
|
-
expect(File).to receive(:open).with(File.join(dir3, p1_filename), mode).and_yield(file)
|
72
|
-
expect(file).to receive(:<<) do |yaml|
|
73
|
-
yaml = YAML.load(yaml)
|
74
|
-
expect(yaml["id"]).to eq(p1_id)
|
75
|
-
expect(yaml["name"]).to eq(p1_pretty)
|
76
|
-
expect(yaml["accepting_product"]).to eq(p1_id)
|
77
|
-
expect(yaml["accepting_product_version"]).to eq(version)
|
78
|
-
end
|
79
|
-
expect(File).to receive(:open).with(File.join(dir3, p2_filename), mode).and_yield(file)
|
80
|
-
expect(file).to receive(:<<) do |yaml|
|
81
|
-
yaml = YAML.load(yaml)
|
82
|
-
expect(yaml["id"]).to eq(p2_id)
|
83
|
-
expect(yaml["name"]).to eq(p2_pretty)
|
84
|
-
expect(yaml["accepting_product"]).to eq(p1_id)
|
85
|
-
expect(yaml["accepting_product_version"]).to eq(version)
|
86
|
-
end
|
87
|
-
expect(acc.persist(product_relationship, [p1, p2])).to eq([])
|
88
|
-
end
|
89
|
-
|
90
|
-
describe "when parent is already persisted" do
|
91
|
-
it "only stores a license file for the child" do
|
92
|
-
expect(Dir).to receive(:exist?).with(dir3).and_return(true)
|
93
|
-
expect(File).to receive(:open).once.with(File.join(dir3, p2_filename), mode).and_yield(file)
|
94
|
-
expect(file).to receive(:<<) do |yaml|
|
95
|
-
yaml = YAML.load(yaml)
|
96
|
-
expect(yaml["id"]).to eq(p2_id)
|
97
|
-
expect(yaml["name"]).to eq(p2_pretty)
|
98
|
-
expect(yaml["accepting_product"]).to eq(p1_id)
|
99
|
-
expect(yaml["accepting_product_version"]).to eq(version)
|
100
|
-
end
|
101
|
-
expect(acc.persist(product_relationship, [p2])).to eq([])
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
describe "when the folder cannot be created" do
|
107
|
-
let(:err) { StandardError.new("foo") }
|
108
|
-
it "returns the error" do
|
109
|
-
expect(Dir).to receive(:exist?).with(dir3).and_return(false)
|
110
|
-
expect(FileUtils).to receive(:mkdir_p).and_raise(err)
|
111
|
-
expect(File).to_not receive(:open)
|
112
|
-
expect(acc.persist(product_relationship, [p1])).to eq([err])
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
describe "when the file cannot be written" do
|
117
|
-
let(:err) { StandardError.new("bar") }
|
118
|
-
it "returns the error" do
|
119
|
-
expect(Dir).to receive(:exist?).with(dir3).and_return(true)
|
120
|
-
expect(File).to receive(:open).with(File.join(dir3, p1_filename), mode).and_raise(err)
|
121
|
-
expect(acc.persist(product_relationship, [p1])).to eq([err])
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
end
|
127
|
-
end
|
@@ -1,100 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "license_acceptance/strategy/prompt"
|
3
|
-
require "license_acceptance/product"
|
4
|
-
require "tty-prompt"
|
5
|
-
|
6
|
-
RSpec.describe LicenseAcceptance::Strategy::Prompt do
|
7
|
-
let(:output) { StringIO.new }
|
8
|
-
let(:config) do
|
9
|
-
instance_double(LicenseAcceptance::Config, output: output)
|
10
|
-
end
|
11
|
-
let(:acc) { LicenseAcceptance::Strategy::Prompt.new(config) }
|
12
|
-
let(:prompt) { instance_double(TTY::Prompt) }
|
13
|
-
let(:p1) { instance_double(LicenseAcceptance::Product, id: "foo", pretty_name: "Pretty Name") }
|
14
|
-
let(:missing_licenses) { [p1] }
|
15
|
-
|
16
|
-
before do
|
17
|
-
expect(TTY::Prompt).to receive(:new).at_least(:once).and_return(prompt)
|
18
|
-
end
|
19
|
-
|
20
|
-
describe "when the user accepts" do
|
21
|
-
it "returns true" do
|
22
|
-
expect(prompt).to receive(:ask).and_return("yes")
|
23
|
-
msg1 = /License that need accepting:\n \* #{p1.pretty_name}/m
|
24
|
-
msg2 = /product license persisted\./
|
25
|
-
b = Proc.new { [] }
|
26
|
-
expect(acc.request(missing_licenses, &b)).to eq(true)
|
27
|
-
expect(output.string).to match(msg1)
|
28
|
-
expect(output.string).to match(msg2)
|
29
|
-
end
|
30
|
-
|
31
|
-
describe "when there are multiple products" do
|
32
|
-
let(:p2) { instance_double(LicenseAcceptance::Product, id: "bar", pretty_name: "Other") }
|
33
|
-
let(:missing_licenses) { [p1, p2] }
|
34
|
-
it "returns true" do
|
35
|
-
expect(prompt).to receive(:ask).and_return("yes")
|
36
|
-
msg1 = /Licenses that need accepting:\n \* #{p1.pretty_name}\n \* #{p2.pretty_name}/m
|
37
|
-
msg2 = /product licenses persisted\./
|
38
|
-
msg3 = /2 product licenses\nmust be accepted/m
|
39
|
-
b = Proc.new { [] }
|
40
|
-
expect(acc.request(missing_licenses, &b)).to eq(true)
|
41
|
-
expect(output.string).to match(msg1)
|
42
|
-
expect(output.string).to match(msg2)
|
43
|
-
expect(output.string).to match(msg3)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
describe "when the callback returns an error" do
|
48
|
-
it "returns true" do
|
49
|
-
expect(prompt).to receive(:ask).and_return("yes")
|
50
|
-
msg1 = /License that need accepting:\n \* #{p1.pretty_name}/m
|
51
|
-
msg2 = /Could not persist acceptance:/
|
52
|
-
b = Proc.new { [StandardError.new("foo")] }
|
53
|
-
expect(acc.request(missing_licenses, &b)).to eq(true)
|
54
|
-
expect(output.string).to match(msg1)
|
55
|
-
expect(output.string).to match(msg2)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
describe "when the prompt times out" do
|
61
|
-
it "returns false" do
|
62
|
-
expect(Timeout).to receive(:timeout).twice.and_yield
|
63
|
-
expect(prompt).to receive(:ask).twice.and_raise(LicenseAcceptance::Strategy::PromptTimeout)
|
64
|
-
expect(prompt).to receive(:unsubscribe).twice
|
65
|
-
expect(prompt).to receive(:reader).twice
|
66
|
-
msg1 = /Prompt timed out./
|
67
|
-
b = Proc.new { [] }
|
68
|
-
expect(acc.request(missing_licenses, &b)).to eq(false)
|
69
|
-
expect(output.string).to match(msg1)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe "when the user declines twice" do
|
74
|
-
it "returns false" do
|
75
|
-
expect(prompt).to receive(:ask).twice.and_return("no")
|
76
|
-
msg1 = /License that need accepting:\n \* #{p1.pretty_name}/m
|
77
|
-
msg2 = /product license persisted\./
|
78
|
-
b = Proc.new { raise "should not be called" }
|
79
|
-
expect(acc.request(missing_licenses, &b)).to eq(false)
|
80
|
-
expect(output.string).to match(msg1)
|
81
|
-
expect(output.string).to_not match(msg2)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
describe "when the user declines once then accepts" do
|
86
|
-
it "returns true" do
|
87
|
-
expect(prompt).to receive(:ask).and_return("no")
|
88
|
-
expect(prompt).to receive(:ask).and_return("yes")
|
89
|
-
msg1 = /License that need accepting:\n \* #{p1.pretty_name}/m
|
90
|
-
msg2 = /product license persisted\./
|
91
|
-
msg3 = /If you do not accept this license you will\nnot be able to use Chef products/m
|
92
|
-
b = Proc.new { [] }
|
93
|
-
expect(acc.request(missing_licenses, &b)).to eq(true)
|
94
|
-
expect(output.string).to match(msg1)
|
95
|
-
expect(output.string).to match(msg2)
|
96
|
-
expect(output.string).to match(msg3)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "license_acceptance/strategy/provided_value"
|
3
|
-
|
4
|
-
RSpec.describe LicenseAcceptance::Strategy::ProvidedValue do
|
5
|
-
let(:acc) { LicenseAcceptance::Strategy::ProvidedValue.new(value) }
|
6
|
-
|
7
|
-
describe "#accepted?" do
|
8
|
-
describe "when the value is correct" do
|
9
|
-
let(:value) { "accept" }
|
10
|
-
it "returns true" do
|
11
|
-
expect(acc.accepted?).to eq(true)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "when the value is incorrect" do
|
16
|
-
let(:value) { nil }
|
17
|
-
it "returns false" do
|
18
|
-
expect(acc.accepted?).to eq(false)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe "#silent?" do
|
24
|
-
describe "when the value is correct" do
|
25
|
-
let(:value) { "accept-silent" }
|
26
|
-
it "returns true" do
|
27
|
-
expect(acc.silent?).to eq(true)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
describe "when the value is incorrect" do
|
32
|
-
let(:value) { "accept" }
|
33
|
-
it "returns false" do
|
34
|
-
expect(acc.silent?).to eq(false)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe "#no_persist?" do
|
40
|
-
describe "when the value is correct" do
|
41
|
-
let(:value) { "accept-no-persist" }
|
42
|
-
it "returns true" do
|
43
|
-
expect(acc.no_persist?).to eq(true)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
describe "when the value is incorrect" do
|
48
|
-
let(:value) { "accept-silent" }
|
49
|
-
it "returns false" do
|
50
|
-
expect(acc.no_persist?).to eq(false)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require "bundler/setup"
|
2
|
-
require "license_acceptance/logger"
|
3
|
-
require "logger"
|
4
|
-
|
5
|
-
RSpec.configure do |config|
|
6
|
-
# Enable flags like --only-failures and --next-failure
|
7
|
-
config.example_status_persistence_file_path = ".rspec_status"
|
8
|
-
|
9
|
-
# Disable RSpec exposing methods globally on `Module` and `main`
|
10
|
-
config.disable_monkey_patching!
|
11
|
-
|
12
|
-
config.filter_run :focus => true
|
13
|
-
config.run_all_when_everything_filtered = true
|
14
|
-
config.mock_with :rspec do |mocks|
|
15
|
-
mocks.verify_partial_doubles = true
|
16
|
-
end
|
17
|
-
|
18
|
-
config.expect_with :rspec do |c|
|
19
|
-
c.syntax = :expect
|
20
|
-
end
|
21
|
-
|
22
|
-
config.before(:all) do
|
23
|
-
LicenseAcceptance::Logger.initialize(::Logger.new(IO::NULL))
|
24
|
-
end
|
25
|
-
end
|