diff options
| -rw-r--r-- | config/application.rb | 2 | ||||
| -rw-r--r-- | config/environments/production.rb | 11 | ||||
| -rw-r--r-- | config/initializers/session_store.rb | 5 | ||||
| -rw-r--r-- | core/leap_web_core.gemspec | 2 | ||||
| -rw-r--r-- | test/test_helper.rb | 1 | ||||
| -rw-r--r-- | users/test/integration/browser/account_test.rb | 11 | ||||
| -rw-r--r-- | users/test/integration/browser/session_test.rb | 28 | ||||
| -rw-r--r-- | users/test/support/integration_test_helper.rb | 12 | ||||
| -rw-r--r-- | users/test/support/time_test_helper.rb | 30 | 
9 files changed, 82 insertions, 20 deletions
| diff --git a/config/application.rb b/config/application.rb index e8bb2f4..8587ffc 100644 --- a/config/application.rb +++ b/config/application.rb @@ -54,7 +54,7 @@ module LeapWeb      # Configure sensitive parameters which will be filtered from the log file.      config.filter_parameters += [:password] -    if APP_CONFIG[:logfile] +    if APP_CONFIG[:logfile].present?        config.logger = Logger.new(APP_CONFIG[:logfile])      end diff --git a/config/environments/production.rb b/config/environments/production.rb index 32b4558..73e98e5 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -33,11 +33,12 @@ LeapWeb::Application.configure do    # See everything in the log (default is :info)    # config.log_level = :debug -  # Prepend all log lines with the following tags -  # config.log_tags = [ :subdomain, :uuid ] - -  # Use a different logger for distributed setups -  # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) +  # Use syslog if no file has been specified +  if APP_CONFIG[:logfile].blank? +    # Prepend all log lines with the following tags +    config.log_tags = [ :leap, :webapp ] +    config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) +  end    # Use a different cache store in production    # config.cache_store = :mem_cache_store diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb index b454120..8b63e5b 100644 --- a/config/initializers/session_store.rb +++ b/config/initializers/session_store.rb @@ -1,8 +1,9 @@  # Be sure to restart your server when you modify this file. -LeapWeb::Application.config.session_store CouchRestSessionStore +LeapWeb::Application.config.session_store CouchRest::Session::Store, +  expire_after: 1800 -CouchRestSessionStore.configure do |conf| +CouchRest::Session::Store.configure do |conf|    conf.environment = Rails.env    conf.connection_config_file = File.join(Rails.root, 'config', 'couchdb.yml')    conf.connection[:prefix] = diff --git a/core/leap_web_core.gemspec b/core/leap_web_core.gemspec index a29db87..f391f00 100644 --- a/core/leap_web_core.gemspec +++ b/core/leap_web_core.gemspec @@ -19,7 +19,7 @@ Gem::Specification.new do |s|    s.add_dependency "couchrest", "~> 1.1.3"    s.add_dependency "couchrest_model", "~> 2.0.0.beta2" -  s.add_dependency "couchrest_session_store", "~> 0.1.3" +  s.add_dependency "couchrest_session_store", "~> 0.2.0"    s.add_dependency "json"  end diff --git a/test/test_helper.rb b/test/test_helper.rb index 26b99f4..b2f674d 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -36,6 +36,7 @@ Capybara.default_wait_time = 5  class BrowserIntegrationTest < ActionDispatch::IntegrationTest    # Make the Capybara DSL available    include Capybara::DSL +  include IntegrationTestHelper    teardown do      Capybara.reset_sessions!    # Forget the (simulated) browser state diff --git a/users/test/integration/browser/account_test.rb b/users/test/integration/browser/account_test.rb index 06f2401..8c2c997 100644 --- a/users/test/integration/browser/account_test.rb +++ b/users/test/integration/browser/account_test.rb @@ -45,17 +45,6 @@ class AccountTest < BrowserIntegrationTest      assert page.has_content?("server failed")    end -  def submit_signup -    username = "test_#{SecureRandom.urlsafe_base64}".downcase -    password = SecureRandom.base64 -    visit '/users/new' -    fill_in 'Username', with: username -    fill_in 'Password', with: password -    fill_in 'Password confirmation', with: password -    click_on 'Sign Up' -    return username, password -  end -    def inject_malicious_js      page.execute_script <<-EOJS        var calc = new srp.Calculate(); diff --git a/users/test/integration/browser/session_test.rb b/users/test/integration/browser/session_test.rb new file mode 100644 index 0000000..bb4e8c9 --- /dev/null +++ b/users/test/integration/browser/session_test.rb @@ -0,0 +1,28 @@ +require 'test_helper' + +class SessionTest < BrowserIntegrationTest + +  setup do +    Capybara.current_driver = Capybara.javascript_driver +    @username, password = submit_signup +  end + +  teardown do +    user = User.find_by_login(@username) +    id = user.identity +    id.destroy +    user.destroy +  end + +  test "valid session" do +    assert page.has_content?("Welcome #{@username}") +  end + +  test "expired session" do +    assert page.has_content?("Welcome #{@username}") +    pretend_now_is(Time.now + 40.minutes) do +      visit '/' +      assert page.has_no_content?("Welcome #{@username}") +    end +  end +end diff --git a/users/test/support/integration_test_helper.rb b/users/test/support/integration_test_helper.rb new file mode 100644 index 0000000..cfe72cf --- /dev/null +++ b/users/test/support/integration_test_helper.rb @@ -0,0 +1,12 @@ +module IntegrationTestHelper +  def submit_signup +    username = "test_#{SecureRandom.urlsafe_base64}".downcase +    password = SecureRandom.base64 +    visit '/users/new' +    fill_in 'Username', with: username +    fill_in 'Password', with: password +    fill_in 'Password confirmation', with: password +    click_on 'Sign Up' +    return username, password +  end +end diff --git a/users/test/support/time_test_helper.rb b/users/test/support/time_test_helper.rb new file mode 100644 index 0000000..f673f12 --- /dev/null +++ b/users/test/support/time_test_helper.rb @@ -0,0 +1,30 @@ +# Extend the Time class so that we can offset the time that 'now' +# returns.  This should allow us to effectively time warp for functional +# tests that require limits per hour, what not. +class Time #:nodoc: +  class <<self +    attr_accessor :testing_offset + +    def now_with_testing_offset +      now_without_testing_offset - testing_offset +    end +    alias_method_chain :now, :testing_offset +  end +end +Time.testing_offset = 0 + +module TimeTestHelper +  # Time warp to the specified time for the duration of the passed block +  def pretend_now_is(time) +    begin +      Time.testing_offset = Time.now - time +      yield +    ensure +      Time.testing_offset = 0 +    end +  end +end + +class ActiveSupport::TestCase +  include TimeTestHelper +end | 
