percy-capybara 2.2.1 → 2.3.0.pre.beta

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ba3abec61203467b5066ac44658753eab828b746
4
- data.tar.gz: c7c22b0191494571c3d27209b14f7d0070f7845f
3
+ metadata.gz: 71c56a6b8fa32cad84b4ae785c5e588fb69a8cc3
4
+ data.tar.gz: 180f9ef6e37fff8a5b6651636d0c9da1da09bdd8
5
5
  SHA512:
6
- metadata.gz: 9ee2ac9713252a33c5eae460c1f346f294cdd148f7395f835a427f61472e0972c18ea76379352b5043e9599fc9af8d3316dc9e268a4672e9d603860d39127dce
7
- data.tar.gz: 7d4993b02becdf6e52e7b28f5a84b89725b365f88ddd36ba8cc7375f079b68634373c3d7a7b788c84d845a6bd436b36e3751391b1004dfbfd348da429d5f0e29
6
+ metadata.gz: 46f00c5cbd564c7e70c681a7a3f656e03c0951852e83ac9bea9f4084ef9df6ac85bd6eb2c39dda6b83766d60e3297bb22518cca6ee176e2111a83588389295cd
7
+ data.tar.gz: 220bf693af97479584a1baeb7b39d1affddb4b5bbdf7978dc46b112ff28b0ab148a8e80a0e4cdb1edeb78583d04435b2ab306e053b3d8f7fe47011db2468831a
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- percy-capybara (2.2.1)
4
+ percy-capybara (2.3.0.pre.beta)
5
5
  percy-client (~> 1.4)
6
6
 
7
7
  GEM
@@ -70,6 +70,36 @@ module Percy
70
70
 
71
71
  current_url
72
72
  end
73
+
74
+ # NOTES:
75
+ # - Doesn't handle multiple iframes with the same URL (`src` attribute)
76
+ # @private
77
+ def iframes_resources
78
+ resources = []
79
+
80
+ page.all(:css, 'iframe').each do |iframe_element|
81
+ iframe_url = iframe_element[:src]
82
+ root_page_host = page.current_host
83
+
84
+ page.within_frame(iframe_element) do
85
+ next unless page.current_host == root_page_host
86
+ path = URI.parse(iframe_url).path
87
+ content = page.body
88
+ sha = Digest::SHA256.hexdigest(content)
89
+ resources <<
90
+ Percy::Client::Resource.new(
91
+ path,
92
+ content: content,
93
+ sha: sha,
94
+ mimetype: 'text/html'
95
+ )
96
+ end
97
+ end
98
+
99
+ resources
100
+ rescue ::Capybara::NotSupportedByDriverError
101
+ []
102
+ end
73
103
  end
74
104
  end
75
105
  end
@@ -23,6 +23,7 @@ module Percy
23
23
  resources << root_html_resource
24
24
  resources += _get_css_resources
25
25
  resources += _get_image_resources
26
+ resources += iframes_resources
26
27
  resources
27
28
  end
28
29
 
@@ -25,9 +25,7 @@ module Percy
25
25
  end
26
26
 
27
27
  def snapshot_resources
28
- # When loading via Sprockets, all other resources are associated to the build, so the only
29
- # snapshot resource to upload is the root HTML.
30
- [root_html_resource]
28
+ [root_html_resource] + iframes_resources
31
29
  end
32
30
 
33
31
  def build_resources
@@ -1,5 +1,5 @@
1
1
  module Percy
2
2
  module Capybara
3
- VERSION = '2.2.1'
3
+ VERSION = '2.3.0-beta'
4
4
  end
5
5
  end
@@ -0,0 +1,7 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <title>iframe</title>
4
+ <body>
5
+ Inside iframe.
6
+ </body>
7
+ </html>
@@ -0,0 +1,8 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <title>Test iframe</title>
4
+ <body>
5
+ <iframe src="iframe.html"></iframe>
6
+ <iframe src="https://google.com/search"></iframe>
7
+ </body>
8
+ </html>
@@ -1,3 +1,11 @@
1
+ IFRAME_PATH = File.expand_path('../../client/testdata/test-iframe.html', __FILE__)
2
+
3
+ class RackAppWithIframe
4
+ def self.call(env)
5
+ [200, {}, File.read(IFRAME_PATH)]
6
+ end
7
+ end
8
+
1
9
  RSpec.describe Percy::Capybara::Loaders::BaseLoader do
2
10
  let(:loader) { described_class.new }
3
11
 
@@ -15,6 +23,20 @@ RSpec.describe Percy::Capybara::Loaders::BaseLoader do
15
23
  expect(resource.sha).to eq(Digest::SHA256.hexdigest(resource.content))
16
24
  end
17
25
  end
26
+ describe '#iframes_resources', type: :feature, js: true do
27
+ it 'includes the iframe DOM HTML' do
28
+ visit '/test-iframe.html'
29
+
30
+ loader = described_class.new(page: page)
31
+ resources = loader.iframes_resources
32
+
33
+ expect(resources.size).to eq(1) # doesn't include iframe to remote host
34
+ last_resource = resources.last
35
+ expect(last_resource.resource_url).to eq('iframe.html')
36
+ expect(last_resource.mimetype).to eq('text/html')
37
+ expect(last_resource.content).to include('Inside iframe')
38
+ end
39
+ end
18
40
  describe '#build_resources' do
19
41
  it 'raises a NotImplementedError' do
20
42
  expect { loader.build_resources }.to raise_error(NotImplementedError)
@@ -51,6 +73,19 @@ RSpec.describe Percy::Capybara::Loaders::BaseLoader do
51
73
  expect(loader.current_path).to eq('/about:srcdoc')
52
74
  end
53
75
  end
76
+
77
+ context 'Rack::Test', type: :feature do
78
+ before(:each) { Capybara.app = RackAppWithIframe }
79
+ after(:each) { Capybara.app = nil }
80
+
81
+ describe '#iframes_resources' do
82
+ it 'is silently ignored' do
83
+ visit '/test-iframe.html'
84
+ loader = described_class.new(page: page)
85
+ expect(loader.iframes_resources).to eq([])
86
+ end
87
+ end
88
+ end
54
89
  end
55
90
 
56
91
 
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.2.1
4
+ version: 2.3.0.pre.beta
5
5
  platform: ruby
6
6
  authors:
7
7
  - Perceptual Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-21 00:00:00.000000000 Z
11
+ date: 2016-07-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: percy-client
@@ -203,6 +203,7 @@ files:
203
203
  - spec/lib/percy/capybara/client/testdata/css/level2-imports.css
204
204
  - spec/lib/percy/capybara/client/testdata/css/simple-imports.css
205
205
  - spec/lib/percy/capybara/client/testdata/css/source.css.map
206
+ - spec/lib/percy/capybara/client/testdata/iframe.html
206
207
  - spec/lib/percy/capybara/client/testdata/images/bg-relative-to-root.png
207
208
  - spec/lib/percy/capybara/client/testdata/images/bg-relative.png
208
209
  - spec/lib/percy/capybara/client/testdata/images/bg-stacked.png
@@ -215,6 +216,7 @@ files:
215
216
  - spec/lib/percy/capybara/client/testdata/index.html
216
217
  - spec/lib/percy/capybara/client/testdata/js/base.js
217
218
  - spec/lib/percy/capybara/client/testdata/test-css.html
219
+ - spec/lib/percy/capybara/client/testdata/test-iframe.html
218
220
  - spec/lib/percy/capybara/client/testdata/test-images.html
219
221
  - spec/lib/percy/capybara/client_spec.rb
220
222
  - spec/lib/percy/capybara/httpfetcher_spec.rb
@@ -239,9 +241,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
239
241
  version: '0'
240
242
  required_rubygems_version: !ruby/object:Gem::Requirement
241
243
  requirements:
242
- - - ">="
244
+ - - ">"
243
245
  - !ruby/object:Gem::Version
244
- version: '0'
246
+ version: 1.3.1
245
247
  requirements: []
246
248
  rubyforge_project:
247
249
  rubygems_version: 2.2.2
@@ -260,6 +262,7 @@ test_files:
260
262
  - spec/lib/percy/capybara/client/testdata/css/level2-imports.css
261
263
  - spec/lib/percy/capybara/client/testdata/css/simple-imports.css
262
264
  - spec/lib/percy/capybara/client/testdata/css/source.css.map
265
+ - spec/lib/percy/capybara/client/testdata/iframe.html
263
266
  - spec/lib/percy/capybara/client/testdata/images/bg-relative-to-root.png
264
267
  - spec/lib/percy/capybara/client/testdata/images/bg-relative.png
265
268
  - spec/lib/percy/capybara/client/testdata/images/bg-stacked.png
@@ -272,6 +275,7 @@ test_files:
272
275
  - spec/lib/percy/capybara/client/testdata/index.html
273
276
  - spec/lib/percy/capybara/client/testdata/js/base.js
274
277
  - spec/lib/percy/capybara/client/testdata/test-css.html
278
+ - spec/lib/percy/capybara/client/testdata/test-iframe.html
275
279
  - spec/lib/percy/capybara/client/testdata/test-images.html
276
280
  - spec/lib/percy/capybara/client_spec.rb
277
281
  - spec/lib/percy/capybara/httpfetcher_spec.rb