rsanheim-unit_record 0.9.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +34 -0
- data/LICENSE +20 -0
- data/README.markdown +137 -0
- data/Rakefile +94 -0
- data/lib/active_record/connection_adapters/unit_record_adapter.rb +97 -0
- data/lib/unit_record.rb +32 -0
- data/lib/unit_record/association_stubbing.rb +39 -0
- data/lib/unit_record/column_extension.rb +18 -0
- data/lib/unit_record/disconnected_active_record.rb +21 -0
- data/lib/unit_record/disconnected_fixtures.rb +10 -0
- data/lib/unit_record/disconnected_test_case.rb +13 -0
- data/test/active_record/connection_adapters/unit_record_adapter_test.rb +103 -0
- data/test/db/schema.rb +26 -0
- data/test/sample_spec.rb +44 -0
- data/test/test_helper.rb +73 -0
- data/test/unit_record/association_stubbing_test.rb +37 -0
- data/test/unit_record/column_cacher_test.rb +26 -0
- data/test/unit_record/column_extension_test.rb +33 -0
- data/test/unit_record/column_test.rb +40 -0
- data/test/unit_record/controller_test.rb +43 -0
- data/test/unit_record/disconnected_active_record_test.rb +52 -0
- data/test/unit_record/disconnected_fixtures_test.rb +7 -0
- data/test/unit_record/disconnected_test_case_test.rb +19 -0
- data/test/unit_record/unit_record_test.rb +14 -0
- data/vendor/dust-0.1.6/lib/array_extension.rb +5 -0
- data/vendor/dust-0.1.6/lib/definition_error.rb +20 -0
- data/vendor/dust-0.1.6/lib/dust.rb +8 -0
- data/vendor/dust-0.1.6/lib/nil_extension.rb +5 -0
- data/vendor/dust-0.1.6/lib/object_extension.rb +62 -0
- data/vendor/dust-0.1.6/lib/string_extension.rb +5 -0
- data/vendor/dust-0.1.6/lib/symbol_extension.rb +5 -0
- data/vendor/dust-0.1.6/lib/test_case_extension.rb +76 -0
- data/vendor/dust-0.1.6/rakefile.rb +50 -0
- data/vendor/dust-0.1.6/test/all_tests.rb +1 -0
- data/vendor/dust-0.1.6/test/failing_with_helper_unit_test.rb +16 -0
- data/vendor/dust-0.1.6/test/failing_with_setup_unit_test.rb +16 -0
- data/vendor/dust-0.1.6/test/functional_test.rb +12 -0
- data/vendor/dust-0.1.6/test/passing_unit_test.rb +11 -0
- data/vendor/dust-0.1.6/test/passing_with_helper_unit_test.rb +10 -0
- data/vendor/dust-0.1.6/test/passing_with_helpers_unit_test.rb +13 -0
- data/vendor/dust-0.1.6/test/passing_with_setup_unit_test.rb +10 -0
- data/vendor/dust-0.1.6/test/test_helper.rb +1 -0
- metadata +94 -0
@@ -0,0 +1,18 @@
|
|
1
|
+
module UnitRecord
|
2
|
+
module ColumnExtension
|
3
|
+
def self.included(base)
|
4
|
+
base.class_eval do
|
5
|
+
alias_method_chain :simplified_type, :boolean
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def simplified_type_with_boolean(field_type)
|
10
|
+
return :boolean if field_type.to_s.downcase.index("tinyint(1)")
|
11
|
+
simplified_type_without_boolean field_type
|
12
|
+
end
|
13
|
+
|
14
|
+
def ==(other)
|
15
|
+
other && instance_variables.all? { |ivar| instance_variable_get(ivar) == other.instance_variable_get(ivar) }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module UnitRecord
|
2
|
+
module DisconnectedActiveRecord
|
3
|
+
def disconnected?
|
4
|
+
connected? && connection.is_a?(ActiveRecord::ConnectionAdapters::UnitRecordAdapter)
|
5
|
+
end
|
6
|
+
|
7
|
+
def disconnect!(options = {})
|
8
|
+
return if disconnected?
|
9
|
+
establish_connection options.merge(:adapter => "unit_record")
|
10
|
+
if options[:stub_associations]
|
11
|
+
ActiveRecord::Base.send :include, UnitRecord::AssociationStubbing
|
12
|
+
end
|
13
|
+
Fixtures.disconnect!
|
14
|
+
UnitRecord.base_rails_test_class.disconnect!
|
15
|
+
ActiveRecord::Migration.verbose = false
|
16
|
+
ActiveRecord::Base.connection.change_strategy(:noop) do
|
17
|
+
load(RAILS_ROOT + "/db/schema.rb")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module UnitRecord
|
2
|
+
module DisconnectedTestCase
|
3
|
+
def disconnect!
|
4
|
+
self.use_transactional_fixtures = false
|
5
|
+
|
6
|
+
class_eval do
|
7
|
+
def self.fixtures(*args)
|
8
|
+
raise "Fixtures cannot be used with UnitRecord. ActiveRecord is disconnected; database access is unavailable in unit tests."
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../../test_helper"
|
2
|
+
|
3
|
+
functional_tests do
|
4
|
+
|
5
|
+
test "reconnect works" do
|
6
|
+
ActiveRecord::Base.connection.reconnect!
|
7
|
+
assert_kind_of ActiveRecord::ConnectionAdapters::UnitRecordAdapter,
|
8
|
+
ActiveRecord::Base.connection
|
9
|
+
end
|
10
|
+
|
11
|
+
test "find(:all)" do
|
12
|
+
ActiveRecord::Base.connection.change_strategy(:raise) do
|
13
|
+
assert_raises(RuntimeError) { Person.find(:all) }
|
14
|
+
end
|
15
|
+
ActiveRecord::Base.connection.change_strategy(:noop) do
|
16
|
+
assert_equal [], Person.find(:all)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
test "execute raises an exception" do
|
21
|
+
assert_raises_disconnected_exception do
|
22
|
+
ActiveRecord::Base.connection.execute "SELECT 1"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
test "select_rows raises an exception" do
|
27
|
+
assert_raises_disconnected_exception do
|
28
|
+
ActiveRecord::Base.connection.select_rows "SELECT * FROM people"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
test "select raises an exception" do
|
33
|
+
assert_raises_disconnected_exception do
|
34
|
+
ActiveRecord::Base.connection.send :select, "SELECT * FROM people"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
test "rename_table raises an exception" do
|
39
|
+
assert_raises_disconnected_exception do
|
40
|
+
ActiveRecord::Base.connection.rename_table "people", "persons"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
test "change_column raises an exception" do
|
45
|
+
assert_raises_disconnected_exception do
|
46
|
+
ActiveRecord::Base.connection.change_column "people", "first_name", :string, :null => false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
test "change_column_default raises an exception" do
|
51
|
+
assert_raises_disconnected_exception do
|
52
|
+
ActiveRecord::Base.connection.change_column_default "people", "first_person", "george"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
test "rename_column raises an exception" do
|
57
|
+
assert_raises_disconnected_exception do
|
58
|
+
ActiveRecord::Base.connection.rename_column "people", "first_name", "name_first"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
test "insert raises an exception" do
|
63
|
+
assert_raises_disconnected_exception do
|
64
|
+
ActiveRecord::Base.connection.rename_column "people", "first_name", "name_first"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
test "initialize can set strategy" do
|
69
|
+
ActiveRecord::Base.establish_connection :adapter => "unit_record", :strategy => :noop
|
70
|
+
assert_nil ActiveRecord::Base.connection.execute("SELECT 1")
|
71
|
+
ActiveRecord::Base.establish_connection :adapter => "unit_record", :strategy => :raise
|
72
|
+
assert_raises(RuntimeError) { ActiveRecord::Base.connection.execute("SELECT 1") }
|
73
|
+
end
|
74
|
+
|
75
|
+
test "noop" do
|
76
|
+
ActiveRecord::Base.connection.change_strategy(:noop) do
|
77
|
+
assert_nil ActiveRecord::Base.connection.execute("SELECT 1")
|
78
|
+
assert_nil ActiveRecord::Base.connection.insert("INSERT INTO ...")
|
79
|
+
assert_equal [], ActiveRecord::Base.connection.select_rows("SELECT * FROM people")
|
80
|
+
assert_equal [], ActiveRecord::Base.connection.send(:select, "SELECT * FROM people")
|
81
|
+
assert_nil ActiveRecord::Base.connection.rename_table("people", "persons")
|
82
|
+
assert_nil ActiveRecord::Base.connection.change_column("people", "first_name", :string, :null => false)
|
83
|
+
assert_nil ActiveRecord::Base.connection.change_column_default("people", "first_person", "george")
|
84
|
+
assert_nil ActiveRecord::Base.connection.rename_column("people", "first_name", "name_first")
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
test "change_strategy raises if invalid strategy" do
|
89
|
+
assert_nothing_raised { ActiveRecord::Base.connection.change_strategy(:noop) {} }
|
90
|
+
assert_nothing_raised { ActiveRecord::Base.connection.change_strategy(:raise) {} }
|
91
|
+
assert_raises(ArgumentError) { ActiveRecord::Base.connection.change_strategy(:bogus) {} }
|
92
|
+
end
|
93
|
+
|
94
|
+
def assert_raises_disconnected_exception(&block)
|
95
|
+
exception = nil
|
96
|
+
begin
|
97
|
+
yield
|
98
|
+
rescue Exception => exception
|
99
|
+
end
|
100
|
+
assert_not_nil exception
|
101
|
+
assert_equal "ActiveRecord is disconnected; database access is unavailable in unit tests.", exception.message
|
102
|
+
end
|
103
|
+
end
|
data/test/db/schema.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
ActiveRecord::Schema.define(:version => 0) do
|
2
|
+
create_table :preferences, :force => true do |t|
|
3
|
+
t.column :some_count, :integer
|
4
|
+
t.column :show_help, :boolean, :default => true
|
5
|
+
end
|
6
|
+
|
7
|
+
create_table :people, :force => true do |t|
|
8
|
+
t.column :first_name, :string
|
9
|
+
t.column :last_name, :string
|
10
|
+
end
|
11
|
+
|
12
|
+
create_table "profiles", :force => true do |t|
|
13
|
+
t.column "description", :string
|
14
|
+
t.column "person_id", :integer
|
15
|
+
end
|
16
|
+
|
17
|
+
create_table :pets, :force => true do |t|
|
18
|
+
t.column :name, :string
|
19
|
+
end
|
20
|
+
|
21
|
+
create_table :foofoo, :force => true do |t|
|
22
|
+
t.column :bar, :string
|
23
|
+
end
|
24
|
+
|
25
|
+
add_index "people", ["first_name"]
|
26
|
+
end
|
data/test/sample_spec.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
gem "rspec", "1.1.11"
|
3
|
+
require "test/unit"
|
4
|
+
require "spec"
|
5
|
+
|
6
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
7
|
+
|
8
|
+
RAILS_ROOT = File.dirname(__FILE__)
|
9
|
+
|
10
|
+
if rails_version = ENV['RAILS_VERSION']
|
11
|
+
gem "rails", rails_version
|
12
|
+
end
|
13
|
+
require "rails/version"
|
14
|
+
puts "==== Testing with Rails #{Rails::VERSION::STRING} ===="
|
15
|
+
require 'active_record'
|
16
|
+
require 'active_record/fixtures'
|
17
|
+
require "action_controller"
|
18
|
+
require "action_controller/test_process"
|
19
|
+
|
20
|
+
require "unit_record"
|
21
|
+
|
22
|
+
if UnitRecord.rails_version >= "2.3"
|
23
|
+
ActiveSupport::TestCase.class_eval { include ActiveRecord::TestFixtures }
|
24
|
+
end
|
25
|
+
|
26
|
+
# Needed because of this line in setup_with_fixtures and teardown_with_fixtures:
|
27
|
+
# return unless defined?(ActiveRecord::Base) && !ActiveRecord::Base.configurations.blank?
|
28
|
+
ActiveRecord::Base.configurations = {"irrelevant" => {:adapter => "stub"}}
|
29
|
+
|
30
|
+
ActiveRecord::Base.disconnect! :strategy => :raise, :stub_associations => true
|
31
|
+
|
32
|
+
describe UnitRecord do
|
33
|
+
it "disconnects tests from the database" do
|
34
|
+
lambda do
|
35
|
+
ActiveRecord::Base.connection.select_value("SELECT 1")
|
36
|
+
end.should raise_error
|
37
|
+
end
|
38
|
+
|
39
|
+
it "can change strategy to noop" do
|
40
|
+
ActiveRecord::Base.connection.change_strategy(:noop) do
|
41
|
+
ActiveRecord::Base.connection.select_value("SELECT 1").should == nil
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
unless defined?(TEST_HELPER_LOADED)
|
2
|
+
TEST_HELPER_LOADED = true
|
3
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
4
|
+
RAILS_ROOT = File.dirname(__FILE__)
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require 'test/unit'
|
8
|
+
|
9
|
+
if rails_version = ENV['RAILS_VERSION']
|
10
|
+
gem "rails", rails_version
|
11
|
+
end
|
12
|
+
require "rails/version"
|
13
|
+
puts "==== Testing with Rails #{Rails::VERSION::STRING} ===="
|
14
|
+
require 'active_record'
|
15
|
+
require 'active_record/fixtures'
|
16
|
+
require "action_controller"
|
17
|
+
if Rails::VERSION::MAJOR == 2
|
18
|
+
require "action_controller/test_case"
|
19
|
+
end
|
20
|
+
require "action_controller/test_process"
|
21
|
+
|
22
|
+
begin
|
23
|
+
gem "mocha"
|
24
|
+
require 'mocha'
|
25
|
+
rescue LoadError, Gem::LoadError
|
26
|
+
raise "need mocha to test"
|
27
|
+
end
|
28
|
+
$LOAD_PATH << File.dirname(__FILE__) + "/../vendor/dust-0.1.6/lib"
|
29
|
+
require 'dust'
|
30
|
+
Test::Unit::TestCase.disallow_setup!
|
31
|
+
|
32
|
+
$LOAD_PATH << File.dirname(__FILE__) + "/../lib"
|
33
|
+
require "unit_record"
|
34
|
+
|
35
|
+
if UnitRecord.rails_version >= "2.3"
|
36
|
+
require "active_support/test_case"
|
37
|
+
ActiveSupport::TestCase.class_eval { include ActiveRecord::TestFixtures }
|
38
|
+
end
|
39
|
+
|
40
|
+
UnitRecord.base_rails_test_class.use_transactional_fixtures = true
|
41
|
+
|
42
|
+
# Needed because of this line in setup_with_fixtures and teardown_with_fixtures:
|
43
|
+
# return unless defined?(ActiveRecord::Base) && !ActiveRecord::Base.configurations.blank?
|
44
|
+
ActiveRecord::Base.configurations = {"irrelevant" => {:adapter => "stub"}}
|
45
|
+
|
46
|
+
class Preference < ActiveRecord::Base
|
47
|
+
end
|
48
|
+
|
49
|
+
class Person < ActiveRecord::Base
|
50
|
+
has_many :pets
|
51
|
+
has_one :profile
|
52
|
+
end
|
53
|
+
|
54
|
+
class Profile < ActiveRecord::Base
|
55
|
+
belongs_to :person
|
56
|
+
end
|
57
|
+
|
58
|
+
class Pet < ActiveRecord::Base
|
59
|
+
belongs_to :person
|
60
|
+
end
|
61
|
+
|
62
|
+
class Foo < ActiveRecord::Base
|
63
|
+
set_table_name :foofoo
|
64
|
+
end
|
65
|
+
|
66
|
+
class DoesNotExist < ActiveRecord::Base
|
67
|
+
set_table_name "table_does_not_exist"
|
68
|
+
end
|
69
|
+
|
70
|
+
ActiveRecord::Base.disconnect! :strategy => :raise, :stub_associations => true
|
71
|
+
# make sure calling disconnect multiple times does not cause problems
|
72
|
+
ActiveRecord::Base.disconnect! :strategy => :raise, :stub_associations => true
|
73
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper"
|
2
|
+
|
3
|
+
functional_tests do
|
4
|
+
|
5
|
+
test "stubbing a has_many" do
|
6
|
+
pets = [stub, stub]
|
7
|
+
person = Person.new :pets => pets
|
8
|
+
assert_equal pets, person.pets
|
9
|
+
end
|
10
|
+
|
11
|
+
test "stubbing a belongs_to" do
|
12
|
+
person = stub
|
13
|
+
pet = Pet.new :person => person
|
14
|
+
assert_equal person, pet.person
|
15
|
+
end
|
16
|
+
|
17
|
+
test "using correct classes does not stub" do
|
18
|
+
person = Person.new(:first_name => "Dan")
|
19
|
+
pet = Pet.new :person => person
|
20
|
+
pet.person = Person.new(:first_name => "Tom")
|
21
|
+
assert_equal "Tom", pet.person.first_name
|
22
|
+
end
|
23
|
+
|
24
|
+
test "using other than correct classes does stub" do
|
25
|
+
person = Object.new
|
26
|
+
def person.first_name; "Dan"; end
|
27
|
+
pet = Pet.new :person => person
|
28
|
+
pet.person = Person.new(:first_name => "Tom")
|
29
|
+
assert_equal "Dan", pet.person.first_name
|
30
|
+
end
|
31
|
+
|
32
|
+
test "multiple includes doesn't hurt" do
|
33
|
+
ActiveRecord::Base.send :include, UnitRecord::AssociationStubbing
|
34
|
+
Person.new
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper"
|
2
|
+
|
3
|
+
functional_tests do
|
4
|
+
test "caching columns with no defaults or not nulls" do
|
5
|
+
expected = [
|
6
|
+
ActiveRecord::ConnectionAdapters::Column.new("id", nil, "int(11) DEFAULT NULL auto_increment PRIMARY KEY", nil),
|
7
|
+
ActiveRecord::ConnectionAdapters::Column.new("first_name", nil, "varchar(255)", nil),
|
8
|
+
ActiveRecord::ConnectionAdapters::Column.new("last_name", nil, "varchar(255)", nil)
|
9
|
+
]
|
10
|
+
expected[0].primary = true
|
11
|
+
expected[1..-1].each { |column| column.primary = false }
|
12
|
+
assert_equal expected, Person.columns
|
13
|
+
end
|
14
|
+
|
15
|
+
test "caching column with default" do
|
16
|
+
expected = ActiveRecord::ConnectionAdapters::Column.new("show_help", true, "tinyint(1)", nil)
|
17
|
+
expected.primary = false
|
18
|
+
assert_equal expected, Preference.columns.detect { |c| c.name == "show_help" }
|
19
|
+
end
|
20
|
+
|
21
|
+
test "boolean columns" do
|
22
|
+
expected = ActiveRecord::ConnectionAdapters::Column.new("show_help", true, "tinyint(1)", nil)
|
23
|
+
expected.primary = false
|
24
|
+
assert_equal :boolean, Preference.columns.detect { |c| c.name == "show_help" }.type
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper"
|
2
|
+
|
3
|
+
unit_tests do
|
4
|
+
test "equality" do
|
5
|
+
column1 = ActiveRecord::ConnectionAdapters::Column.new("name", nil, :string, nil)
|
6
|
+
column2 = ActiveRecord::ConnectionAdapters::Column.new("name", nil, :string, nil)
|
7
|
+
assert_equal column1, column2
|
8
|
+
end
|
9
|
+
|
10
|
+
test "non-equality on name" do
|
11
|
+
column1 = ActiveRecord::ConnectionAdapters::Column.new("name", nil, :string, nil)
|
12
|
+
column2 = ActiveRecord::ConnectionAdapters::Column.new("different name", nil, :string, nil)
|
13
|
+
assert column1 != column2
|
14
|
+
end
|
15
|
+
|
16
|
+
test "non-equality on sql_type" do
|
17
|
+
column1 = ActiveRecord::ConnectionAdapters::Column.new("name", nil, :string, nil)
|
18
|
+
column2 = ActiveRecord::ConnectionAdapters::Column.new("name", nil, :text, nil)
|
19
|
+
assert column1 != column2
|
20
|
+
end
|
21
|
+
|
22
|
+
test "non-equality on default" do
|
23
|
+
column1 = ActiveRecord::ConnectionAdapters::Column.new("name", nil, :string, nil)
|
24
|
+
column2 = ActiveRecord::ConnectionAdapters::Column.new("name", "Dan", :string, nil)
|
25
|
+
assert column1 != column2
|
26
|
+
end
|
27
|
+
|
28
|
+
test "non-equality on null" do
|
29
|
+
column1 = ActiveRecord::ConnectionAdapters::Column.new("name", nil, :string, nil)
|
30
|
+
column2 = ActiveRecord::ConnectionAdapters::Column.new("name", nil, :string, true)
|
31
|
+
assert column1 != column2
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper"
|
2
|
+
|
3
|
+
functional_tests do
|
4
|
+
test "instantiating" do
|
5
|
+
person = Person.new :first_name => "Dan", :last_name => "Manges"
|
6
|
+
assert_equal "Dan", person.first_name
|
7
|
+
assert_equal "Manges", person.last_name
|
8
|
+
end
|
9
|
+
|
10
|
+
test "using model with column with a default" do
|
11
|
+
record = Preference.new
|
12
|
+
assert_equal true, record.show_help?
|
13
|
+
end
|
14
|
+
|
15
|
+
test "typecasting happens for integer attributes" do
|
16
|
+
record = Preference.new
|
17
|
+
record.some_count = "42"
|
18
|
+
assert_equal 42, record.some_count
|
19
|
+
end
|
20
|
+
|
21
|
+
test "a model with a non-convential table name does not blow up" do
|
22
|
+
assert_nothing_raised { Foo.columns }
|
23
|
+
end
|
24
|
+
|
25
|
+
test "using attribute on a model with a non-conventional table name" do
|
26
|
+
foo = Foo.new
|
27
|
+
foo.bar = "baz"
|
28
|
+
assert_equal "baz", foo.bar
|
29
|
+
end
|
30
|
+
|
31
|
+
test "should get a descriptive error message if no cached columns" do
|
32
|
+
exception = nil
|
33
|
+
begin
|
34
|
+
DoesNotExist.columns
|
35
|
+
rescue => exception
|
36
|
+
end
|
37
|
+
assert_not_nil exception
|
38
|
+
assert_equal "Columns are not cached for 'table_does_not_exist' - check schema.rb", exception.message
|
39
|
+
end
|
40
|
+
end
|