summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjessib <jessib@riseup.net>2013-09-19 10:41:58 -0700
committerjessib <jessib@riseup.net>2013-09-19 10:41:58 -0700
commit16b8966a0df0104390ce95e35f1bb17f173f8d4d (patch)
tree58d277ef2dc9d3b8731501b91773cee04272bd26
parent9e451421420abf520622e779443fb113ea3c4ce7 (diff)
parent165e417bc6ba66d51d74764db7b59279fb6a923f (diff)
Merge pull request #82 from azul/feature/sessions-expire
Feature/sessions expire
-rw-r--r--config/initializers/session_store.rb5
-rw-r--r--core/leap_web_core.gemspec2
-rw-r--r--test/test_helper.rb1
-rw-r--r--users/test/integration/browser/account_test.rb11
-rw-r--r--users/test/integration/browser/session_test.rb28
-rw-r--r--users/test/support/integration_test_helper.rb12
-rw-r--r--users/test/support/time_test_helper.rb30
7 files changed, 75 insertions, 14 deletions
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