From f7aa44ae2e02a4ce5051150cee81eece4aa1357d Mon Sep 17 00:00:00 2001 From: Benjamin ter Kuile Date: Wed, 22 Jul 2015 17:21:41 +0200 Subject: [PATCH] Sync with latest simply_stored --- Gemfile | 2 +- Gemfile.lock | 36 +++++----- app/helpers/cmtool/application_helper.rb | 2 +- .../{pages_spec.rb => pages/listing_spec.rb} | 0 spec/features/cmtool/pages/preview_spec.rb | 21 ++++++ spec/spec_helper.rb | 5 +- spec/support/feature_helpers.rb | 4 +- spec/support/js_helpers.rb | 66 +++++++++++++++++++ 8 files changed, 115 insertions(+), 21 deletions(-) rename spec/features/cmtool/{pages_spec.rb => pages/listing_spec.rb} (100%) create mode 100644 spec/features/cmtool/pages/preview_spec.rb create mode 100644 spec/support/js_helpers.rb diff --git a/Gemfile b/Gemfile index a733952..c71fd3b 100644 --- a/Gemfile +++ b/Gemfile @@ -20,7 +20,6 @@ group :assets do gem 'pickadate-rails' end -gem 'couch_potato' , github: 'bterkuile/couch_potato' gem 'simply_stored' , github: 'bterkuile/simply_stored' gem 'orm_adapter', github: 'bterkuile/orm_adapter' gem 'devise' @@ -42,6 +41,7 @@ end group :test do gem 'factory_girl_rails' gem 'capybara' + gem 'poltergeist' gem 'rspec-its' gem 'launchy' end diff --git a/Gemfile.lock b/Gemfile.lock index 7c9b5bc..d7c9382 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,12 +1,3 @@ -GIT - remote: git://github.com/bterkuile/couch_potato.git - revision: 8929326ee855e964a441a8ede941b52c0ee88a16 - specs: - couch_potato (0.7.1) - activemodel - couchrest (>= 1.0.1) - json (~> 1.6) - GIT remote: git://github.com/bterkuile/devise_simply_stored.git revision: 86f93782c607958e7f99a6fdbae5566e17047273 @@ -22,7 +13,7 @@ GIT GIT remote: git://github.com/bterkuile/simply_stored.git - revision: 8e8288b20ab64d62f1da7516731cd936f81b1f19 + revision: 05cb3a06a9d4a3588efd4491db42fac84276befb specs: simply_stored (1.0.0) activesupport @@ -100,6 +91,7 @@ GEM xpath (~> 2.0) climate_control (0.0.3) activesupport (>= 3.0) + cliver (0.3.2) cocaine (0.5.7) climate_control (>= 0.0.3, < 1.0) coderay (1.1.0) @@ -107,6 +99,10 @@ GEM coffee-script-source execjs coffee-script-source (1.9.1.1) + couch_potato (1.4.0) + activemodel + couchrest (~> 1.2.0) + json (~> 1.6) couchrest (1.2.1) mime-types (>= 1.15) multi_json (~> 1.7, ~> 1.0) @@ -168,6 +164,11 @@ GEM mime-types pickadate-rails (3.5.6.0) railties (>= 3.1.0) + poltergeist (1.6.0) + capybara (~> 2.1) + cliver (~> 0.3.1) + multi_json (~> 1.0) + websocket-driver (>= 0.2.0) pry (0.10.1) coderay (~> 1.1.0) method_source (~> 0.8.1) @@ -208,18 +209,18 @@ GEM http-cookie (>= 1.0.2, < 2.0) mime-types (>= 1.16, < 3.0) netrc (~> 0.7) - rspec-core (3.3.1) + rspec-core (3.3.2) rspec-support (~> 3.3.0) - rspec-expectations (3.3.0) + rspec-expectations (3.3.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.3.0) rspec-its (1.2.0) rspec-core (>= 3.0.0) rspec-expectations (>= 3.0.0) - rspec-mocks (3.3.1) + rspec-mocks (3.3.2) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.3.0) - rspec-rails (3.3.2) + rspec-rails (3.3.3) actionpack (>= 3.0, < 4.3) activesupport (>= 3.0, < 4.3) railties (>= 3.0, < 4.3) @@ -259,7 +260,7 @@ GEM thor (0.19.1) thread_safe (0.3.5) tilt (1.4.1) - tinymce-rails (4.1.6) + tinymce-rails (4.2.1) railties (>= 3.1.1) tzinfo (1.2.2) thread_safe (~> 0.1) @@ -268,6 +269,9 @@ GEM unf_ext (0.0.7.1) warden (1.2.3) rack (>= 1.0) + websocket-driver (0.6.2) + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.2) xpath (2.0.0) nokogiri (~> 1.3) @@ -281,7 +285,6 @@ DEPENDENCIES capybara cmtool! coffee-script - couch_potato! devise devise_simply_stored! email_validator @@ -293,6 +296,7 @@ DEPENDENCIES orm_adapter! paperclip (>= 3.4, != 4.3.0) pickadate-rails + poltergeist pry-rails rails (~> 4.2.3) rspec-its diff --git a/app/helpers/cmtool/application_helper.rb b/app/helpers/cmtool/application_helper.rb index 747f3d8..b4d9725 100644 --- a/app/helpers/cmtool/application_helper.rb +++ b/app/helpers/cmtool/application_helper.rb @@ -127,7 +127,7 @@ module Cmtool # Add extra helper method since cmtool layouts may be used outside the cmtool scope def cmtool_user - controller.send :cmtool_user + controller.respond_to?(:cmtool_user) ? controller.send(:cmtool_user) :nil end def edit_td(obj) diff --git a/spec/features/cmtool/pages_spec.rb b/spec/features/cmtool/pages/listing_spec.rb similarity index 100% rename from spec/features/cmtool/pages_spec.rb rename to spec/features/cmtool/pages/listing_spec.rb diff --git a/spec/features/cmtool/pages/preview_spec.rb b/spec/features/cmtool/pages/preview_spec.rb new file mode 100644 index 0000000..9094588 --- /dev/null +++ b/spec/features/cmtool/pages/preview_spec.rb @@ -0,0 +1,21 @@ +require 'spec_helper' + +feature 'Page preview' do + context 'with logged in user' do + background do + create_user 'test@example.com' + login_as 'test@example.com' + end + + context 'with pages' do + background do + @page = create :page, name: 'nl1', locale: 'nl' + end + + scenario 'see both languages', js: true do + visit "/cmtool/pages/#{@page.id}" + + end + end + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index b019866..257fc66 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -5,6 +5,7 @@ require File.expand_path("../dummy/config/environment.rb", __FILE__) require 'rspec/rails' require 'factory_girl' require 'capybara/rspec' +require 'capybara/poltergeist' ENGINE_RAILS_ROOT=File.join(File.dirname(__FILE__), '../') # Requires supporting ruby files with custom matchers and macros, etc, @@ -14,7 +15,8 @@ Dir[File.join(ENGINE_RAILS_ROOT, "spec/factories/**/*.rb")].each {|f| require f I18n.locale = :en Devise.stretches = 1 -#Capybara.default_driver = :selenium +Capybara.javascript_driver = :poltergeist + RSpec.configure do |config| config.mock_with :rspec config.include FactoryGirl::Syntax::Methods @@ -23,6 +25,7 @@ RSpec.configure do |config| config.include Cmtool::Engine.routes.url_helpers config.include Devise::TestHelpers, type: :controller config.include FeatureHelpers, type: :feature + config.include JsHelpers, type: :feature #config.use_transactional_fixtures = true config.infer_base_class_for_anonymous_controllers = true config.render_views = true diff --git a/spec/support/feature_helpers.rb b/spec/support/feature_helpers.rb index 1e38b9b..4bd263a 100644 --- a/spec/support/feature_helpers.rb +++ b/spec/support/feature_helpers.rb @@ -6,8 +6,8 @@ module FeatureHelpers def login_as(email) visit "/users/sign_in" - fill_in "user_email", with: email - fill_in "user_password", with: "secret" + find("#user_email").set email + find("#user_password").set "secret" submit_form end diff --git a/spec/support/js_helpers.rb b/spec/support/js_helpers.rb new file mode 100644 index 0000000..f72c5d4 --- /dev/null +++ b/spec/support/js_helpers.rb @@ -0,0 +1,66 @@ +module JsHelpers + def js_set_date(selector, value = '') + js_set_field selector, value + end + + def js_set_field(selector, value = '') + find selector + page.execute_script("$('#{selector}').val('#{value}')") + end + + def toggle_optional_input_for(attr) + js_click ".optional-input-activator-container.#{attr} .optional-input-activator-toggle" + end + + def toggle_optional_text_field_for(attr) + js_click ".optional-text-field-activator-container.#{attr} .optional-input-activator-toggle" + end + + def set_optional_value(attr, value='') + selector = ".optional-attribute-container.#{attr} input" + find selector + js_set_field selector, value + end + + # Activate the boolean checkbox + def toggle_optional_boolean_activator_for(attr) + js_click ".optional-attribute-container.optional-boolean.#{attr} .optional-boolean-activator-toggle" + end + + # Check the boolean checkbox + def toggle_optional_boolean_for(attr) + selector = ".optional-attribute-container.optional-boolean.#{attr} .optional-boolean-toggle" + js_click selector + end + + # Trigger a click event through javascript. Use this to avoid waiting for + # javascript events issues + def js_click(selector) + find(selector) # wait for the page to contain the selector + page.execute_script("$('#{selector}').click()") + + # wait for triggered ajax requests to be finished + steps = 0 + while page.evaluate_script('$.active').to_i > 0 and steps < 25 + sleep 0.1 + steps += 1 + end + end + + def expect_path_bo_be(path) + steps = 0 + while page.current_path != path and steps < 15 + sleep 0.1 + steps += 1 + end + expect( page.current_path ).to eq path + end + + # Wait for the database to have finished the update stuff, then reload + # the models. Threading might give inconsistent data + def reload_model(*models) + models.each &:reload + end + alias_method :reload_models, :reload_model +end +