spec/lib/percy/capybara/loaders/native_loader_spec.rb in percy-capybara-2.4.1 vs spec/lib/percy/capybara/loaders/native_loader_spec.rb in percy-capybara-2.4.2
- old
+ new
@@ -1,8 +1,9 @@
RSpec.describe Percy::Capybara::Loaders::NativeLoader do
let(:fake_page) { OpenStruct.new(current_url: 'http://localhost/foo') }
- let(:loader) { described_class.new(page: fake_page) }
+ let(:asset_hostnames) { nil }
+ let(:loader) { described_class.new(page: fake_page, asset_hostnames: asset_hostnames) }
describe '#build_resources' do
it 'returns an empty list' do
expect(loader.build_resources).to eq([])
end
@@ -15,36 +16,40 @@
end
it 'returns the root HTML and CSS resources' do
visit '/test-css.html'
loader = described_class.new(page: page)
resource_urls = loader.snapshot_resources.collect(&:resource_url)
- expect(resource_urls).to match_array([
- '/test-css.html',
- '/css/base.css',
- '/css/imports.css',
- '/css/level0-imports.css',
- '/css/level1-imports.css',
- '/css/level2-imports.css',
- '/css/simple-imports.css',
- ])
+ expect(resource_urls).to match_array(
+ [
+ '/test-css.html',
+ '/css/base.css',
+ '/css/imports.css',
+ '/css/level0-imports.css',
+ '/css/level1-imports.css',
+ '/css/level2-imports.css',
+ '/css/simple-imports.css',
+ ],
+ )
end
it 'returns the root HTML and image resources' do
visit '/test-images.html'
loader = described_class.new(page: page)
resource_urls = loader.snapshot_resources.collect(&:resource_url)
- expect(resource_urls).to match_array([
- '/test-images.html',
- '/images/img-relative.png',
- '/images/img-relative-to-root.png',
- '/images/percy.svg',
- '/images/srcset-base.png',
- '/images/srcset-first.png',
- '/images/srcset-second.png',
- '/images/bg-relative.png',
- '/images/bg-relative-to-root.png',
- '/images/bg-stacked.png',
- ])
+ expect(resource_urls).to match_array(
+ [
+ '/test-images.html',
+ '/images/img-relative.png',
+ '/images/img-relative-to-root.png',
+ '/images/percy.svg',
+ '/images/srcset-base.png',
+ '/images/srcset-first.png',
+ '/images/srcset-second.png',
+ '/images/bg-relative.png',
+ '/images/bg-relative-to-root.png',
+ '/images/bg-stacked.png',
+ ],
+ )
end
end
describe 'nonlocal.me', type: :feature, js: true do
let(:orig_app_host) { Capybara.app_host }
before do
@@ -55,14 +60,16 @@
end
it 'returns the root HTML and image resources' do
visit '/test-localtest-me-images.html'
loader = described_class.new(page: page)
resource_urls = loader.snapshot_resources.collect(&:resource_url)
- expect(resource_urls).to eq([
- '/test-localtest-me-images.html',
- '/images/img-relative.png',
- ])
+ expect(resource_urls).to eq(
+ [
+ '/test-localtest-me-images.html',
+ '/images/img-relative.png',
+ ],
+ )
expect(loader.snapshot_resources.collect(&:is_root)).to eq([true, nil])
end
end
describe '#_should_include_url?' do
it 'returns true for valid, local URLs' do
@@ -89,15 +96,33 @@
expect(loader._should_include_url?('bad-url/foo/test.html')).to eq(false)
end
it 'returns false for data URLs' do
expect(loader._should_include_url?('data:image/gif;base64,R0')).to eq(false)
end
- it 'returns false for remote URLs' do
- expect(loader._should_include_url?('http://foo/')).to eq(false)
- expect(loader._should_include_url?('http://example.com/')).to eq(false)
- expect(loader._should_include_url?('http://example.com/foo')).to eq(false)
- expect(loader._should_include_url?('https://example.com/foo')).to eq(false)
+
+ context 'when loader is initialised with asset hostnames' do
+ let(:asset_hostnames) { ['dev.local'] }
+ context 'with the same port' do
+ it 'returns in accordance with asset_hostnames' do
+ expect(loader._should_include_url?('http://dev.local/')).to eq(true)
+ expect(loader._should_include_url?('http://dev.local/foo')).to eq(true)
+
+ expect(loader._should_include_url?('http://other.local/')).to eq(false)
+ end
+ end
+ context 'with different port' do
+ it 'returns in accordance with asset_hostnames' do
+ expect(loader._should_include_url?('http://dev.local:4321/foo')).to eq(true)
+ expect(loader._should_include_url?('http://other.local:1234/foo')).to eq(false)
+ end
+ end
+ context 'https' do
+ it 'returns in accordance with asset_hostnames' do
+ expect(loader._should_include_url?('https://dev.local/foo')).to eq(true)
+ expect(loader._should_include_url?('https://other.local/foo')).to eq(false)
+ end
+ end
end
context 'for nonlocal hosts' do
let(:fake_page) { OpenStruct.new(current_url: 'http://foo:123/') }
it 'returns true for the same host port' do
expect(loader._should_include_url?('http://foo:123/')).to eq(true)
@@ -236,20 +261,22 @@
expected_sha = Digest::SHA256.hexdigest(content)
expect(Digest::SHA256.hexdigest(resource.content)).to eq(expected_sha)
expect(resource.sha).to eq(expected_sha)
resource_urls = resources.collect(&:resource_url)
- expect(resource_urls).to match_array([
- '/images/img-relative.png',
- '/images/img-relative-to-root.png',
- '/images/percy.svg',
- '/images/srcset-base.png',
- '/images/srcset-first.png',
- '/images/srcset-second.png',
- '/images/bg-relative.png',
- '/images/bg-relative-to-root.png',
- '/images/bg-stacked.png',
- ])
+ expect(resource_urls).to match_array(
+ [
+ '/images/img-relative.png',
+ '/images/img-relative-to-root.png',
+ '/images/percy.svg',
+ '/images/srcset-base.png',
+ '/images/srcset-first.png',
+ '/images/srcset-second.png',
+ '/images/bg-relative.png',
+ '/images/bg-relative-to-root.png',
+ '/images/bg-stacked.png',
+ ],
+ )
expect(resources.collect(&:is_root).uniq).to match_array([nil])
end
end
end