diff --git a/Gemfile b/Gemfile index 8f67427b..02f49bf5 100644 --- a/Gemfile +++ b/Gemfile @@ -18,6 +18,11 @@ gem 'warbler', platforms: :jruby # current CI workflows pass, we should only try to install this version of # Nokogiri for newer Ruby versions. +group :test do + gem 'selenium-webdriver', require: false + gem 'capybara', require: false +end + gemspec gem 'rake', '~> 13.0' diff --git a/Rakefile b/Rakefile index affb4977..7b8c2258 100644 --- a/Rakefile +++ b/Rakefile @@ -72,9 +72,21 @@ end task :default => :test require 'rake/testtask' + +namespace :test do + Rake::TestTask.new('capybara') do |test| + test.libs << 'lib' << 'test' << '.' + test.pattern = 'test/integration/**/test_*.rb' + test.verbose = true + test.warning = false + end +end + Rake::TestTask.new(:test) do |test| test.libs << 'lib' << 'test' << '.' - test.pattern = 'test/**/test_*.rb' + test.test_files = FileList.new('test/**/test_*.rb') do |fl| + fl.exclude('test/integration/**/test_*.rb') + end test.verbose = true test.warning = false end diff --git a/test/helper.rb b/test/helper.rb index 0d992b55..a92a9a21 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -32,6 +32,8 @@ ENV['RACK_ENV'] = 'test' require 'gollum' require 'gollum/app' +CAPYBARA_DRIVER = ENV['CI'] ? :selenium_chrome_headless : ENV.fetch('CAPYBARA_DRIVER', :selenium_chrome).to_sym + # Disable the metadata feature $METADATA = false diff --git a/test/integration/test_js_errors.rb b/test/integration/test_js_errors.rb new file mode 100644 index 00000000..56d8ea40 --- /dev/null +++ b/test/integration/test_js_errors.rb @@ -0,0 +1,49 @@ +require File.expand_path(File.join(File.dirname(__FILE__), '..', 'helper')) +require 'selenium-webdriver' +require 'capybara/dsl' + +Capybara.default_driver = ::CAPYBARA_DRIVER +Capybara.server = :webrick + +def console_log(page, level = :severe) + page.driver.browser.logs.get(:browser).select{|log| log.level == level.to_s.upcase } +end + +def expected_errors + Regexp.union([ + %r{Refused to apply style from 'http:.*/gollum/create/custom.css'} + ]) +end + +def assert_only_expected_errors(log) + assert_equal [], log.reject {|err| err.message.match?(expected_errors) } +end + +context 'Frontend with mathjax' do + include Capybara::DSL + + setup do + @path = cloned_testpath("examples/lotr.git") + @wiki = Gollum::Wiki.new(@path) + Precious::App.set(:gollum_path, @path) + Precious::App.set(:wiki_options, {mathjax: true}) + Capybara.app = Precious::App + end + + test 'no unexpected errors on /' do + visit '/' + log = console_log(page) + assert_only_expected_errors(log) + end + + test 'no unexpected errors on /create/' do + visit '/create/Foobar' + log = console_log(page) + assert_only_expected_errors(log) + end + + teardown do + Capybara.reset_sessions! + Capybara.use_default_driver + end +end \ No newline at end of file