From 302f3a489693982aa456c2e2fd7eb4e2a37b83ea Mon Sep 17 00:00:00 2001 From: Sebastian Serth Date: Mon, 26 Feb 2018 09:21:30 +0100 Subject: [PATCH 1/5] Add Selenium support file for specs and include headless for Vagrant Signed-off-by: Sebastian Serth --- Gemfile | 3 ++- Gemfile.lock | 7 ++++++- spec/support/selenium.rb | 21 +++++++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 spec/support/selenium.rb diff --git a/Gemfile b/Gemfile index 8482ca69..a1b2494e 100644 --- a/Gemfile +++ b/Gemfile @@ -66,12 +66,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 43737a82..04ff4e15 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -91,6 +91,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) @@ -144,6 +147,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) @@ -404,6 +408,7 @@ DEPENDENCIES capistrano-upload-config capistrano3-puma capybara + capybara-selenium carrierwave codeclimate-test-reporter coffee-rails @@ -416,6 +421,7 @@ DEPENDENCIES factory_bot_rails faye-websocket forgery + headless highline ims-lti (= 1.1.10) jbuilder @@ -444,7 +450,6 @@ DEPENDENCIES rubyzip sass-rails sdoc - selenium-webdriver simplecov slim sorcery diff --git a/spec/support/selenium.rb b/spec/support/selenium.rb new file mode 100644 index 00000000..4aeb28de --- /dev/null +++ b/spec/support/selenium.rb @@ -0,0 +1,21 @@ +require 'capybara/rspec' +require 'selenium/webdriver' + +if ENV['HEADLESS_TEST'] == 'true' || ENV['USER'] == 'vagrant' + require 'headless' + + headless = Headless.new + headless.start +end + +Capybara.register_driver :selenium do |app| + profile = Selenium::WebDriver::Firefox::Profile.new + profile['intl.accept_languages'] = 'en' + capabilities = Selenium::WebDriver::Remote::Capabilities.firefox(elementScrollBehavior: 1) + options = Selenium::WebDriver::Firefox::Options.new + options.profile = profile + driver = Capybara::Selenium::Driver.new(app, browser: :firefox, desired_capabilities: capabilities, options: options) + driver.browser.manage.window.resize_to(1280, 960) + driver +end +Capybara.javascript_driver = :selenium From fdd5fa59f54a50400f6f48e9751acd3f03a64c95 Mon Sep 17 00:00:00 2001 From: Sebastian Serth Date: Mon, 26 Feb 2018 09:22:03 +0100 Subject: [PATCH 2/5] Move jstree assets to work in all modes: dev, prod, test, staging Signed-off-by: Sebastian Serth --- .../images/{jstree/themes/default => }/32px.png | Bin .../images/{jstree/themes/default => }/40px.png | Bin .../images/{jstree/themes/default => }/throbber.gif | Bin .../{jstree/themes/default => }/style.min.css | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename vendor/assets/images/{jstree/themes/default => }/32px.png (100%) rename vendor/assets/images/{jstree/themes/default => }/40px.png (100%) rename vendor/assets/images/{jstree/themes/default => }/throbber.gif (100%) rename vendor/assets/stylesheets/{jstree/themes/default => }/style.min.css (100%) diff --git a/vendor/assets/images/jstree/themes/default/32px.png b/vendor/assets/images/32px.png similarity index 100% rename from vendor/assets/images/jstree/themes/default/32px.png rename to vendor/assets/images/32px.png diff --git a/vendor/assets/images/jstree/themes/default/40px.png b/vendor/assets/images/40px.png similarity index 100% rename from vendor/assets/images/jstree/themes/default/40px.png rename to vendor/assets/images/40px.png diff --git a/vendor/assets/images/jstree/themes/default/throbber.gif b/vendor/assets/images/throbber.gif similarity index 100% rename from vendor/assets/images/jstree/themes/default/throbber.gif rename to vendor/assets/images/throbber.gif diff --git a/vendor/assets/stylesheets/jstree/themes/default/style.min.css b/vendor/assets/stylesheets/style.min.css similarity index 100% rename from vendor/assets/stylesheets/jstree/themes/default/style.min.css rename to vendor/assets/stylesheets/style.min.css From d503b3c0f696d5d96b0203f9de5a1a6943ef9c7e Mon Sep 17 00:00:00 2001 From: Sebastian Serth Date: Mon, 26 Feb 2018 09:22:28 +0100 Subject: [PATCH 3/5] Fix editor_spec and adopt to current design of implementation page Signed-off-by: Sebastian Serth --- spec/features/editor_spec.rb | 138 +++++++++++++++-------------------- 1 file changed, 59 insertions(+), 79 deletions(-) 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