Froze rails gems
[depot.git] / vendor / rails / activerecord / test / cases / schema_authorization_test_postgresql.rb
1 require "cases/helper"
2
3 class SchemaThing < ActiveRecord::Base
4 end
5
6 class SchemaAuthorizationTest < ActiveRecord::TestCase
7 self.use_transactional_fixtures = false
8
9 TABLE_NAME = 'schema_things'
10 COLUMNS = [
11 'id serial primary key',
12 'name character varying(50)'
13 ]
14 USERS = ['rails_pg_schema_user1', 'rails_pg_schema_user2']
15
16 def setup
17 @connection = ActiveRecord::Base.connection
18 @connection.execute "SET search_path TO '$user',public"
19 set_session_auth
20 USERS.each do |u|
21 @connection.execute "CREATE USER #{u}" rescue nil
22 @connection.execute "CREATE SCHEMA AUTHORIZATION #{u}" rescue nil
23 set_session_auth u
24 @connection.execute "CREATE TABLE #{TABLE_NAME} (#{COLUMNS.join(',')})"
25 @connection.execute "INSERT INTO #{TABLE_NAME} (name) VALUES ('#{u}')"
26 set_session_auth
27 end
28 end
29
30 def teardown
31 set_session_auth
32 @connection.execute "RESET search_path"
33 USERS.each do |u|
34 @connection.execute "DROP SCHEMA #{u} CASCADE"
35 @connection.execute "DROP USER #{u}"
36 end
37 end
38
39 def test_schema_invisible
40 assert_raise(ActiveRecord::StatementInvalid) do
41 set_session_auth
42 @connection.execute "SELECT * FROM #{TABLE_NAME}"
43 end
44 end
45
46 def test_schema_uniqueness
47 assert_nothing_raised do
48 set_session_auth
49 USERS.each do |u|
50 set_session_auth u
51 assert_equal u, @connection.select_value("SELECT name FROM #{TABLE_NAME} WHERE id = 1")
52 set_session_auth
53 end
54 end
55 end
56
57 def test_sequence_schema_caching
58 assert_nothing_raised do
59 USERS.each do |u|
60 set_session_auth u
61 st = SchemaThing.new :name => 'TEST1'
62 st.save!
63 st = SchemaThing.new :id => 5, :name => 'TEST2'
64 st.save!
65 set_session_auth
66 end
67 end
68 end
69
70 private
71 def set_session_auth auth = nil
72 @connection.execute "SET SESSION AUTHORIZATION #{auth || 'default'}"
73 end
74
75 end