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 +4 -4
- data/Gemfile.lock +1 -1
- data/lib/percy/capybara/loaders/base_loader.rb +30 -0
- data/lib/percy/capybara/loaders/native_loader.rb +1 -0
- data/lib/percy/capybara/loaders/sprockets_loader.rb +1 -3
- data/lib/percy/capybara/version.rb +1 -1
- data/spec/lib/percy/capybara/client/testdata/iframe.html +7 -0
- data/spec/lib/percy/capybara/client/testdata/test-iframe.html +8 -0
- data/spec/lib/percy/capybara/loaders/base_loader_spec.rb +35 -0
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 71c56a6b8fa32cad84b4ae785c5e588fb69a8cc3
|
4
|
+
data.tar.gz: 180f9ef6e37fff8a5b6651636d0c9da1da09bdd8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46f00c5cbd564c7e70c681a7a3f656e03c0951852e83ac9bea9f4084ef9df6ac85bd6eb2c39dda6b83766d60e3297bb22518cca6ee176e2111a83588389295cd
|
7
|
+
data.tar.gz: 220bf693af97479584a1baeb7b39d1affddb4b5bbdf7978dc46b112ff28b0ab148a8e80a0e4cdb1edeb78583d04435b2ab306e053b3d8f7fe47011db2468831a
|
data/Gemfile.lock
CHANGED
@@ -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
|
@@ -25,9 +25,7 @@ module Percy
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def snapshot_resources
|
28
|
-
|
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,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.
|
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-
|
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:
|
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
|