lib/capybara/spec/session/save_page_spec.rb
# 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