percy-capybara 2.2.1 → 2.3.0.pre.beta

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: 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