teamcapybara--capybara/lib/capybara/spec/session/save_page_spec.rb

111 lines
3.4 KiB
Ruby

# frozen_string_literal: true
Capybara::SpecHelper.spec '#save_page' do
let(:alternative_path) { File.join(Dir.pwd, 'save_and_open_page_tmp') }
before do
@old_save_path = Capybara.save_path
Capybara.save_path = nil
@session.visit('/foo')
end
after do
Capybara.save_path = @old_save_path
Dir.glob('capybara-*.html').each do |file|
FileUtils.rm(file)
end
FileUtils.rm_rf alternative_path
end
it 'saves the page in the root directory' do
@session.save_page
path = Dir.glob('capybara-*.html').first
expect(File.read(path)).to include('Another World')
end
it 'generates a sensible filename' do
@session.save_page
filename = Dir.glob('capybara-*.html').first
expect(filename).to match(/^capybara-\d+\.html$/)
end
it 'can store files in a specified directory' do
Capybara.save_path = alternative_path
@session.save_page
path = Dir.glob("#{alternative_path}/capybara-*.html").first
expect(File.read(path)).to include('Another World')
end
it 'uses the given filename' do
@session.save_page('capybara-001122.html')
expect(File.read('capybara-001122.html')).to include('Another World')
end
it 'can store files in a specified directory with a given filename' do
Capybara.save_path = alternative_path
@session.save_page('capybara-001133.html')
path = "#{alternative_path}/capybara-001133.html"
expect(File.read(path)).to include('Another World')
end
it 'can store files in a specified directory with a given relative filename' do
Capybara.save_path = alternative_path
@session.save_page('tmp/capybara-001144.html')
path = "#{alternative_path}/tmp/capybara-001144.html"
expect(File.read(path)).to include('Another World')
end
it 'returns an absolute path in pwd' do
result = @session.save_page
path = File.expand_path(Dir.glob('capybara-*.html').first, Dir.pwd)
expect(result).to eq(path)
end
it 'returns an absolute path in given directory' do
Capybara.save_path = alternative_path
result = @session.save_page
path = File.expand_path(Dir.glob("#{alternative_path}/capybara-*.html").first, alternative_path)
expect(result).to eq(path)
end
context 'asset_host contains a string' do
before { Capybara.asset_host = 'http://example.com' }
after { Capybara.asset_host = nil }
it 'prepends base tag with value from asset_host to the head' do
@session.visit('/with_js')
path = @session.save_page
result = File.read(path)
expect(result).to include("<head><base href='http://example.com' />")
end
it "doesn't prepend base tag to pages when asset_host is nil" do
Capybara.asset_host = nil
@session.visit('/with_js')
path = @session.save_page
result = File.read(path)
expect(result).to include('<html')
expect(result).not_to include('http://example.com')
end
it "doesn't prepend base tag to pages which already have it" do
@session.visit('/with_base_tag')
path = @session.save_page
result = File.read(path)
expect(result).to include('<html')
expect(result).not_to include('http://example.com')
end
it 'executes successfully even if the page is missing a <head>' do
@session.visit('/with_simple_html')
path = @session.save_page
result = File.read(path)
expect(result).to include('Bar')
end
end
end