From 452442dde8e8ea5949c387ea5c78387bff330f2a Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Mon, 4 Jul 2005 18:30:27 +0000 Subject: r2790@asus: jeremy | 2005-07-04 16:30:58 -0700 smart active record session class. session class is pluggable; a basic SqlBypass class is provided. set CGI::Session::ActiveRecordStore.session_class = SqlBypass and set SqlBypass.connection = SomeARConnection. Further tests pending. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1671 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- .../test/controller/active_record_store_test.rb | 91 ++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 actionpack/test/controller/active_record_store_test.rb (limited to 'actionpack/test') diff --git a/actionpack/test/controller/active_record_store_test.rb b/actionpack/test/controller/active_record_store_test.rb new file mode 100644 index 0000000000..6701b4dd29 --- /dev/null +++ b/actionpack/test/controller/active_record_store_test.rb @@ -0,0 +1,91 @@ +# Unfurl the safety net. +path_to_ar = File.dirname(__FILE__) + '/../../../activerecord' +if Object.const_defined?(:ActiveRecord) or File.exist?(path_to_ar) + begin + +# These tests exercise CGI::Session::ActiveRecordStore, so you're going to +# need AR in a sibling directory to AP and have SQLite3 installed. + +unless Object.const_defined?(:ActiveRecord) + require "#{File.dirname(__FILE__)}/../../../activerecord/lib/active_record" +end + +require File.dirname(__FILE__) + '/../abstract_unit' +require 'action_controller/session/active_record_store' + +CGI::Session::ActiveRecordStore::Session.establish_connection(:adapter => 'sqlite3', :dbfile => ':memory:') + +def setup_session_schema(connection, table_name = 'sessions', session_id_column_name = 'sessid', data_column_name = 'data') + connection.execute <<-end_sql + create table #{table_name} ( + id integer primary key, + #{connection.quote_column_name(session_id_column_name)} text unique, + #{connection.quote_column_name(data_column_name)} text + ) + end_sql +end + +class ActiveRecordStoreTest < Test::Unit::TestCase + def session_class + CGI::Session::ActiveRecordStore::Session + end + + def setup + session_class.create_table! + + ENV['REQUEST_METHOD'] = 'GET' + CGI::Session::ActiveRecordStore.session_class = session_class + + @new_session = CGI::Session.new(CGI.new, :database_manager => CGI::Session::ActiveRecordStore, :new_session => true) + @new_session['foo'] = 'bar' + end + + def teardown + session_class.drop_table! + end + + def test_basics + session_id = @new_session.session_id + @new_session.close + found = session_class.find_by_session_id(session_id) + assert_not_nil found + assert_equal 'bar', found.data['foo'] + end +end + + +class SqlBypassActiveRecordStoreTest < Test::Unit::TestCase + def session_class + CGI::Session::ActiveRecordStore::SqlBypass + end + + def setup + session_class.connection = CGI::Session::ActiveRecordStore::Session.connection + session_class.create_table! + + ENV['REQUEST_METHOD'] = 'GET' + CGI::Session::ActiveRecordStore.session_class = session_class + + @new_session = CGI::Session.new(CGI.new, :database_manager => CGI::Session::ActiveRecordStore, :new_session => true) + end + + def teardown + session_class.drop_table! + end + + def test_basics + session_id = @new_session.session_id + @new_session.close + found = session_class.find_by_session_id(session_id) + assert_not_nil found + assert_equal 'bar', found.data['foo'] + end +end + + +# End of safety net. + rescue Object => e + $stderr.puts "Skipping CGI::Session::ActiveRecordStore tests: #{e}" + #$stderr.puts " #{e.backtrace.join("\n ")}" + end +end -- cgit v1.2.3