license-acceptance 1.0.13 → 2.1.2
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/Gemfile +23 -1
- data/lib/license_acceptance/acceptor.rb +44 -28
- data/lib/license_acceptance/cli_flags/mixlib_cli.rb +2 -2
- data/lib/license_acceptance/cli_flags/thor.rb +3 -3
- data/lib/license_acceptance/config.rb +5 -4
- data/lib/license_acceptance/product.rb +8 -6
- data/lib/license_acceptance/product_reader.rb +8 -4
- data/lib/license_acceptance/strategy/argument.rb +16 -15
- data/lib/license_acceptance/strategy/environment.rb +10 -9
- data/lib/license_acceptance/strategy/file.rb +8 -10
- data/lib/license_acceptance/strategy/prompt.rb +24 -24
- data/lib/license_acceptance/strategy/provided_value.rb +7 -4
- data/lib/license_acceptance/version.rb +1 -1
- metadata +6 -132
- 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
@@ -1,13 +1,13 @@
|
|
1
|
-
|
2
|
-
require
|
1
|
+
autoload :TTY, "tty-prompt"
|
2
|
+
require "pastel"
|
3
3
|
require "license_acceptance/logger"
|
4
4
|
require "license_acceptance/strategy/base"
|
5
|
-
require "timeout"
|
5
|
+
require "timeout" unless defined?(Timeout)
|
6
6
|
|
7
7
|
module LicenseAcceptance
|
8
8
|
module Strategy
|
9
9
|
|
10
|
-
# Interactive prompt for accepting and
|
10
|
+
# Interactive prompt for accepting and persistence license acceptance, or failing with custom exit code
|
11
11
|
class Prompt < Base
|
12
12
|
include Logger
|
13
13
|
|
@@ -17,30 +17,30 @@ module LicenseAcceptance
|
|
17
17
|
@output = config.output
|
18
18
|
end
|
19
19
|
|
20
|
-
WIDTH = 50
|
20
|
+
WIDTH = 50
|
21
21
|
PASTEL = Pastel.new
|
22
22
|
BORDER = "+---------------------------------------------+".freeze
|
23
23
|
YES = PASTEL.green.bold("yes")
|
24
|
-
CHECK
|
24
|
+
CHECK = PASTEL.green("✔")
|
25
25
|
|
26
26
|
def request(missing_licenses, &persist_callback)
|
27
27
|
logger.debug("Requesting a license for #{missing_licenses.map(&:id)}")
|
28
28
|
c = missing_licenses.size
|
29
|
-
s = c > 1 ? "s": ""
|
29
|
+
s = c > 1 ? "s" : ""
|
30
30
|
|
31
31
|
acceptance_question = "Do you accept the #{c} product license#{s} (#{YES}/no)?"
|
32
32
|
output.puts <<~EOM
|
33
|
-
|
34
|
-
|
33
|
+
#{BORDER}
|
34
|
+
Chef License Acceptance
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
|
36
|
+
Before you can continue, #{c} product license#{s}
|
37
|
+
must be accepted. View the license at
|
38
|
+
https://www.chef.io/end-user-license-agreement/
|
39
39
|
|
40
|
-
|
41
|
-
|
40
|
+
License#{s} that need accepting:
|
41
|
+
* #{missing_licenses.map(&:pretty_name).join("\n * ")}
|
42
42
|
|
43
|
-
|
43
|
+
#{acceptance_question}
|
44
44
|
|
45
45
|
EOM
|
46
46
|
|
@@ -51,10 +51,10 @@ module LicenseAcceptance
|
|
51
51
|
|
52
52
|
output.puts <<~EOM
|
53
53
|
|
54
|
-
|
55
|
-
|
54
|
+
If you do not accept this license you will
|
55
|
+
not be able to use Chef products.
|
56
56
|
|
57
|
-
|
57
|
+
#{acceptance_question}
|
58
58
|
|
59
59
|
EOM
|
60
60
|
|
@@ -62,7 +62,7 @@ module LicenseAcceptance
|
|
62
62
|
if answer != "yes"
|
63
63
|
output.puts BORDER
|
64
64
|
end
|
65
|
-
|
65
|
+
answer
|
66
66
|
end
|
67
67
|
|
68
68
|
private
|
@@ -73,12 +73,12 @@ module LicenseAcceptance
|
|
73
73
|
|
74
74
|
answer = "no"
|
75
75
|
begin
|
76
|
-
Timeout
|
76
|
+
Timeout.timeout(60, PromptTimeout) do
|
77
77
|
answer = prompt.ask(">") do |q|
|
78
78
|
q.modify :down, :trim
|
79
79
|
q.required true
|
80
80
|
q.messages[:required?] = "You must enter 'yes' or 'no'"
|
81
|
-
q.validate
|
81
|
+
q.validate(/^\s*(yes|no)\s*$/i)
|
82
82
|
q.messages[:valid?] = "You must enter 'yes' or 'no'"
|
83
83
|
end
|
84
84
|
end
|
@@ -95,13 +95,13 @@ module LicenseAcceptance
|
|
95
95
|
output.puts "#{CHECK} #{c} product license#{s} persisted.\n\n"
|
96
96
|
else
|
97
97
|
output.puts <<~EOM
|
98
|
-
|
99
|
-
|
98
|
+
#{CHECK} #{c} product license#{s} accepted.
|
99
|
+
Could not persist acceptance:\n\t* #{errs.map(&:message).join("\n\t* ")}
|
100
100
|
EOM
|
101
101
|
end
|
102
102
|
return true
|
103
103
|
end
|
104
|
-
|
104
|
+
false
|
105
105
|
end
|
106
106
|
end
|
107
107
|
|
@@ -12,17 +12,20 @@ module LicenseAcceptance
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def accepted?
|
15
|
-
value == ACCEPT
|
15
|
+
String(value).downcase == ACCEPT
|
16
16
|
end
|
17
17
|
|
18
18
|
def silent?
|
19
|
-
value == ACCEPT_SILENT
|
19
|
+
String(value).downcase == ACCEPT_SILENT
|
20
20
|
end
|
21
21
|
|
22
22
|
def no_persist?
|
23
|
-
value == ACCEPT_NO_PERSIST
|
23
|
+
String(value).downcase == ACCEPT_NO_PERSIST
|
24
24
|
end
|
25
|
-
end
|
26
25
|
|
26
|
+
def value?
|
27
|
+
!!value
|
28
|
+
end
|
29
|
+
end
|
27
30
|
end
|
28
31
|
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: 1.
|
4
|
+
version: 2.1.2
|
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-09-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pastel
|
@@ -44,140 +44,28 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0.
|
47
|
+
version: '0.6'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0.
|
54
|
+
version: '0.6'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: tty-prompt
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0.18'
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0.18'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rake
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '10.0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '10.0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rspec
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '3.0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '3.0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: pry
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0.12'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - "~>"
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0.12'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: pry-byebug
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - "~>"
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '3.6'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - "~>"
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '3.6'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: pry-stack_explorer
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - "~>"
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0.4'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - "~>"
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0.4'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: mixlib-cli
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - "~>"
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '1.7'
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - "~>"
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '1.7'
|
153
|
-
- !ruby/object:Gem::Dependency
|
154
|
-
name: thor
|
155
57
|
requirement: !ruby/object:Gem::Requirement
|
156
58
|
requirements:
|
157
59
|
- - "~>"
|
158
60
|
- !ruby/object:Gem::Version
|
159
61
|
version: '0.20'
|
160
|
-
type: :
|
62
|
+
type: :runtime
|
161
63
|
prerelease: false
|
162
64
|
version_requirements: !ruby/object:Gem::Requirement
|
163
65
|
requirements:
|
164
66
|
- - "~>"
|
165
67
|
- !ruby/object:Gem::Version
|
166
68
|
version: '0.20'
|
167
|
-
- !ruby/object:Gem::Dependency
|
168
|
-
name: climate_control
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - "~>"
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '0.2'
|
174
|
-
type: :development
|
175
|
-
prerelease: false
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - "~>"
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: '0.2'
|
181
69
|
description: Chef End User License Agreement Acceptance for Ruby products
|
182
70
|
email:
|
183
71
|
- tball@chef.io
|
@@ -186,9 +74,7 @@ extensions: []
|
|
186
74
|
extra_rdoc_files: []
|
187
75
|
files:
|
188
76
|
- Gemfile
|
189
|
-
- Gemfile.lock
|
190
77
|
- LICENSE
|
191
|
-
- Rakefile
|
192
78
|
- config/product_info.toml
|
193
79
|
- lib/license_acceptance/acceptor.rb
|
194
80
|
- lib/license_acceptance/cli_flags/mixlib_cli.rb
|
@@ -205,18 +91,6 @@ files:
|
|
205
91
|
- lib/license_acceptance/strategy/prompt.rb
|
206
92
|
- lib/license_acceptance/strategy/provided_value.rb
|
207
93
|
- 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
94
|
homepage: https://github.com/chef/license-acceptance/
|
221
95
|
licenses:
|
222
96
|
- Apache-2.0
|
@@ -229,7 +103,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
229
103
|
requirements:
|
230
104
|
- - ">="
|
231
105
|
- !ruby/object:Gem::Version
|
232
|
-
version: '2.
|
106
|
+
version: '2.4'
|
233
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
234
108
|
requirements:
|
235
109
|
- - ">="
|
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
|