diff --git a/.travis.yml b/.travis.yml index 90fd5471..e526021a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,7 @@ addons: repo_token: secure: "cZoMNjQKB/D7W4B7JDk9PXooy2WCDypu7R4C/Vi0DziZCU9HRwLbdt9aoH5hgHFa7Fe2rHFgflPAAP7h698ozvP0waFtPqLAj+PbEt27LbBDvW8JcvNkKXA0rj5wyTkzuc/0kD+kPB4oDXMak6gZlB9HCJDsa3kdXScQGTVuPdU=" postgresql: "9.6" + firefox: "latest" before_install: - export DISPLAY=:99.0 @@ -17,6 +18,12 @@ before_install: - sleep 5 - docker pull openhpi/co_execenv_python - docker pull openhpi/co_execenv_java + - mkdir ~/geckodriver + - wget -O ~/geckodriver/download.tar.gz https://github.com/mozilla/geckodriver/releases/download/v0.18.0/geckodriver-v0.18.0-linux64.tar.gz + - tar -xvzf ~/geckodriver/download.tar.gz -C ~/geckodriver/ + - rm ~/geckodriver/download.tar.gz + - chmod +x ~/geckodriver/geckodriver + - export PATH=~/geckodriver/:$PATH before_script: - cp .rspec.travis .rspec diff --git a/Gemfile b/Gemfile index 076ed2aa..82dcba6c 100644 --- a/Gemfile +++ b/Gemfile @@ -67,12 +67,13 @@ end group :test do gem 'autotest-rails' gem 'capybara' + gem 'capybara-selenium' + gem 'headless' gem 'codeclimate-test-reporter', require: false gem 'database_cleaner' gem 'nyan-cat-formatter' gem 'rake' gem 'rspec-autotest' gem 'rspec-rails' - gem 'selenium-webdriver' gem 'simplecov', require: false end diff --git a/Gemfile.lock b/Gemfile.lock index 456aeb24..221556cc 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -85,6 +85,9 @@ GEM rack (>= 1.0.0) rack-test (>= 0.5.4) xpath (>= 2.0, < 4.0) + capybara-selenium (0.0.6) + capybara + selenium-webdriver carrierwave (1.2.2) activemodel (>= 4.0.0) activesupport (>= 4.0.0) @@ -136,6 +139,7 @@ GEM forgery (0.7.0) globalid (0.4.1) activesupport (>= 4.2.0) + headless (2.3.1) highline (1.7.10) http-cookie (1.0.3) domain_name (~> 0.5) @@ -383,6 +387,7 @@ DEPENDENCIES capistrano-upload-config capistrano3-puma capybara + capybara-selenium carrierwave codeclimate-test-reporter coffee-rails @@ -395,6 +400,7 @@ DEPENDENCIES factory_bot_rails faye-websocket forgery + headless highline ims-lti (= 1.1.10) jbuilder @@ -423,7 +429,6 @@ DEPENDENCIES rubyzip sass-rails sdoc - selenium-webdriver simplecov slim sorcery diff --git a/deleteme.txt b/deleteme.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/spec/features/editor_spec.rb b/spec/features/editor_spec.rb index 88e480d4..bba856e7 100644 --- a/spec/features/editor_spec.rb +++ b/spec/features/editor_spec.rb @@ -1,7 +1,7 @@ require 'rails_helper' describe 'Editor', js: true do - let(:exercise) { FactoryBot.create(:audio_video, instructions: Forgery(:lorem_ipsum).sentence) } + let(:exercise) { FactoryBot.create(:audio_video, description: Forgery(:lorem_ipsum).sentence) } let(:user) { FactoryBot.create(:teacher) } before(:each) do @@ -9,94 +9,74 @@ describe 'Editor', js: true do fill_in('email', with: user.email) fill_in('password', with: FactoryBot.attributes_for(:teacher)[:password]) click_button(I18n.t('sessions.new.link')) + expect_any_instance_of(LtiHelper).to receive(:lti_outcome_service?).and_return(true) visit(implement_exercise_path(exercise)) end - skip "is skipped" do - # selenium tests are currently not working locally. - it 'displays the exercise title' do - expect(page).to have_content(exercise.title) + it 'displays the exercise title' do + expect(page).to have_content(exercise.title) + end + + it 'displays the exercise description' do + expect(page).to have_content(exercise.description) + end + + it 'displays all visible files in a file tree' do + within('#files') do + exercise.files.select(&:visible).each do |file| + expect(page).to have_content(file.name_with_extension) + end end end - describe 'Instructions Tab' do - skip "is skipped" do + it "displays the main file's code" do + expect(page).to have_css(".frame[data-filename='#{exercise.files.detect(&:main_file?).name_with_extension}']") + end - before(:each) { click_link(I18n.t('activerecord.attributes.exercise.instructions')) } - - it 'displays the exercise instructions' do - expect(page).to have_content(exercise.instructions) + context 'when selecting a file' do + before(:each) do + within('#files') { click_link(file.name_with_extension) } end + + context 'when selecting a binary file' do + context 'when selecting an audio file' do + let(:file) { exercise.files.detect { |file| file.file_type.audio? } } + + it 'contains an