mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
55dec5a7da
This test does not belong to has many associations test.
95 lines
2.7 KiB
Ruby
95 lines
2.7 KiB
Ruby
require "cases/helper"
|
|
require 'models/author'
|
|
require 'models/price_estimate'
|
|
require 'models/treasure'
|
|
require 'models/post'
|
|
require 'models/comment'
|
|
require 'models/edge'
|
|
|
|
module ActiveRecord
|
|
class WhereTest < ActiveRecord::TestCase
|
|
fixtures :posts, :edges
|
|
|
|
def test_belongs_to_shallow_where
|
|
author = Author.new
|
|
author.id = 1
|
|
|
|
assert_equal Post.where(author_id: 1).to_sql, Post.where(author: author).to_sql
|
|
end
|
|
|
|
def test_belongs_to_nested_where
|
|
parent = Comment.new
|
|
parent.id = 1
|
|
|
|
expected = Post.where(comments: { parent_id: 1 }).joins(:comments)
|
|
actual = Post.where(comments: { parent: parent }).joins(:comments)
|
|
|
|
assert_equal expected.to_sql, actual.to_sql
|
|
end
|
|
|
|
def test_polymorphic_shallow_where
|
|
treasure = Treasure.new
|
|
treasure.id = 1
|
|
|
|
expected = PriceEstimate.where(estimate_of_type: 'Treasure', estimate_of_id: 1)
|
|
actual = PriceEstimate.where(estimate_of: treasure)
|
|
|
|
assert_equal expected.to_sql, actual.to_sql
|
|
end
|
|
|
|
def test_polymorphic_sti_shallow_where
|
|
treasure = HiddenTreasure.new
|
|
treasure.id = 1
|
|
|
|
expected = PriceEstimate.where(estimate_of_type: 'Treasure', estimate_of_id: 1)
|
|
actual = PriceEstimate.where(estimate_of: treasure)
|
|
|
|
assert_equal expected.to_sql, actual.to_sql
|
|
end
|
|
|
|
def test_polymorphic_nested_where
|
|
thing = Post.new
|
|
thing.id = 1
|
|
|
|
expected = Treasure.where(price_estimates: { thing_type: 'Post', thing_id: 1 }).joins(:price_estimates)
|
|
actual = Treasure.where(price_estimates: { thing: thing }).joins(:price_estimates)
|
|
|
|
assert_equal expected.to_sql, actual.to_sql
|
|
end
|
|
|
|
def test_polymorphic_sti_nested_where
|
|
treasure = HiddenTreasure.new
|
|
treasure.id = 1
|
|
|
|
expected = Treasure.where(price_estimates: { estimate_of_type: 'Treasure', estimate_of_id: 1 }).joins(:price_estimates)
|
|
actual = Treasure.where(price_estimates: { estimate_of: treasure }).joins(:price_estimates)
|
|
|
|
assert_equal expected.to_sql, actual.to_sql
|
|
end
|
|
|
|
def test_where_error
|
|
assert_raises(ActiveRecord::StatementInvalid) do
|
|
Post.where(:id => { 'posts.author_id' => 10 }).first
|
|
end
|
|
end
|
|
|
|
def test_where_with_table_name
|
|
post = Post.first
|
|
assert_equal post, Post.where(:posts => { 'id' => post.id }).first
|
|
end
|
|
|
|
def test_where_with_table_name_and_empty_hash
|
|
assert_equal 0, Post.where(:posts => {}).count
|
|
end
|
|
|
|
def test_where_with_empty_hash_and_no_foreign_key
|
|
assert_equal 0, Edge.where(:sink => {}).count
|
|
end
|
|
|
|
def test_where_with_blank_conditions
|
|
[[], {}, nil, ""].each do |blank|
|
|
assert_equal 4, Edge.where(blank).order("sink_id").to_a.size
|
|
end
|
|
end
|
|
end
|
|
end
|