class SchemaAuthorizationTest

Constants

COLUMNS
TABLE_NAME
USERS

Public Instance Methods

setup() click to toggle source
# File activerecord/test/cases/adapters/postgresql/schema_authorization_test.rb, line 18
def setup
  @connection = ActiveRecord::Base.connection
  @connection.execute "SET search_path TO '$user',public"
  set_session_auth
  USERS.each do |u|
    @connection.execute "CREATE USER #{u}" rescue nil
    @connection.execute "CREATE SCHEMA AUTHORIZATION #{u}" rescue nil
    set_session_auth u
    @connection.execute "CREATE TABLE #{TABLE_NAME} (#{COLUMNS.join(',')})"
    @connection.execute "INSERT INTO #{TABLE_NAME} (name) VALUES ('#{u}')"
    set_session_auth
  end
end
test_auth_with_bind() click to toggle source
# File activerecord/test/cases/adapters/postgresql/schema_authorization_test.rb, line 67
def test_auth_with_bind
  assert_nothing_raised do
    set_session_auth
    USERS.each do |u|
      @connection.clear_cache!
      set_session_auth u
      assert_equal u, @connection.select_value("SELECT name FROM #{TABLE_NAME} WHERE id = $1", "SQL", [bind_param(1)])
      set_session_auth
    end
  end
end
test_schema_invisible() click to toggle source
# File activerecord/test/cases/adapters/postgresql/schema_authorization_test.rb, line 41
def test_schema_invisible
  assert_raise(ActiveRecord::StatementInvalid) do
    set_session_auth
    @connection.execute "SELECT * FROM #{TABLE_NAME}"
  end
end
test_sequence_schema_caching() click to toggle source
# File activerecord/test/cases/adapters/postgresql/schema_authorization_test.rb, line 80
def test_sequence_schema_caching
  assert_nothing_raised do
    USERS.each do |u|
      set_session_auth u
      st = SchemaThing.new name: "TEST1"
      st.save!
      st = SchemaThing.new id: 5, name: "TEST2"
      st.save!
      set_session_auth
    end
  end
end
test_session_auth=() click to toggle source
# File activerecord/test/cases/adapters/postgresql/schema_authorization_test.rb, line 48
def test_session_auth=
  assert_raise(ActiveRecord::StatementInvalid) do
    @connection.session_auth = "DEFAULT"
    @connection.execute "SELECT * FROM #{TABLE_NAME}"
  end
end
test_setting_auth_clears_stmt_cache() click to toggle source
# File activerecord/test/cases/adapters/postgresql/schema_authorization_test.rb, line 55
def test_setting_auth_clears_stmt_cache
  assert_nothing_raised do
    set_session_auth
    USERS.each do |u|
      set_session_auth u
      assert_equal u, @connection.select_value("SELECT name FROM #{TABLE_NAME} WHERE id = 1")
      set_session_auth
    end
  end
end
test_tables_in_current_schemas() click to toggle source
# File activerecord/test/cases/adapters/postgresql/schema_authorization_test.rb, line 93
def test_tables_in_current_schemas
  assert_not_includes @connection.tables, TABLE_NAME
  USERS.each do |u|
    set_session_auth u
    assert_includes @connection.tables, TABLE_NAME
    set_session_auth
  end
end

Private Instance Methods

bind_param(value) click to toggle source
# File activerecord/test/cases/adapters/postgresql/schema_authorization_test.rb, line 107
def bind_param(value)
  ActiveRecord::Relation::QueryAttribute.new(nil, value, ActiveRecord::Type::Value.new)
end
set_session_auth(auth = nil) click to toggle source
# File activerecord/test/cases/adapters/postgresql/schema_authorization_test.rb, line 103
def set_session_auth(auth = nil)
  @connection.session_auth = auth || "default"
end