webdrivers 3.9.2 → 3.9.3

Sign up to get free protection for your applications and to get access to all the features.
data/spec/spec_helper.rb CHANGED
@@ -1,18 +1,18 @@
1
- # frozen_string_literal: true
2
-
3
- require 'simplecov'
4
- SimpleCov.start
5
-
6
- require 'rspec'
7
- require 'webdrivers'
8
-
9
- RSpec.configure do |config|
10
- config.filter_run_including focus: true unless ENV['CI']
11
- config.run_all_when_everything_filtered = true
12
- config.expect_with :rspec do |expectations|
13
- expectations.syntax = :expect
14
- end
15
- config.mock_with :rspec do |mocks|
16
- mocks.verify_partial_doubles = true
17
- end
18
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'simplecov'
4
+ SimpleCov.start
5
+
6
+ require 'rspec'
7
+ require 'webdrivers'
8
+
9
+ RSpec.configure do |config|
10
+ config.filter_run_including focus: true unless ENV['CI']
11
+ config.run_all_when_everything_filtered = true
12
+ config.expect_with :rspec do |expectations|
13
+ expectations.syntax = :expect
14
+ end
15
+ config.mock_with :rspec do |mocks|
16
+ mocks.verify_partial_doubles = true
17
+ end
18
+ end
@@ -1,257 +1,257 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
-
5
- describe Webdrivers::Chromedriver do
6
- let(:chromedriver) { described_class }
7
-
8
- before { chromedriver.remove }
9
-
10
- describe '#update' do
11
- context 'when evaluating #correct_binary?' do
12
- it 'does not download when latest version and current version match' do
13
- allow(chromedriver).to receive(:latest_version).and_return(Gem::Version.new('72.0.0'))
14
- allow(chromedriver).to receive(:current_version).and_return(Gem::Version.new('72.0.0'))
15
-
16
- chromedriver.update
17
-
18
- expect(chromedriver.send(:exists?)).to be false
19
- end
20
-
21
- it 'does not download when offline, binary exists and is less than v70' do
22
- allow(Net::HTTP).to receive(:get_response).and_raise(SocketError)
23
- allow(chromedriver).to receive(:exists?).and_return(true)
24
- allow(chromedriver).to receive(:current_version).and_return(Gem::Version.new(69))
25
-
26
- chromedriver.update
27
-
28
- expect(File.exist?(chromedriver.driver_path)).to be false
29
- end
30
-
31
- it 'does not download when offline, binary exists and matches major browser version' do
32
- allow(Net::HTTP).to receive(:get_response).and_raise(SocketError)
33
- allow(chromedriver).to receive(:exists?).and_return(true)
34
- allow(chromedriver).to receive(:chrome_version).and_return(Gem::Version.new('73.0.3683.68'))
35
- allow(chromedriver).to receive(:current_version).and_return(Gem::Version.new('73.0.3683.20'))
36
-
37
- chromedriver.update
38
-
39
- expect(File.exist?(chromedriver.driver_path)).to be false
40
- end
41
-
42
- it 'does not download when get raises exception, binary exists and matches major browser version' do
43
- client_error = instance_double(Net::HTTPNotFound, class: Net::HTTPNotFound, code: 404, message: '')
44
-
45
- allow(Webdrivers::Network).to receive(:get_response).and_return(client_error)
46
- allow(chromedriver).to receive(:exists?).and_return(true)
47
- allow(chromedriver).to receive(:chrome_version).and_return(Gem::Version.new('73.0.3683.68'))
48
- allow(chromedriver).to receive(:current_version).and_return(Gem::Version.new('73.0.3683.20'))
49
-
50
- chromedriver.update
51
-
52
- expect(File.exist?(chromedriver.driver_path)).to be false
53
- end
54
-
55
- it 'raises ConnectionError when offline, and binary does not match major browser version' do
56
- allow(Net::HTTP).to receive(:get_response).and_raise(SocketError)
57
- allow(chromedriver).to receive(:exists?).and_return(true)
58
- allow(chromedriver).to receive(:chrome_version).and_return(Gem::Version.new('73.0.3683.68'))
59
- allow(chromedriver).to receive(:current_version).and_return(Gem::Version.new('72.0.0.0'))
60
-
61
- msg = %r{Can not reach https://chromedriver.storage.googleapis.com}
62
- expect { chromedriver.update }.to raise_error(Webdrivers::ConnectionError, msg)
63
- end
64
-
65
- it 'raises ConnectionError when offline, and no binary exists' do
66
- allow(Net::HTTP).to receive(:get_response).and_raise(SocketError)
67
- allow(chromedriver).to receive(:exists?).and_return(false)
68
-
69
- msg = %r{Can not reach https://chromedriver.storage.googleapis.com}
70
- expect { chromedriver.update }.to raise_error(Webdrivers::ConnectionError, msg)
71
- end
72
- end
73
-
74
- context 'when correct binary is found' do
75
- before { allow(chromedriver).to receive(:correct_binary?).and_return(true) }
76
-
77
- it 'does not download' do
78
- chromedriver.update
79
-
80
- expect(chromedriver.current_version).to be_nil
81
- end
82
-
83
- it 'does not raise exception if offline' do
84
- allow(Net::HTTP).to receive(:get_response).and_raise(SocketError)
85
-
86
- chromedriver.update
87
-
88
- expect(chromedriver.current_version).to be_nil
89
- end
90
- end
91
-
92
- context 'when correct binary is not found' do
93
- before { allow(chromedriver).to receive(:correct_binary?).and_return(false) }
94
-
95
- it 'downloads binary' do
96
- chromedriver.update
97
-
98
- expect(chromedriver.current_version).not_to be_nil
99
- end
100
-
101
- it 'raises ConnectionError if offline' do
102
- allow(Net::HTTP).to receive(:get_response).and_raise(SocketError)
103
-
104
- msg = %r{Can not reach https://chromedriver.storage.googleapis.com/}
105
- expect { chromedriver.update }.to raise_error(Webdrivers::ConnectionError, msg)
106
- end
107
- end
108
-
109
- it 'makes a network call if cached driver does not match the browser' do
110
- Webdrivers::System.cache_version('chromedriver', '71.0.3578.137')
111
- allow(chromedriver).to receive(:chrome_version).and_return(Gem::Version.new('73.0.3683.68'))
112
- allow(Webdrivers::Network).to receive(:get).and_return('73.0.3683.68')
113
- allow(Webdrivers::System).to receive(:download)
114
-
115
- chromedriver.update
116
-
117
- expect(Webdrivers::Network).to have_received(:get).twice
118
- end
119
- end
120
-
121
- describe '#current_version' do
122
- it 'returns nil if binary does not exist on the system' do
123
- allow(chromedriver).to receive(:driver_path).and_return('')
124
-
125
- expect(chromedriver.current_version).to be_nil
126
- end
127
-
128
- it 'returns a Gem::Version instance if binary is on the system' do
129
- allow(chromedriver).to receive(:exists?).and_return(true)
130
- allow(Webdrivers::System).to receive(:call)
131
- .with("#{chromedriver.driver_path} --version")
132
- .and_return '71.0.3578.137'
133
-
134
- expect(chromedriver.current_version).to eq Gem::Version.new('71.0.3578.137')
135
- end
136
- end
137
-
138
- describe '#latest_version' do
139
- it 'returns 2.41 if the browser version is less than 70' do
140
- allow(chromedriver).to receive(:chrome_version).and_return('69.0.0')
141
-
142
- expect(chromedriver.latest_version).to eq(Gem::Version.new('2.41'))
143
- end
144
-
145
- it 'returns the correct point release for a production version greater than 70' do
146
- allow(chromedriver).to receive(:chrome_version).and_return '71.0.3578.9999'
147
-
148
- expect(chromedriver.latest_version).to eq Gem::Version.new('71.0.3578.137')
149
- end
150
-
151
- it 'raises VersionError for beta version' do
152
- allow(chromedriver).to receive(:chrome_version).and_return('100.0.0')
153
- msg = 'Unable to find latest point release version for 100.0.0. '\
154
- 'You appear to be using a non-production version of Chrome. '\
155
- 'Please set `Webdrivers::Chromedriver.required_version = <desired driver version>` '\
156
- 'to a known chromedriver version: https://chromedriver.storage.googleapis.com/index.html'
157
-
158
- expect { chromedriver.latest_version }.to raise_exception(Webdrivers::VersionError, msg)
159
- end
160
-
161
- it 'raises VersionError for unknown version' do
162
- allow(chromedriver).to receive(:chrome_version).and_return('72.0.9999.0000')
163
- msg = 'Unable to find latest point release version for 72.0.9999. '\
164
- 'Please set `Webdrivers::Chromedriver.required_version = <desired driver version>` '\
165
- 'to a known chromedriver version: https://chromedriver.storage.googleapis.com/index.html'
166
-
167
- expect { chromedriver.latest_version }.to raise_exception(Webdrivers::VersionError, msg)
168
- end
169
-
170
- it 'raises ConnectionError when offline' do
171
- allow(Net::HTTP).to receive(:get_response).and_raise(SocketError)
172
-
173
- msg = %r{^Can not reach https://chromedriver.storage.googleapis.com}
174
- expect { chromedriver.latest_version }.to raise_error(Webdrivers::ConnectionError, msg)
175
- end
176
-
177
- it 'creates cached file' do
178
- allow(Webdrivers::Network).to receive(:get).and_return('71.0.3578.137')
179
-
180
- chromedriver.latest_version
181
- expect(File.exist?("#{Webdrivers::System.install_dir}/chromedriver.version")).to eq true
182
- end
183
-
184
- it 'does not make network call if cache is valid' do
185
- allow(Webdrivers).to receive(:cache_time).and_return(3600)
186
- Webdrivers::System.cache_version('chromedriver', '71.0.3578.137')
187
- allow(Webdrivers::Network).to receive(:get)
188
-
189
- expect(chromedriver.latest_version).to eq Gem::Version.new('71.0.3578.137')
190
-
191
- expect(Webdrivers::Network).not_to have_received(:get)
192
- end
193
-
194
- it 'makes a network call if cache is expired' do
195
- Webdrivers::System.cache_version('chromedriver', '71.0.3578.137')
196
- allow(Webdrivers::Network).to receive(:get).and_return('73.0.3683.68')
197
- allow(Webdrivers::System).to receive(:valid_cache?)
198
-
199
- expect(chromedriver.latest_version).to eq Gem::Version.new('73.0.3683.68')
200
-
201
- expect(Webdrivers::Network).to have_received(:get)
202
- expect(Webdrivers::System).to have_received(:valid_cache?)
203
- end
204
- end
205
-
206
- describe '#required_version=' do
207
- after { chromedriver.required_version = nil }
208
-
209
- it 'returns the version specified as a Float' do
210
- chromedriver.required_version = 73.0
211
-
212
- expect(chromedriver.required_version).to eq Gem::Version.new('73.0')
213
- end
214
-
215
- it 'returns the version specified as a String' do
216
- chromedriver.required_version = '73.0'
217
-
218
- expect(chromedriver.required_version).to eq Gem::Version.new('73.0')
219
- end
220
- end
221
-
222
- describe '#remove' do
223
- it 'removes existing chromedriver' do
224
- chromedriver.update
225
-
226
- chromedriver.remove
227
- expect(chromedriver.current_version).to be_nil
228
- end
229
-
230
- it 'does not raise exception if no chromedriver found' do
231
- expect { chromedriver.remove }.not_to raise_error
232
- end
233
- end
234
-
235
- describe '#install_dir' do
236
- it 'uses ~/.webdrivers as default value' do
237
- expect(Webdrivers::System.install_dir).to include('.webdriver')
238
- end
239
-
240
- it 'uses provided value' do
241
- begin
242
- install_dir = File.expand_path(File.join(ENV['HOME'], '.webdrivers2'))
243
- Webdrivers.install_dir = install_dir
244
-
245
- expect(Webdrivers::System.install_dir).to eq install_dir
246
- ensure
247
- Webdrivers.install_dir = nil
248
- end
249
- end
250
- end
251
-
252
- describe '#driver_path' do
253
- it 'returns full location of binary' do
254
- expect(chromedriver.driver_path).to match("#{File.join(ENV['HOME'])}/.webdrivers/chromedriver")
255
- end
256
- end
257
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Webdrivers::Chromedriver do
6
+ let(:chromedriver) { described_class }
7
+
8
+ before { chromedriver.remove }
9
+
10
+ describe '#update' do
11
+ context 'when evaluating #correct_binary?' do
12
+ it 'does not download when latest version and current version match' do
13
+ allow(chromedriver).to receive(:latest_version).and_return(Gem::Version.new('72.0.0'))
14
+ allow(chromedriver).to receive(:current_version).and_return(Gem::Version.new('72.0.0'))
15
+
16
+ chromedriver.update
17
+
18
+ expect(chromedriver.send(:exists?)).to be false
19
+ end
20
+
21
+ it 'does not download when offline, binary exists and is less than v70' do
22
+ allow(Net::HTTP).to receive(:get_response).and_raise(SocketError)
23
+ allow(chromedriver).to receive(:exists?).and_return(true)
24
+ allow(chromedriver).to receive(:current_version).and_return(Gem::Version.new(69))
25
+
26
+ chromedriver.update
27
+
28
+ expect(File.exist?(chromedriver.driver_path)).to be false
29
+ end
30
+
31
+ it 'does not download when offline, binary exists and matches major browser version' do
32
+ allow(Net::HTTP).to receive(:get_response).and_raise(SocketError)
33
+ allow(chromedriver).to receive(:exists?).and_return(true)
34
+ allow(chromedriver).to receive(:chrome_version).and_return(Gem::Version.new('73.0.3683.68'))
35
+ allow(chromedriver).to receive(:current_version).and_return(Gem::Version.new('73.0.3683.20'))
36
+
37
+ chromedriver.update
38
+
39
+ expect(File.exist?(chromedriver.driver_path)).to be false
40
+ end
41
+
42
+ it 'does not download when get raises exception, binary exists and matches major browser version' do
43
+ client_error = instance_double(Net::HTTPNotFound, class: Net::HTTPNotFound, code: 404, message: '')
44
+
45
+ allow(Webdrivers::Network).to receive(:get_response).and_return(client_error)
46
+ allow(chromedriver).to receive(:exists?).and_return(true)
47
+ allow(chromedriver).to receive(:chrome_version).and_return(Gem::Version.new('73.0.3683.68'))
48
+ allow(chromedriver).to receive(:current_version).and_return(Gem::Version.new('73.0.3683.20'))
49
+
50
+ chromedriver.update
51
+
52
+ expect(File.exist?(chromedriver.driver_path)).to be false
53
+ end
54
+
55
+ it 'raises ConnectionError when offline, and binary does not match major browser version' do
56
+ allow(Net::HTTP).to receive(:get_response).and_raise(SocketError)
57
+ allow(chromedriver).to receive(:exists?).and_return(true)
58
+ allow(chromedriver).to receive(:chrome_version).and_return(Gem::Version.new('73.0.3683.68'))
59
+ allow(chromedriver).to receive(:current_version).and_return(Gem::Version.new('72.0.0.0'))
60
+
61
+ msg = %r{Can not reach https://chromedriver.storage.googleapis.com}
62
+ expect { chromedriver.update }.to raise_error(Webdrivers::ConnectionError, msg)
63
+ end
64
+
65
+ it 'raises ConnectionError when offline, and no binary exists' do
66
+ allow(Net::HTTP).to receive(:get_response).and_raise(SocketError)
67
+ allow(chromedriver).to receive(:exists?).and_return(false)
68
+
69
+ msg = %r{Can not reach https://chromedriver.storage.googleapis.com}
70
+ expect { chromedriver.update }.to raise_error(Webdrivers::ConnectionError, msg)
71
+ end
72
+ end
73
+
74
+ context 'when correct binary is found' do
75
+ before { allow(chromedriver).to receive(:correct_binary?).and_return(true) }
76
+
77
+ it 'does not download' do
78
+ chromedriver.update
79
+
80
+ expect(chromedriver.current_version).to be_nil
81
+ end
82
+
83
+ it 'does not raise exception if offline' do
84
+ allow(Net::HTTP).to receive(:get_response).and_raise(SocketError)
85
+
86
+ chromedriver.update
87
+
88
+ expect(chromedriver.current_version).to be_nil
89
+ end
90
+ end
91
+
92
+ context 'when correct binary is not found' do
93
+ before { allow(chromedriver).to receive(:correct_binary?).and_return(false) }
94
+
95
+ it 'downloads binary' do
96
+ chromedriver.update
97
+
98
+ expect(chromedriver.current_version).not_to be_nil
99
+ end
100
+
101
+ it 'raises ConnectionError if offline' do
102
+ allow(Net::HTTP).to receive(:get_response).and_raise(SocketError)
103
+
104
+ msg = %r{Can not reach https://chromedriver.storage.googleapis.com/}
105
+ expect { chromedriver.update }.to raise_error(Webdrivers::ConnectionError, msg)
106
+ end
107
+ end
108
+
109
+ it 'makes a network call if cached driver does not match the browser' do
110
+ Webdrivers::System.cache_version('chromedriver', '71.0.3578.137')
111
+ allow(chromedriver).to receive(:chrome_version).and_return(Gem::Version.new('73.0.3683.68'))
112
+ allow(Webdrivers::Network).to receive(:get).and_return('73.0.3683.68')
113
+ allow(Webdrivers::System).to receive(:download)
114
+
115
+ chromedriver.update
116
+
117
+ expect(Webdrivers::Network).to have_received(:get).twice
118
+ end
119
+ end
120
+
121
+ describe '#current_version' do
122
+ it 'returns nil if binary does not exist on the system' do
123
+ allow(chromedriver).to receive(:driver_path).and_return('')
124
+
125
+ expect(chromedriver.current_version).to be_nil
126
+ end
127
+
128
+ it 'returns a Gem::Version instance if binary is on the system' do
129
+ allow(chromedriver).to receive(:exists?).and_return(true)
130
+ allow(Webdrivers::System).to receive(:call)
131
+ .with("#{chromedriver.driver_path} --version")
132
+ .and_return '71.0.3578.137'
133
+
134
+ expect(chromedriver.current_version).to eq Gem::Version.new('71.0.3578.137')
135
+ end
136
+ end
137
+
138
+ describe '#latest_version' do
139
+ it 'returns 2.41 if the browser version is less than 70' do
140
+ allow(chromedriver).to receive(:chrome_version).and_return('69.0.0')
141
+
142
+ expect(chromedriver.latest_version).to eq(Gem::Version.new('2.41'))
143
+ end
144
+
145
+ it 'returns the correct point release for a production version greater than 70' do
146
+ allow(chromedriver).to receive(:chrome_version).and_return '71.0.3578.9999'
147
+
148
+ expect(chromedriver.latest_version).to eq Gem::Version.new('71.0.3578.137')
149
+ end
150
+
151
+ it 'raises VersionError for beta version' do
152
+ allow(chromedriver).to receive(:chrome_version).and_return('100.0.0')
153
+ msg = 'Unable to find latest point release version for 100.0.0. '\
154
+ 'You appear to be using a non-production version of Chrome. '\
155
+ 'Please set `Webdrivers::Chromedriver.required_version = <desired driver version>` '\
156
+ 'to a known chromedriver version: https://chromedriver.storage.googleapis.com/index.html'
157
+
158
+ expect { chromedriver.latest_version }.to raise_exception(Webdrivers::VersionError, msg)
159
+ end
160
+
161
+ it 'raises VersionError for unknown version' do
162
+ allow(chromedriver).to receive(:chrome_version).and_return('72.0.9999.0000')
163
+ msg = 'Unable to find latest point release version for 72.0.9999. '\
164
+ 'Please set `Webdrivers::Chromedriver.required_version = <desired driver version>` '\
165
+ 'to a known chromedriver version: https://chromedriver.storage.googleapis.com/index.html'
166
+
167
+ expect { chromedriver.latest_version }.to raise_exception(Webdrivers::VersionError, msg)
168
+ end
169
+
170
+ it 'raises ConnectionError when offline' do
171
+ allow(Net::HTTP).to receive(:get_response).and_raise(SocketError)
172
+
173
+ msg = %r{^Can not reach https://chromedriver.storage.googleapis.com}
174
+ expect { chromedriver.latest_version }.to raise_error(Webdrivers::ConnectionError, msg)
175
+ end
176
+
177
+ it 'creates cached file' do
178
+ allow(Webdrivers::Network).to receive(:get).and_return('71.0.3578.137')
179
+
180
+ chromedriver.latest_version
181
+ expect(File.exist?("#{Webdrivers::System.install_dir}/chromedriver.version")).to eq true
182
+ end
183
+
184
+ it 'does not make network call if cache is valid' do
185
+ allow(Webdrivers).to receive(:cache_time).and_return(3600)
186
+ Webdrivers::System.cache_version('chromedriver', '71.0.3578.137')
187
+ allow(Webdrivers::Network).to receive(:get)
188
+
189
+ expect(chromedriver.latest_version).to eq Gem::Version.new('71.0.3578.137')
190
+
191
+ expect(Webdrivers::Network).not_to have_received(:get)
192
+ end
193
+
194
+ it 'makes a network call if cache is expired' do
195
+ Webdrivers::System.cache_version('chromedriver', '71.0.3578.137')
196
+ allow(Webdrivers::Network).to receive(:get).and_return('73.0.3683.68')
197
+ allow(Webdrivers::System).to receive(:valid_cache?)
198
+
199
+ expect(chromedriver.latest_version).to eq Gem::Version.new('73.0.3683.68')
200
+
201
+ expect(Webdrivers::Network).to have_received(:get)
202
+ expect(Webdrivers::System).to have_received(:valid_cache?)
203
+ end
204
+ end
205
+
206
+ describe '#required_version=' do
207
+ after { chromedriver.required_version = nil }
208
+
209
+ it 'returns the version specified as a Float' do
210
+ chromedriver.required_version = 73.0
211
+
212
+ expect(chromedriver.required_version).to eq Gem::Version.new('73.0')
213
+ end
214
+
215
+ it 'returns the version specified as a String' do
216
+ chromedriver.required_version = '73.0'
217
+
218
+ expect(chromedriver.required_version).to eq Gem::Version.new('73.0')
219
+ end
220
+ end
221
+
222
+ describe '#remove' do
223
+ it 'removes existing chromedriver' do
224
+ chromedriver.update
225
+
226
+ chromedriver.remove
227
+ expect(chromedriver.current_version).to be_nil
228
+ end
229
+
230
+ it 'does not raise exception if no chromedriver found' do
231
+ expect { chromedriver.remove }.not_to raise_error
232
+ end
233
+ end
234
+
235
+ describe '#install_dir' do
236
+ it 'uses ~/.webdrivers as default value' do
237
+ expect(Webdrivers::System.install_dir).to include('.webdriver')
238
+ end
239
+
240
+ it 'uses provided value' do
241
+ begin
242
+ install_dir = File.expand_path(File.join(ENV['HOME'], '.webdrivers2'))
243
+ Webdrivers.install_dir = install_dir
244
+
245
+ expect(Webdrivers::System.install_dir).to eq install_dir
246
+ ensure
247
+ Webdrivers.install_dir = nil
248
+ end
249
+ end
250
+ end
251
+
252
+ describe '#driver_path' do
253
+ it 'returns full location of binary' do
254
+ expect(chromedriver.driver_path).to match("#{File.join(ENV['HOME'])}/.webdrivers/chromedriver")
255
+ end
256
+ end
257
+ end