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