percy-capybara 2.4.1 → 2.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1ffda7d1edb1b8af63b836b222198c91f5b4123b
4
- data.tar.gz: 0a4530980562b8eee91a122ccb605c10376d8d9f
3
+ metadata.gz: 1f2c6b66630a9b989903633853eb47c1d74595a7
4
+ data.tar.gz: 1a747e278afafb60039383ec401c8d20b1cdb5f3
5
5
  SHA512:
6
- metadata.gz: 0b80f67fc99db1389d5c3dbc9b3e743d4ccc3ba87cde1db6e6397e056457a3d85a20233ecdff8d291108a66f0e00848f56642e899f85c2d96259e48b4e3a0442
7
- data.tar.gz: 84c9e112198d7d43f46519d639ae9dc9ee620fac769331a5e43eccdaeb253f507bc51c2dc91bf3c826dae0f08034d0dd954b950986fc03621936a97a145c3558
6
+ metadata.gz: 6e134b285b13d3fdf24a305a7f79a1701c8a2defa16e0105de781da019484d80e8a8390915fb6b579d4834bd3eddeefde3a254850a649760b23ed225d59f85f8
7
+ data.tar.gz: 519a72136a56740eaec3c8f7dbd56dbbc10eb0ebae3d5b145cc10025c89306e569b84a11c1da85ac904900d7471d3179cc5411cb7766b8a7ad789eddbb18e504
data/.rubocop.yml CHANGED
@@ -5,9 +5,18 @@ AllCops:
5
5
  - Rakefile
6
6
  - lib/**/*.rake
7
7
 
8
+ Lint/EndAlignment:
9
+ EnforcedStyleAlignWith: variable
10
+
8
11
  Metrics/LineLength:
9
12
  Max: 100
10
13
 
14
+ Style/CaseIndentation:
15
+ EnforcedStyle: end
16
+
17
+ Style/AlignParameters:
18
+ EnforcedStyle: with_fixed_indentation
19
+
11
20
  Style/Documentation:
12
21
  Enabled: false
13
22
 
@@ -23,20 +32,32 @@ Style/MultilineMethodCallIndentation:
23
32
  Style/MultilineOperationIndentation:
24
33
  EnforcedStyle: indented
25
34
 
35
+ # Disable Style/NumericLiterals so numbers don't need underscores
36
+ Style/NumericLiterals:
37
+ Enabled: false
38
+
39
+ Style/NumericPredicate:
40
+ EnforcedStyle: comparison
41
+
26
42
  Style/RedundantBegin:
27
43
  Enabled: false
28
44
 
45
+ Style/RegexpLiteral:
46
+ EnforcedStyle: slashes
47
+ AllowInnerSlashes: true
48
+
29
49
  Style/SpaceInsideHashLiteralBraces:
30
50
  EnforcedStyle: no_space
31
51
 
52
+ Style/TrailingCommaInArguments:
53
+ EnforcedStyleForMultiline: consistent_comma
54
+
32
55
  Style/TrailingCommaInLiteral:
33
- EnforcedStyleForMultiline: comma
56
+ EnforcedStyleForMultiline: consistent_comma
34
57
 
35
58
  RSpec/MessageSpies:
36
59
  EnforcedStyle: receive
37
60
 
38
-
39
-
40
61
  # Will be able to do this in >= v1.11
41
62
  # RSpec/DescribedClass:
42
63
  # EnforcedStyle: explicit
data/.rubocop_todo.yml CHANGED
@@ -13,12 +13,12 @@ Metrics/AbcSize:
13
13
  # Offense count: 27
14
14
  # Configuration parameters: CountComments, ExcludedMethods.
15
15
  Metrics/BlockLength:
16
- Max: 227
16
+ Max: 300
17
17
 
18
18
  # Offense count: 1
19
19
  # Configuration parameters: CountComments.
20
20
  Metrics/ClassLength:
21
- Max: 164
21
+ Max: 200
22
22
 
23
23
  # Offense count: 5
24
24
  Metrics/CyclomaticComplexity:
@@ -67,8 +67,7 @@ RSpec/MultipleExpectations:
67
67
  # Offense count: 1
68
68
  # Configuration parameters: Max.
69
69
  RSpec/NestedGroups:
70
- Exclude:
71
- - 'spec/lib/percy/capybara/loaders/sprockets_loader_spec.rb'
70
+ Enabled: false
72
71
 
73
72
  # Offense count: 10
74
73
  # Configuration parameters: IgnoreSymbolicNames.
@@ -81,17 +80,6 @@ RSpec/VerifiedDoubles:
81
80
  - 'spec/lib/percy/capybara_spec.rb'
82
81
  - 'spec/support/test_helpers.rb'
83
82
 
84
- # Offense count: 4
85
- # Cop supports --auto-correct.
86
- # Configuration parameters: EnforcedStyle, SupportedStyles, AllowInnerSlashes.
87
- # SupportedStyles: slashes, percent_r, mixed
88
- Style/RegexpLiteral:
89
- Exclude:
90
- - 'lib/percy/capybara/loaders/native_loader.rb'
91
- - 'spec/lib/percy/capybara/loaders/native_loader_spec.rb'
92
- - 'spec/lib/percy/capybara/loaders/sprockets_loader_spec.rb'
93
- - 'spec/support/test_helpers.rb'
94
-
95
83
  # Offense count: 1
96
84
  Style/StructInheritance:
97
85
  Exclude:
@@ -40,7 +40,7 @@ module Percy
40
40
  return unless enabled? # Silently skip if the client is disabled.
41
41
  unless build_initialized?
42
42
  raise Percy::Capybara::Client::BuildNotInitializedError,
43
- 'Failed to finalize build because no build has been initialized.'
43
+ 'Failed to finalize build because no build has been initialized.'
44
44
  end
45
45
  result = rescue_connection_failures do
46
46
  client.finalize_build(current_build['data']['id'])
@@ -66,7 +66,7 @@ module Percy
66
66
  resource = build_resources.find { |r| r.sha == sha }
67
67
  content = resource.content || File.read(resource.path)
68
68
  client.upload_resource(current_build['data']['id'], content)
69
- if (i % 10).zero?
69
+ if (i % 10) == 0
70
70
  puts "[percy] Uploading #{i + 1} of #{new_build_resources.length} new resources..."
71
71
  end
72
72
  end
@@ -29,7 +29,7 @@ module Percy
29
29
  # port number
30
30
  '(:\\d{2,5})?' +
31
31
  # resource path
32
- "(/[^\\s\"']*)?"
32
+ "(/[^\\s\"']*)?",
33
33
  )
34
34
 
35
35
  attr_reader :page
@@ -50,7 +50,7 @@ module Percy
50
50
  # @private
51
51
  def root_html_resource
52
52
  Percy::Client::Resource.new(
53
- current_path, is_root: true, mimetype: 'text/html', content: page.html
53
+ current_path, is_root: true, mimetype: 'text/html', content: page.html,
54
54
  )
55
55
  end
56
56
 
@@ -92,7 +92,7 @@ module Percy
92
92
  path,
93
93
  content: content,
94
94
  sha: sha,
95
- mimetype: 'text/html'
95
+ mimetype: 'text/html',
96
96
  )
97
97
  end
98
98
  end
@@ -17,6 +17,12 @@ module Percy
17
17
  '0.0.0.0',
18
18
  ].freeze
19
19
 
20
+ def initialize(options = {})
21
+ super(options)
22
+
23
+ @asset_hostnames = options[:asset_hostnames] || []
24
+ end
25
+
20
26
  def snapshot_resources
21
27
  resources = []
22
28
  resources << root_html_resource
@@ -77,7 +83,7 @@ module Percy
77
83
  _absolute_url_to_relative!(url, _current_host_port)
78
84
  next unless response
79
85
  resources << Percy::Client::Resource.new(
80
- url, mimetype: 'text/css', content: response.body
86
+ url, mimetype: 'text/css', content: response.body,
81
87
  )
82
88
  end
83
89
  resources
@@ -164,7 +170,7 @@ module Percy
164
170
  next unless response
165
171
 
166
172
  resources << Percy::Client::Resource.new(
167
- resource_url, mimetype: response.content_type, content: response.body
173
+ resource_url, mimetype: response.content_type, content: response.body,
168
174
  )
169
175
  end
170
176
  resources
@@ -204,7 +210,7 @@ module Percy
204
210
  # Is not a remote URL.
205
211
  if url_match && !data_url_match
206
212
  host = url_match[2]
207
- result = LOCAL_HOSTNAMES.include?(host) || _same_server?(url, _current_host_port)
213
+ result = asset_hostnames.include?(host) || _same_server?(url, _current_host_port)
208
214
  end
209
215
 
210
216
  !!result
@@ -215,17 +221,24 @@ module Percy
215
221
  url_match = URL_REGEX.match(page.current_url)
216
222
  url_match[1] + url_match[2] + (url_match[3] || '')
217
223
  end
224
+ private :_current_host_port
218
225
 
219
226
  # @private
220
227
  def _same_server?(url, host_port)
221
228
  url.start_with?(host_port + '/') || url == host_port
222
229
  end
230
+ private :_same_server?
223
231
 
224
232
  # @private
225
233
  def _absolute_url_to_relative!(url, host_port)
226
234
  url.gsub!(host_port + '/', '/') if url.start_with?(host_port + '/')
227
235
  end
228
236
  private :_absolute_url_to_relative!
237
+
238
+ def asset_hostnames
239
+ LOCAL_HOSTNAMES + @asset_hostnames
240
+ end
241
+ private :asset_hostnames
229
242
  end
230
243
  end
231
244
  end
@@ -1,5 +1,5 @@
1
1
  module Percy
2
2
  module Capybara
3
- VERSION = '2.4.1'.freeze
3
+ VERSION = '2.4.2'.freeze
4
4
  end
5
5
  end
@@ -76,7 +76,7 @@ RSpec.describe Percy::Capybara::Client::Snapshots, type: :feature do
76
76
  .and_call_original
77
77
 
78
78
  result = capybara_client.snapshot(
79
- page, name: 'foo', widths: [320, 1024], enable_javascript: true
79
+ page, name: 'foo', widths: [320, 1024], enable_javascript: true,
80
80
  )
81
81
  expect(result).to eq(true)
82
82
  expect(capybara_client.failed?).to eq(false)
@@ -4,7 +4,7 @@ RSpec.describe Percy::Capybara::HttpFetcher do
4
4
 
5
5
  # Slightly magical hash, just a SHA-256 sum of the image above.
6
6
  expect(Digest::SHA256.hexdigest(response.body)).to eq(
7
- '4beb51550bef8e9e30d37ea8c13658e99bb01722062f218185e419af5ad93e13'
7
+ '4beb51550bef8e9e30d37ea8c13658e99bb01722062f218185e419af5ad93e13',
8
8
  )
9
9
  expect(response.content_type).to eq('image/png')
10
10
  end
@@ -1,6 +1,7 @@
1
1
  RSpec.describe Percy::Capybara::Loaders::NativeLoader do
2
2
  let(:fake_page) { OpenStruct.new(current_url: 'http://localhost/foo') }
3
- let(:loader) { described_class.new(page: fake_page) }
3
+ let(:asset_hostnames) { nil }
4
+ let(:loader) { described_class.new(page: fake_page, asset_hostnames: asset_hostnames) }
4
5
 
5
6
  describe '#build_resources' do
6
7
  it 'returns an empty list' do
@@ -17,32 +18,36 @@ RSpec.describe Percy::Capybara::Loaders::NativeLoader do
17
18
  visit '/test-css.html'
18
19
  loader = described_class.new(page: page)
19
20
  resource_urls = loader.snapshot_resources.collect(&:resource_url)
20
- expect(resource_urls).to match_array([
21
- '/test-css.html',
22
- '/css/base.css',
23
- '/css/imports.css',
24
- '/css/level0-imports.css',
25
- '/css/level1-imports.css',
26
- '/css/level2-imports.css',
27
- '/css/simple-imports.css',
28
- ])
21
+ expect(resource_urls).to match_array(
22
+ [
23
+ '/test-css.html',
24
+ '/css/base.css',
25
+ '/css/imports.css',
26
+ '/css/level0-imports.css',
27
+ '/css/level1-imports.css',
28
+ '/css/level2-imports.css',
29
+ '/css/simple-imports.css',
30
+ ],
31
+ )
29
32
  end
30
33
  it 'returns the root HTML and image resources' do
31
34
  visit '/test-images.html'
32
35
  loader = described_class.new(page: page)
33
36
  resource_urls = loader.snapshot_resources.collect(&:resource_url)
34
- expect(resource_urls).to match_array([
35
- '/test-images.html',
36
- '/images/img-relative.png',
37
- '/images/img-relative-to-root.png',
38
- '/images/percy.svg',
39
- '/images/srcset-base.png',
40
- '/images/srcset-first.png',
41
- '/images/srcset-second.png',
42
- '/images/bg-relative.png',
43
- '/images/bg-relative-to-root.png',
44
- '/images/bg-stacked.png',
45
- ])
37
+ expect(resource_urls).to match_array(
38
+ [
39
+ '/test-images.html',
40
+ '/images/img-relative.png',
41
+ '/images/img-relative-to-root.png',
42
+ '/images/percy.svg',
43
+ '/images/srcset-base.png',
44
+ '/images/srcset-first.png',
45
+ '/images/srcset-second.png',
46
+ '/images/bg-relative.png',
47
+ '/images/bg-relative-to-root.png',
48
+ '/images/bg-stacked.png',
49
+ ],
50
+ )
46
51
  end
47
52
  end
48
53
  describe 'nonlocal.me', type: :feature, js: true do
@@ -57,10 +62,12 @@ RSpec.describe Percy::Capybara::Loaders::NativeLoader do
57
62
  visit '/test-localtest-me-images.html'
58
63
  loader = described_class.new(page: page)
59
64
  resource_urls = loader.snapshot_resources.collect(&:resource_url)
60
- expect(resource_urls).to eq([
61
- '/test-localtest-me-images.html',
62
- '/images/img-relative.png',
63
- ])
65
+ expect(resource_urls).to eq(
66
+ [
67
+ '/test-localtest-me-images.html',
68
+ '/images/img-relative.png',
69
+ ],
70
+ )
64
71
  expect(loader.snapshot_resources.collect(&:is_root)).to eq([true, nil])
65
72
  end
66
73
  end
@@ -91,11 +98,29 @@ RSpec.describe Percy::Capybara::Loaders::NativeLoader do
91
98
  it 'returns false for data URLs' do
92
99
  expect(loader._should_include_url?('data:image/gif;base64,R0')).to eq(false)
93
100
  end
94
- it 'returns false for remote URLs' do
95
- expect(loader._should_include_url?('http://foo/')).to eq(false)
96
- expect(loader._should_include_url?('http://example.com/')).to eq(false)
97
- expect(loader._should_include_url?('http://example.com/foo')).to eq(false)
98
- expect(loader._should_include_url?('https://example.com/foo')).to eq(false)
101
+
102
+ context 'when loader is initialised with asset hostnames' do
103
+ let(:asset_hostnames) { ['dev.local'] }
104
+ context 'with the same port' do
105
+ it 'returns in accordance with asset_hostnames' do
106
+ expect(loader._should_include_url?('http://dev.local/')).to eq(true)
107
+ expect(loader._should_include_url?('http://dev.local/foo')).to eq(true)
108
+
109
+ expect(loader._should_include_url?('http://other.local/')).to eq(false)
110
+ end
111
+ end
112
+ context 'with different port' do
113
+ it 'returns in accordance with asset_hostnames' do
114
+ expect(loader._should_include_url?('http://dev.local:4321/foo')).to eq(true)
115
+ expect(loader._should_include_url?('http://other.local:1234/foo')).to eq(false)
116
+ end
117
+ end
118
+ context 'https' do
119
+ it 'returns in accordance with asset_hostnames' do
120
+ expect(loader._should_include_url?('https://dev.local/foo')).to eq(true)
121
+ expect(loader._should_include_url?('https://other.local/foo')).to eq(false)
122
+ end
123
+ end
99
124
  end
100
125
  context 'for nonlocal hosts' do
101
126
  let(:fake_page) { OpenStruct.new(current_url: 'http://foo:123/') }
@@ -238,17 +263,19 @@ RSpec.describe Percy::Capybara::Loaders::NativeLoader do
238
263
  expect(resource.sha).to eq(expected_sha)
239
264
 
240
265
  resource_urls = resources.collect(&:resource_url)
241
- expect(resource_urls).to match_array([
242
- '/images/img-relative.png',
243
- '/images/img-relative-to-root.png',
244
- '/images/percy.svg',
245
- '/images/srcset-base.png',
246
- '/images/srcset-first.png',
247
- '/images/srcset-second.png',
248
- '/images/bg-relative.png',
249
- '/images/bg-relative-to-root.png',
250
- '/images/bg-stacked.png',
251
- ])
266
+ expect(resource_urls).to match_array(
267
+ [
268
+ '/images/img-relative.png',
269
+ '/images/img-relative-to-root.png',
270
+ '/images/percy.svg',
271
+ '/images/srcset-base.png',
272
+ '/images/srcset-first.png',
273
+ '/images/srcset-second.png',
274
+ '/images/bg-relative.png',
275
+ '/images/bg-relative-to-root.png',
276
+ '/images/bg-stacked.png',
277
+ ],
278
+ )
252
279
  expect(resources.collect(&:is_root).uniq).to match_array([nil])
253
280
  end
254
281
  end
@@ -11,7 +11,7 @@ RSpec.describe Percy::Capybara::Loaders::SprocketsLoader do
11
11
  described_class.new(
12
12
  page: page,
13
13
  sprockets_environment: environment,
14
- sprockets_options: sprockets_options
14
+ sprockets_options: sprockets_options,
15
15
  )
16
16
  end
17
17
  let(:environment) do
data/spec/spec_helper.rb CHANGED
@@ -62,9 +62,11 @@ RSpec.configure do |config|
62
62
 
63
63
  # Note: using this form of popen to keep stdout and stderr silent and captured.
64
64
  dir = File.expand_path('../lib/percy/capybara/client/testdata/', __FILE__)
65
- @process = IO.popen([
66
- 'ruby', '-run', '-e', 'httpd', dir, '-p', port.to_s, err: [:child, :out]
67
- ].flatten)
65
+ @process = IO.popen(
66
+ [
67
+ 'ruby', '-run', '-e', 'httpd', dir, '-p', port.to_s, err: [:child, :out],
68
+ ].flatten,
69
+ )
68
70
 
69
71
  # Block until the server is up.
70
72
  WebMock.disable_net_connect!(allow_localhost: true)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: percy-capybara
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.1
4
+ version: 2.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Perceptual Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-10 00:00:00.000000000 Z
11
+ date: 2017-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: percy-client