Extract FakeKlass in relation_test.rb and relation/mutation_test.rb

`FakeKlass` in `relation_test.rb` and `relation/mutation_test.rb` are
almost the same.
This commit is contained in:
Ryuta Kamizono 2017-07-11 07:40:26 +09:00
parent bfbae885b2
commit 23300f4440
3 changed files with 38 additions and 52 deletions

@ -3,39 +3,6 @@
module ActiveRecord module ActiveRecord
class RelationMutationTest < ActiveRecord::TestCase class RelationMutationTest < ActiveRecord::TestCase
FakeKlass = Struct.new(:table_name, :name) do
extend ActiveRecord::Delegation::DelegateCache
inherited self
def connection
Post.connection
end
def relation_delegate_class(klass)
self.class.relation_delegate_class(klass)
end
def attribute_alias?(name)
false
end
def sanitize_sql(sql)
sql
end
def sanitize_sql_for_order(sql)
sql
end
def arel_attribute(name, table)
table[name]
end
end
def relation
@relation ||= Relation.new FakeKlass.new("posts"), Post.arel_table, Post.predicate_builder
end
(Relation::MULTI_VALUE_METHODS - [:references, :extending, :order, :unscope, :select]).each do |method| (Relation::MULTI_VALUE_METHODS - [:references, :extending, :order, :unscope, :select]).each do |method|
test "##{method}!" do test "##{method}!" do
assert relation.public_send("#{method}!", :foo).equal?(relation) assert relation.public_send("#{method}!", :foo).equal?(relation)
@ -167,5 +134,10 @@ def relation
relation.skip_query_cache! relation.skip_query_cache!
assert relation.skip_query_cache_value assert relation.skip_query_cache_value
end end
private
def relation
@relation ||= Relation.new(FakeKlass, Post.arel_table, Post.predicate_builder)
end
end end
end end

@ -8,24 +8,6 @@ module ActiveRecord
class RelationTest < ActiveRecord::TestCase class RelationTest < ActiveRecord::TestCase
fixtures :posts, :comments, :authors, :author_addresses, :ratings fixtures :posts, :comments, :authors, :author_addresses, :ratings
FakeKlass = Struct.new(:table_name, :name) do
extend ActiveRecord::Delegation::DelegateCache
inherited self
def self.connection
Post.connection
end
def self.table_name
"fake_table"
end
def self.sanitize_sql_for_order(sql)
sql
end
end
def test_construction def test_construction
relation = Relation.new(FakeKlass, :b, nil) relation = Relation.new(FakeKlass, :b, nil)
assert_equal FakeKlass, relation.klass assert_equal FakeKlass, relation.klass
@ -90,7 +72,7 @@ def test_tree_is_not_traversed
end end
def test_table_name_delegates_to_klass def test_table_name_delegates_to_klass
relation = Relation.new(FakeKlass.new("posts"), :b, Post.predicate_builder) relation = Relation.new(FakeKlass, :b, Post.predicate_builder)
assert_equal "posts", relation.table_name assert_equal "posts", relation.table_name
end end

@ -276,3 +276,35 @@ class ConditionalStiPost < Post
class SubConditionalStiPost < ConditionalStiPost class SubConditionalStiPost < ConditionalStiPost
end end
class FakeKlass
extend ActiveRecord::Delegation::DelegateCache
inherited self
class << self
def connection
Post.connection
end
def table_name
"posts"
end
def attribute_alias?(name)
false
end
def sanitize_sql(sql)
sql
end
def sanitize_sql_for_order(sql)
sql
end
def arel_attribute(name, table)
table[name]
end
end
end