~michaelforrest/use-case-mapper/trunk

« back to all changes in this revision

Viewing changes to vendor/rails/activerecord/test/cases/schema_authorization_test_postgresql.rb

  • Committer: Michael Forrest
  • Date: 2010-10-15 16:28:50 UTC
  • Revision ID: michael.forrest@canonical.com-20101015162850-tj2vchanv0kr0dun
refrozeĀ gems

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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