class LeftOuterJoinAssociationTest

Public Instance Methods

test_construct_finder_sql_applies_aliases_tables_on_association_conditions() click to toggle source
# File activerecord/test/cases/associations/left_outer_join_association_test.rb, line 14
def test_construct_finder_sql_applies_aliases_tables_on_association_conditions
  result = Author.left_outer_joins(:thinking_posts, :welcome_posts).to_a
  assert_equal authors(:david), result.first
end
test_construct_finder_sql_does_not_table_name_collide_on_duplicate_associations() click to toggle source
# File activerecord/test/cases/associations/left_outer_join_association_test.rb, line 19
def test_construct_finder_sql_does_not_table_name_collide_on_duplicate_associations
  assert_nothing_raised do
    queries = capture_sql do
      Person.left_outer_joins(agents: { agents: :agents })
            .left_outer_joins(agents: { agents: { primary_contact: :agents } }).to_a
    end
    assert queries.any? { |sql| /agents_people_4/i.match?(sql) }
  end
end
test_construct_finder_sql_ignores_empty_left_outer_joins_array() click to toggle source
# File activerecord/test/cases/associations/left_outer_join_association_test.rb, line 53
def test_construct_finder_sql_ignores_empty_left_outer_joins_array
  queries = capture_sql { Author.left_outer_joins([]).to_a }
  assert queries.none? { |sql| /LEFT OUTER JOIN/i.match?(sql) }
end
test_construct_finder_sql_ignores_empty_left_outer_joins_hash() click to toggle source
# File activerecord/test/cases/associations/left_outer_join_association_test.rb, line 48
def test_construct_finder_sql_ignores_empty_left_outer_joins_hash
  queries = capture_sql { Author.left_outer_joins({}).to_a }
  assert queries.none? { |sql| /LEFT OUTER JOIN/i.match?(sql) }
end
test_does_not_override_select() click to toggle source
# File activerecord/test/cases/associations/left_outer_join_association_test.rb, line 77
def test_does_not_override_select
  authors = Author.select("authors.name, #{%{(authors.author_address_id || ' ' || authors.author_address_extra_id) as addr_id}}").left_outer_joins(:posts)
  assert authors.any?
  assert authors.first.respond_to?(:addr_id)
end
test_find_with_sti_join() click to toggle source
# File activerecord/test/cases/associations/left_outer_join_association_test.rb, line 68
def test_find_with_sti_join
  scope = Post.left_outer_joins(:special_comments).where(id: posts(:sti_comments).id)

  # The join should match SpecialComment and its subclasses only
  assert scope.where("comments.type" => "Comment").empty?
  assert !scope.where("comments.type" => "SpecialComment").empty?
  assert !scope.where("comments.type" => "SubSpecialComment").empty?
end
test_join_conditions_added_to_join_clause() click to toggle source
# File activerecord/test/cases/associations/left_outer_join_association_test.rb, line 62
def test_join_conditions_added_to_join_clause
  queries = capture_sql { Author.left_outer_joins(:essays).to_a }
  assert queries.any? { |sql| /writer_type.*?=.*?(Author|\?|\$1|\:a1)/i.match?(sql) }
  assert queries.none? { |sql| /WHERE/i.match?(sql) }
end
test_left_joins_aliases_left_outer_joins() click to toggle source
# File activerecord/test/cases/associations/left_outer_join_association_test.rb, line 34
def test_left_joins_aliases_left_outer_joins
  assert_equal Post.left_outer_joins(:comments).to_sql, Post.left_joins(:comments).to_sql
end
test_left_outer_joins_actually_does_a_left_outer_join() click to toggle source
# File activerecord/test/cases/associations/left_outer_join_association_test.rb, line 43
def test_left_outer_joins_actually_does_a_left_outer_join
  queries = capture_sql { Author.left_outer_joins(:posts).to_a }
  assert queries.any? { |sql| /LEFT OUTER JOIN/i.match?(sql) }
end
test_left_outer_joins_count_is_same_as_size_of_loaded_results() click to toggle source
# File activerecord/test/cases/associations/left_outer_join_association_test.rb, line 29
def test_left_outer_joins_count_is_same_as_size_of_loaded_results
  assert_equal 17, Post.left_outer_joins(:comments).to_a.size
  assert_equal 17, Post.left_outer_joins(:comments).count
end
test_left_outer_joins_forbids_to_use_string_as_argument() click to toggle source
# File activerecord/test/cases/associations/left_outer_join_association_test.rb, line 58
def test_left_outer_joins_forbids_to_use_string_as_argument
  assert_raise(ArgumentError) { Author.left_outer_joins('LEFT OUTER JOIN "posts" ON "posts"."user_id" = "users"."id"').to_a }
end
test_left_outer_joins_return_has_value_for_every_comment() click to toggle source
# File activerecord/test/cases/associations/left_outer_join_association_test.rb, line 38
def test_left_outer_joins_return_has_value_for_every_comment
  all_post_ids = Post.pluck(:id)
  assert_equal all_post_ids, all_post_ids & Post.left_outer_joins(:comments).pluck(:id)
end