summaryrefslogtreecommitdiff
path: root/vendor/gems/couchrest_session_store/test/database_method_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gems/couchrest_session_store/test/database_method_test.rb')
-rw-r--r--vendor/gems/couchrest_session_store/test/database_method_test.rb116
1 files changed, 116 insertions, 0 deletions
diff --git a/vendor/gems/couchrest_session_store/test/database_method_test.rb b/vendor/gems/couchrest_session_store/test/database_method_test.rb
new file mode 100644
index 0000000..18985c3
--- /dev/null
+++ b/vendor/gems/couchrest_session_store/test/database_method_test.rb
@@ -0,0 +1,116 @@
+require_relative 'test_helper'
+
+class DatabaseMethodTest < MiniTest::Test
+
+ class TestModel < CouchRest::Model::Base
+ include CouchRest::Model::DatabaseMethod
+
+ use_database_method :db_name
+ property :dbname, String
+ property :confirm, String
+
+ def db_name
+ "test_db_#{self[:dbname]}"
+ end
+ end
+
+ def test_instance_method
+ doc1 = TestModel.new({:dbname => 'one'})
+ doc1.database.create!
+ assert doc1.database.root.ends_with?('test_db_one')
+ assert doc1.save
+ doc1.update_attributes(:confirm => 'yep')
+
+ doc2 = TestModel.new({:dbname => 'two'})
+ doc2.database.create!
+ assert doc2.database.root.ends_with?('test_db_two')
+ assert doc2.save
+ doc2.confirm = 'sure'
+ doc2.save!
+
+ doc1_copy = CouchRest.get([doc1.database.root, doc1.id].join('/'))
+ assert_equal "yep", doc1_copy["confirm"]
+
+ doc2_copy = CouchRest.get([doc2.database.root, doc2.id].join('/'))
+ assert_equal "sure", doc2_copy["confirm"]
+
+ doc1.database.delete!
+ doc2.database.delete!
+ end
+
+ def test_switch_db
+ doc_red = TestModel.new({:dbname => 'red', :confirm => 'rose'})
+ doc_red.database.create!
+ root = doc_red.database.root
+
+ doc_blue = doc_red.clone
+ doc_blue.dbname = 'blue'
+ doc_blue.database!
+ doc_blue.save!
+
+ doc_blue_copy = CouchRest.get([root.sub('red','blue'), doc_blue.id].join('/'))
+ assert_equal "rose", doc_blue_copy["confirm"]
+
+ doc_red.database.delete!
+ doc_blue.database.delete!
+ end
+
+ #
+ # A test scenario for database_method in which some user accounts
+ # are stored in a seperate temporary database (so that the test
+ # accounts don't bloat the normal database).
+ #
+
+ class User < CouchRest::Model::Base
+ include CouchRest::Model::DatabaseMethod
+
+ use_database_method :db_name
+ property :login, String
+ before_save :create_db
+
+ class << self
+ def get(id, db = database)
+ result = super(id, db)
+ if result.nil?
+ return super(id, choose_database('test-user'))
+ else
+ return result
+ end
+ end
+ alias :find :get
+ end
+
+ protected
+
+ def self.db_name(login = nil)
+ if !login.nil? && login =~ /test-user/
+ 'tmp_users'
+ else
+ 'users'
+ end
+ end
+
+ def db_name
+ self.class.db_name(self.login)
+ end
+
+ def create_db
+ unless database_exists?(db_name)
+ self.database!
+ end
+ end
+
+ end
+
+ def test_tmp_user_db
+ user1 = User.new({:login => 'test-user-1'})
+ assert user1.save
+ assert User.find(user1.id), 'should find user in tmp_users'
+ assert_equal user1.login, User.find(user1.id).login
+ assert_equal 'test-user-1', User.server.database('couchrest_tmp_users').get(user1.id)['login']
+ assert_raises CouchRest::NotFound do
+ User.server.database('couchrest_users').get(user1.id)
+ end
+ end
+
+end